<?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>198059</bug_id>
          
          <creation_ts>2019-05-20 16:06:46 -0700</creation_ts>
          <short_desc>WHLSL: Add an AST dumper</short_desc>
          <delta_ts>2019-05-21 20:19:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1537721</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-20 16:06:46 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537776</commentid>
    <comment_count>1</comment_count>
      <attachid>370289</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-20 18:36:00 -0700</bug_when>
    <thetext>Created attachment 370289
WIP

It&apos;s starting to print stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537795</commentid>
    <comment_count>2</comment_count>
      <attachid>370295</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-20 20:17:37 -0700</bug_when>
    <thetext>Created attachment 370295
WIP

It prints more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538065</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-21 17:45:09 -0700</bug_when>
    <thetext>This program:

```
typedef Foo = int;
typedef Foo2 = float[42];

struct M {
    int a;
    int b;
    float c;
}

[numthreads(10, 20, 30)] compute float test1() {
    return 25;
}

vertex float test2() {
    return 25;
}

vertex float test3() : SV_Position {
    bool b = 25 ? true : false;
    return 25;
}

void testLoops()
{
    float negativeFloat = -1.5;
    int i = -1;
    do {
        i = i + 1;
    } while (i &lt; 25);

    i = 0;
    while (i &lt; 42) {
        i = i + 1;
    }

    for (int j = 0; j &lt; 42; j = j + 1) { }
    int j;
    for (j = 0; j &lt; 42; j++) { }
}

void testSemantic(float foo : attribute(42))
{

}

float foo(int a, int b, M m, thread int* foo, thread float[] floatArray) {
    int[42] x;
    x[m.a = 25] = 44;
    float result = 42;
    m.a = 25;
    if (a) {
        m.b = 25;
    } else {
        m.c = 25.5;
    }

    int aaaa = 42, bbbb = 45;

    int cccc = aaaa || bbbb;
    cccc = aaaa &amp;&amp; bbbb;
    cccc = !cccc;

    thread int* myPointer = &amp;aaaa;
    thread int[] myArrayPointer = @x;

    int qmark = aaaa ? aaaa : cccc;

    qmark += 20;

    qmark = (10, 20, 30);

    qmark = *foo;

    qmark = qmark++;
    qmark = ++qmark;

    //qmark++;
    ++qmark;

    switch (aaaa) {
    case 20: {
        qmark = qmark * 2;
        break;
    }
    case 25: {
        qmark = qmark * 42;
        break;
    }
    default: {
        qmark = qmark / 2;
        break;
    }
    }

    switch (aaaa) {
    case 20:
        qmark = qmark * 2;
        break;
    case 25:
        qmark = qmark * 42;
        break;
    default:
        switch (aaaa) {
        case 20:
            qmark = qmark * 2;
            break;
        case 25:
            qmark = qmark * 42;
            fallthrough;
        default:
            qmark = qmark / 2;
            break;
        }
        qmark = qmark / 2;
        break;
    }

    Foo2 foo2;

    return result;
    trap;
}
```

Prints as:

```
native typedef void;
native typedef bool;
native typedef uchar;
native typedef ushort;
native typedef uint;
native typedef char;
native typedef short;
native typedef int;
native typedef half;
native typedef float;
native typedef atomic_int;
native typedef atomic_uint;
native typedef vector&lt;bool, 2&gt;;
native typedef vector&lt;bool, 3&gt;;
native typedef vector&lt;bool, 4&gt;;
native typedef vector&lt;uchar, 2&gt;;
native typedef vector&lt;uchar, 3&gt;;
native typedef vector&lt;uchar, 4&gt;;
native typedef vector&lt;ushort, 2&gt;;
native typedef vector&lt;ushort, 3&gt;;
native typedef vector&lt;ushort, 4&gt;;
native typedef vector&lt;uint, 2&gt;;
native typedef vector&lt;uint, 3&gt;;
native typedef vector&lt;uint, 4&gt;;
native typedef vector&lt;char, 2&gt;;
native typedef vector&lt;char, 3&gt;;
native typedef vector&lt;char, 4&gt;;
native typedef vector&lt;short, 2&gt;;
native typedef vector&lt;short, 3&gt;;
native typedef vector&lt;short, 4&gt;;
native typedef vector&lt;int, 2&gt;;
native typedef vector&lt;int, 3&gt;;
native typedef vector&lt;int, 4&gt;;
native typedef vector&lt;half, 2&gt;;
native typedef vector&lt;half, 3&gt;;
native typedef vector&lt;half, 4&gt;;
native typedef vector&lt;float, 2&gt;;
native typedef vector&lt;float, 3&gt;;
native typedef vector&lt;float, 4&gt;;
native typedef matrix&lt;half, 2, 2&gt;;
native typedef matrix&lt;half, 2, 3&gt;;
native typedef matrix&lt;half, 2, 4&gt;;
native typedef matrix&lt;half, 3, 2&gt;;
native typedef matrix&lt;half, 3, 3&gt;;
native typedef matrix&lt;half, 3, 4&gt;;
native typedef matrix&lt;half, 4, 2&gt;;
native typedef matrix&lt;half, 4, 3&gt;;
native typedef matrix&lt;half, 4, 4&gt;;
native typedef matrix&lt;float, 2, 2&gt;;
native typedef matrix&lt;float, 2, 3&gt;;
native typedef matrix&lt;float, 2, 4&gt;;
native typedef matrix&lt;float, 3, 2&gt;;
native typedef matrix&lt;float, 3, 3&gt;;
native typedef matrix&lt;float, 3, 4&gt;;
native typedef matrix&lt;float, 4, 2&gt;;
native typedef matrix&lt;float, 4, 3&gt;;
native typedef matrix&lt;float, 4, 4&gt;;
native typedef sampler;
native typedef Texture1D&lt;ushort&gt;;
native typedef Texture1D&lt;ushort2&gt;;
native typedef Texture1D&lt;ushort3&gt;;
native typedef Texture1D&lt;ushort4&gt;;
native typedef Texture1D&lt;uint&gt;;
native typedef Texture1D&lt;uint2&gt;;
native typedef Texture1D&lt;uint3&gt;;
native typedef Texture1D&lt;uint4&gt;;
native typedef Texture1D&lt;short&gt;;
native typedef Texture1D&lt;short2&gt;;
native typedef Texture1D&lt;short3&gt;;
native typedef Texture1D&lt;short4&gt;;
native typedef Texture1D&lt;int&gt;;
native typedef Texture1D&lt;int2&gt;;
native typedef Texture1D&lt;int3&gt;;
native typedef Texture1D&lt;int4&gt;;
native typedef Texture1D&lt;half&gt;;
native typedef Texture1D&lt;half2&gt;;
native typedef Texture1D&lt;half3&gt;;
native typedef Texture1D&lt;half4&gt;;
native typedef Texture1D&lt;float&gt;;
native typedef Texture1D&lt;float2&gt;;
native typedef Texture1D&lt;float3&gt;;
native typedef Texture1D&lt;float4&gt;;
native typedef RWTexture1D&lt;ushort&gt;;
native typedef RWTexture1D&lt;ushort2&gt;;
native typedef RWTexture1D&lt;ushort3&gt;;
native typedef RWTexture1D&lt;ushort4&gt;;
native typedef RWTexture1D&lt;uint&gt;;
native typedef RWTexture1D&lt;uint2&gt;;
native typedef RWTexture1D&lt;uint3&gt;;
native typedef RWTexture1D&lt;uint4&gt;;
native typedef RWTexture1D&lt;short&gt;;
native typedef RWTexture1D&lt;short2&gt;;
native typedef RWTexture1D&lt;short3&gt;;
native typedef RWTexture1D&lt;short4&gt;;
native typedef RWTexture1D&lt;int&gt;;
native typedef RWTexture1D&lt;int2&gt;;
native typedef RWTexture1D&lt;int3&gt;;
native typedef RWTexture1D&lt;int4&gt;;
native typedef RWTexture1D&lt;half&gt;;
native typedef RWTexture1D&lt;half2&gt;;
native typedef RWTexture1D&lt;half3&gt;;
native typedef RWTexture1D&lt;half4&gt;;
native typedef RWTexture1D&lt;float&gt;;
native typedef RWTexture1D&lt;float2&gt;;
native typedef RWTexture1D&lt;float3&gt;;
native typedef RWTexture1D&lt;float4&gt;;
native typedef Texture1DArray&lt;ushort&gt;;
native typedef Texture1DArray&lt;ushort2&gt;;
native typedef Texture1DArray&lt;ushort3&gt;;
native typedef Texture1DArray&lt;ushort4&gt;;
native typedef Texture1DArray&lt;uint&gt;;
native typedef Texture1DArray&lt;uint2&gt;;
native typedef Texture1DArray&lt;uint3&gt;;
native typedef Texture1DArray&lt;uint4&gt;;
native typedef Texture1DArray&lt;short&gt;;
native typedef Texture1DArray&lt;short2&gt;;
native typedef Texture1DArray&lt;short3&gt;;
native typedef Texture1DArray&lt;short4&gt;;
native typedef Texture1DArray&lt;int&gt;;
native typedef Texture1DArray&lt;int2&gt;;
native typedef Texture1DArray&lt;int3&gt;;
native typedef Texture1DArray&lt;int4&gt;;
native typedef Texture1DArray&lt;half&gt;;
native typedef Texture1DArray&lt;half2&gt;;
native typedef Texture1DArray&lt;half3&gt;;
native typedef Texture1DArray&lt;half4&gt;;
native typedef Texture1DArray&lt;float&gt;;
native typedef Texture1DArray&lt;float2&gt;;
native typedef Texture1DArray&lt;float3&gt;;
native typedef Texture1DArray&lt;float4&gt;;
native typedef RWTexture1DArray&lt;ushort&gt;;
native typedef RWTexture1DArray&lt;ushort2&gt;;
native typedef RWTexture1DArray&lt;ushort3&gt;;
native typedef RWTexture1DArray&lt;ushort4&gt;;
native typedef RWTexture1DArray&lt;uint&gt;;
native typedef RWTexture1DArray&lt;uint2&gt;;
native typedef RWTexture1DArray&lt;uint3&gt;;
native typedef RWTexture1DArray&lt;uint4&gt;;
native typedef RWTexture1DArray&lt;short&gt;;
native typedef RWTexture1DArray&lt;short2&gt;;
native typedef RWTexture1DArray&lt;short3&gt;;
native typedef RWTexture1DArray&lt;short4&gt;;
native typedef RWTexture1DArray&lt;int&gt;;
native typedef RWTexture1DArray&lt;int2&gt;;
native typedef RWTexture1DArray&lt;int3&gt;;
native typedef RWTexture1DArray&lt;int4&gt;;
native typedef RWTexture1DArray&lt;half&gt;;
native typedef RWTexture1DArray&lt;half2&gt;;
native typedef RWTexture1DArray&lt;half3&gt;;
native typedef RWTexture1DArray&lt;half4&gt;;
native typedef RWTexture1DArray&lt;float&gt;;
native typedef RWTexture1DArray&lt;float2&gt;;
native typedef RWTexture1DArray&lt;float3&gt;;
native typedef RWTexture1DArray&lt;float4&gt;;
native typedef Texture2D&lt;ushort&gt;;
native typedef Texture2D&lt;ushort2&gt;;
native typedef Texture2D&lt;ushort3&gt;;
native typedef Texture2D&lt;ushort4&gt;;
native typedef Texture2D&lt;uint&gt;;
native typedef Texture2D&lt;uint2&gt;;
native typedef Texture2D&lt;uint3&gt;;
native typedef Texture2D&lt;uint4&gt;;
native typedef Texture2D&lt;short&gt;;
native typedef Texture2D&lt;short2&gt;;
native typedef Texture2D&lt;short3&gt;;
native typedef Texture2D&lt;short4&gt;;
native typedef Texture2D&lt;int&gt;;
native typedef Texture2D&lt;int2&gt;;
native typedef Texture2D&lt;int3&gt;;
native typedef Texture2D&lt;int4&gt;;
native typedef Texture2D&lt;half&gt;;
native typedef Texture2D&lt;half2&gt;;
native typedef Texture2D&lt;half3&gt;;
native typedef Texture2D&lt;half4&gt;;
native typedef Texture2D&lt;float&gt;;
native typedef Texture2D&lt;float2&gt;;
native typedef Texture2D&lt;float3&gt;;
native typedef Texture2D&lt;float4&gt;;
native typedef RWTexture2D&lt;ushort&gt;;
native typedef RWTexture2D&lt;ushort2&gt;;
native typedef RWTexture2D&lt;ushort3&gt;;
native typedef RWTexture2D&lt;ushort4&gt;;
native typedef RWTexture2D&lt;uint&gt;;
native typedef RWTexture2D&lt;uint2&gt;;
native typedef RWTexture2D&lt;uint3&gt;;
native typedef RWTexture2D&lt;uint4&gt;;
native typedef RWTexture2D&lt;short&gt;;
native typedef RWTexture2D&lt;short2&gt;;
native typedef RWTexture2D&lt;short3&gt;;
native typedef RWTexture2D&lt;short4&gt;;
native typedef RWTexture2D&lt;int&gt;;
native typedef RWTexture2D&lt;int2&gt;;
native typedef RWTexture2D&lt;int3&gt;;
native typedef RWTexture2D&lt;int4&gt;;
native typedef RWTexture2D&lt;half&gt;;
native typedef RWTexture2D&lt;half2&gt;;
native typedef RWTexture2D&lt;half3&gt;;
native typedef RWTexture2D&lt;half4&gt;;
native typedef RWTexture2D&lt;float&gt;;
native typedef RWTexture2D&lt;float2&gt;;
native typedef RWTexture2D&lt;float3&gt;;
native typedef RWTexture2D&lt;float4&gt;;
native typedef Texture2DArray&lt;ushort&gt;;
native typedef Texture2DArray&lt;ushort2&gt;;
native typedef Texture2DArray&lt;ushort3&gt;;
native typedef Texture2DArray&lt;ushort4&gt;;
native typedef Texture2DArray&lt;uint&gt;;
native typedef Texture2DArray&lt;uint2&gt;;
native typedef Texture2DArray&lt;uint3&gt;;
native typedef Texture2DArray&lt;uint4&gt;;
native typedef Texture2DArray&lt;short&gt;;
native typedef Texture2DArray&lt;short2&gt;;
native typedef Texture2DArray&lt;short3&gt;;
native typedef Texture2DArray&lt;short4&gt;;
native typedef Texture2DArray&lt;int&gt;;
native typedef Texture2DArray&lt;int2&gt;;
native typedef Texture2DArray&lt;int3&gt;;
native typedef Texture2DArray&lt;int4&gt;;
native typedef Texture2DArray&lt;half&gt;;
native typedef Texture2DArray&lt;half2&gt;;
native typedef Texture2DArray&lt;half3&gt;;
native typedef Texture2DArray&lt;half4&gt;;
native typedef Texture2DArray&lt;float&gt;;
native typedef Texture2DArray&lt;float2&gt;;
native typedef Texture2DArray&lt;float3&gt;;
native typedef Texture2DArray&lt;float4&gt;;
native typedef RWTexture2DArray&lt;ushort&gt;;
native typedef RWTexture2DArray&lt;ushort2&gt;;
native typedef RWTexture2DArray&lt;ushort3&gt;;
native typedef RWTexture2DArray&lt;ushort4&gt;;
native typedef RWTexture2DArray&lt;uint&gt;;
native typedef RWTexture2DArray&lt;uint2&gt;;
native typedef RWTexture2DArray&lt;uint3&gt;;
native typedef RWTexture2DArray&lt;uint4&gt;;
native typedef RWTexture2DArray&lt;short&gt;;
native typedef RWTexture2DArray&lt;short2&gt;;
native typedef RWTexture2DArray&lt;short3&gt;;
native typedef RWTexture2DArray&lt;short4&gt;;
native typedef RWTexture2DArray&lt;int&gt;;
native typedef RWTexture2DArray&lt;int2&gt;;
native typedef RWTexture2DArray&lt;int3&gt;;
native typedef RWTexture2DArray&lt;int4&gt;;
native typedef RWTexture2DArray&lt;half&gt;;
native typedef RWTexture2DArray&lt;half2&gt;;
native typedef RWTexture2DArray&lt;half3&gt;;
native typedef RWTexture2DArray&lt;half4&gt;;
native typedef RWTexture2DArray&lt;float&gt;;
native typedef RWTexture2DArray&lt;float2&gt;;
native typedef RWTexture2DArray&lt;float3&gt;;
native typedef RWTexture2DArray&lt;float4&gt;;
native typedef Texture3D&lt;ushort&gt;;
native typedef Texture3D&lt;ushort2&gt;;
native typedef Texture3D&lt;ushort3&gt;;
native typedef Texture3D&lt;ushort4&gt;;
native typedef Texture3D&lt;uint&gt;;
native typedef Texture3D&lt;uint2&gt;;
native typedef Texture3D&lt;uint3&gt;;
native typedef Texture3D&lt;uint4&gt;;
native typedef Texture3D&lt;short&gt;;
native typedef Texture3D&lt;short2&gt;;
native typedef Texture3D&lt;short3&gt;;
native typedef Texture3D&lt;short4&gt;;
native typedef Texture3D&lt;int&gt;;
native typedef Texture3D&lt;int2&gt;;
native typedef Texture3D&lt;int3&gt;;
native typedef Texture3D&lt;int4&gt;;
native typedef Texture3D&lt;half&gt;;
native typedef Texture3D&lt;half2&gt;;
native typedef Texture3D&lt;half3&gt;;
native typedef Texture3D&lt;half4&gt;;
native typedef Texture3D&lt;float&gt;;
native typedef Texture3D&lt;float2&gt;;
native typedef Texture3D&lt;float3&gt;;
native typedef Texture3D&lt;float4&gt;;
native typedef RWTexture3D&lt;ushort&gt;;
native typedef RWTexture3D&lt;ushort2&gt;;
native typedef RWTexture3D&lt;ushort3&gt;;
native typedef RWTexture3D&lt;ushort4&gt;;
native typedef RWTexture3D&lt;uint&gt;;
native typedef RWTexture3D&lt;uint2&gt;;
native typedef RWTexture3D&lt;uint3&gt;;
native typedef RWTexture3D&lt;uint4&gt;;
native typedef RWTexture3D&lt;short&gt;;
native typedef RWTexture3D&lt;short2&gt;;
native typedef RWTexture3D&lt;short3&gt;;
native typedef RWTexture3D&lt;short4&gt;;
native typedef RWTexture3D&lt;int&gt;;
native typedef RWTexture3D&lt;int2&gt;;
native typedef RWTexture3D&lt;int3&gt;;
native typedef RWTexture3D&lt;int4&gt;;
native typedef RWTexture3D&lt;half&gt;;
native typedef RWTexture3D&lt;half2&gt;;
native typedef RWTexture3D&lt;half3&gt;;
native typedef RWTexture3D&lt;half4&gt;;
native typedef RWTexture3D&lt;float&gt;;
native typedef RWTexture3D&lt;float2&gt;;
native typedef RWTexture3D&lt;float3&gt;;
native typedef RWTexture3D&lt;float4&gt;;
native typedef TextureCube&lt;ushort&gt;;
native typedef TextureCube&lt;ushort2&gt;;
native typedef TextureCube&lt;ushort3&gt;;
native typedef TextureCube&lt;ushort4&gt;;
native typedef TextureCube&lt;uint&gt;;
native typedef TextureCube&lt;uint2&gt;;
native typedef TextureCube&lt;uint3&gt;;
native typedef TextureCube&lt;uint4&gt;;
native typedef TextureCube&lt;short&gt;;
native typedef TextureCube&lt;short2&gt;;
native typedef TextureCube&lt;short3&gt;;
native typedef TextureCube&lt;short4&gt;;
native typedef TextureCube&lt;int&gt;;
native typedef TextureCube&lt;int2&gt;;
native typedef TextureCube&lt;int3&gt;;
native typedef TextureCube&lt;int4&gt;;
native typedef TextureCube&lt;half&gt;;
native typedef TextureCube&lt;half2&gt;;
native typedef TextureCube&lt;half3&gt;;
native typedef TextureCube&lt;half4&gt;;
native typedef TextureCube&lt;float&gt;;
native typedef TextureCube&lt;float2&gt;;
native typedef TextureCube&lt;float3&gt;;
native typedef TextureCube&lt;float4&gt;;
native typedef TextureDepth2D&lt;float&gt;;
native typedef RWTextureDepth2D&lt;float&gt;;
native typedef TextureDepth2DArray&lt;float&gt;;
native typedef RWTextureDepth2DArray&lt;float&gt;;
native typedef TextureDepthCube&lt;float&gt;;


native float operator.x(float4 ) 
native float operator.y(float4 ) 
native float operator.z(float4 ) 
native float operator.w(float4 ) 
native float4 operator.x=(float4 , float ) 
native float4 operator.y=(float4 , float ) 
native float4 operator.z=(float4 , float ) 
native float4 operator.w=(float4 , float ) 
native float ddx(float ) 
native float ddy(float ) 
native void AllMemoryBarrierWithGroupSync() 
native void DeviceMemoryBarrierWithGroupSync() 
native void GroupMemoryBarrierWithGroupSync() 


typedef bool2 = vector&lt;bool, 2&gt;;
typedef bool3 = vector&lt;bool, 3&gt;;
typedef bool4 = vector&lt;bool, 4&gt;;
typedef uchar2 = vector&lt;uchar, 2&gt;;
typedef uchar3 = vector&lt;uchar, 3&gt;;
typedef uchar4 = vector&lt;uchar, 4&gt;;
typedef ushort2 = vector&lt;ushort, 2&gt;;
typedef ushort3 = vector&lt;ushort, 3&gt;;
typedef ushort4 = vector&lt;ushort, 4&gt;;
typedef uint2 = vector&lt;uint, 2&gt;;
typedef uint3 = vector&lt;uint, 3&gt;;
typedef uint4 = vector&lt;uint, 4&gt;;
typedef char2 = vector&lt;char, 2&gt;;
typedef char3 = vector&lt;char, 3&gt;;
typedef char4 = vector&lt;char, 4&gt;;
typedef short2 = vector&lt;short, 2&gt;;
typedef short3 = vector&lt;short, 3&gt;;
typedef short4 = vector&lt;short, 4&gt;;
typedef int2 = vector&lt;int, 2&gt;;
typedef int3 = vector&lt;int, 3&gt;;
typedef int4 = vector&lt;int, 4&gt;;
typedef half2 = vector&lt;half, 2&gt;;
typedef half3 = vector&lt;half, 3&gt;;
typedef half4 = vector&lt;half, 4&gt;;
typedef float2 = vector&lt;float, 2&gt;;
typedef float3 = vector&lt;float, 3&gt;;
typedef float4 = vector&lt;float, 4&gt;;
typedef half2x2 = matrix&lt;half, 2, 2&gt;;
typedef half2x3 = matrix&lt;half, 2, 3&gt;;
typedef half2x4 = matrix&lt;half, 2, 4&gt;;
typedef half3x2 = matrix&lt;half, 3, 2&gt;;
typedef half3x3 = matrix&lt;half, 3, 3&gt;;
typedef half3x4 = matrix&lt;half, 3, 4&gt;;
typedef half4x2 = matrix&lt;half, 4, 2&gt;;
typedef half4x3 = matrix&lt;half, 4, 3&gt;;
typedef half4x4 = matrix&lt;half, 4, 4&gt;;
typedef float2x2 = matrix&lt;float, 2, 2&gt;;
typedef float2x3 = matrix&lt;float, 2, 3&gt;;
typedef float2x4 = matrix&lt;float, 2, 4&gt;;
typedef float3x2 = matrix&lt;float, 3, 2&gt;;
typedef float3x3 = matrix&lt;float, 3, 3&gt;;
typedef float3x4 = matrix&lt;float, 3, 4&gt;;
typedef float4x2 = matrix&lt;float, 4, 2&gt;;
typedef float4x3 = matrix&lt;float, 4, 3&gt;;
typedef float4x4 = matrix&lt;float, 4, 4&gt;;
typedef Foo = int;
typedef Foo2 = float[42];


struct M {
   int a;
   int b;
   float c;
}



[numthreads(10, 20, 30)] compute float test1() {
   return 25;
}

vertex float test2() {
   return 25;
}

vertex float test3() : SVPosition {
   bool b = bool(25) ? true : false;
   return 25;
}

void testLoops() {
   float negativeFloat = -1.500000;
   int i = 1;
   do {
      i = operator+(i, 1);
   } while(operator&lt;(i, 25));
   i = 0;
   while (operator&lt;(i, 42)){
      i = operator+(i, 1);
   };
   for (int j = 0; operator&lt;(j, 42); j = operator+(j, 1)) {
   };
   int j;
   for (j = 0; operator&lt;(j, 42); ($(0x7fe48864f480) = j, $(0x7fe48864f518) = operator++($(0x7fe48864f480)), j = $(0x7fe48864f518), $(0x7fe48864f480))) {
   };
}

void testSemantic(float foo : attribute(42)) {
}

float foo(int a, int b, M m, thread int* foo, thread float[] floatArray) {
   int[42] x;
   x[m.a = 25] = 44;
   float result = 42;
   m.a = 25;
   if (bool(a)) {
      m.b = 25;
   } else {
      m.c = 25.500000;
   };
   int aaaa = (42, bbbb = 45);
   int cccc = aaaa || bbbb;
   cccc = aaaa &amp;&amp; bbbb;
   cccc = !bool(cccc);
   thread int* myPointer = &amp;aaaa;
   thread int[] myArrayPointer = @x;
   int qmark = bool(aaaa) ? aaaa : cccc;
   ($(0x7fe488651710) = qmark, $(0x7fe4886517a8) = operator+($(0x7fe488651710), 20), qmark = $(0x7fe4886517a8), $(0x7fe4886517a8));
   qmark = (10, 20, 30);
   qmark = *foo;
   qmark = ($(0x7fe488651fa0) = qmark, $(0x7fe488652038) = operator++($(0x7fe488651fa0)), qmark = $(0x7fe488652038), $(0x7fe488651fa0));
   qmark = ($(0x7fe488652370) = qmark, $(0x7fe488652408) = operator++($(0x7fe488652370)), qmark = $(0x7fe488652408), $(0x7fe488652408));
   ($(0x7fe488652670) = qmark, $(0x7fe488652708) = operator++($(0x7fe488652670)), qmark = $(0x7fe488652708), $(0x7fe488652708));
   switch (aaaa) {
   case 20: {
      {
         qmark = operator*(qmark, 2);
         break;
      };
   }
   case 25: {
      {
         qmark = operator*(qmark, 42);
         break;
      };
   }
   default: {
      {
         qmark = operator/(qmark, 2);
         break;
      };
   }
   };
   switch (aaaa) {
   case 20: {
      qmark = operator*(qmark, 2);
      break;
   }
   case 25: {
      qmark = operator*(qmark, 42);
      break;
   }
   default: {
      switch (aaaa) {
      case 20: {
         qmark = operator*(qmark, 2);
         break;
      }
      case 25: {
         qmark = operator*(qmark, 42);
         fallthrough;
      }
      default: {
         qmark = operator/(qmark, 2);
         break;
      }
      };
      qmark = operator/(qmark, 2);
      break;
   }
   };
   Foo2 foo2;
   return result;
   trap;
}

```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538073</commentid>
    <comment_count>4</comment_count>
      <attachid>370362</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-21 18:03:37 -0700</bug_when>
    <thetext>Created attachment 370362
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538074</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-05-21 18:05:49 -0700</bug_when>
    <thetext>Attachment 370362 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:91:  Missing space before ( in while(  [whitespace/parens] [5]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:168:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLAST.h:45:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538077</commentid>
    <comment_count>6</comment_count>
      <attachid>370362</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-05-21 18:13:21 -0700</bug_when>
    <thetext>Comment on attachment 370362
patch

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

&gt; Source/WebCore/ChangeLog:32
&gt; +        No new tests because this is used for logging.

This could be used for some great tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538078</commentid>
    <comment_count>7</comment_count>
      <attachid>370362</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-05-21 18:17:23 -0700</bug_when>
    <thetext>Comment on attachment 370362
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:264
&gt; +    Base::visit(constantExpression);

cool

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:577
&gt; +        m_out.print(&quot; &amp;&amp; &quot;);

Aren&apos;t parentheses required to make this non ambiguous?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:589
&gt; +    visit(logicalNotExpression.operand());

ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:609
&gt; +    m_out.print(&quot;(&quot;);

makeString() will make these easier to read.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.h:44
&gt; +    void visit(AST::UnnamedType&amp;) override;

These can all be private because they&apos;ll all only be called from the base class.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.h:139
&gt; +    dataLogLn(toString(program));

Shouldn&apos;t we make a for realsies new logging channel and use WTFLog()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538098</commentid>
    <comment_count>8</comment_count>
      <attachid>370362</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-21 19:22:50 -0700</bug_when>
    <thetext>Comment on attachment 370362
patch

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

&gt;&gt; Source/WebCore/ChangeLog:32
&gt;&gt; +        No new tests because this is used for logging.
&gt; 
&gt; This could be used for some great tests.

I don&apos;t want to make tests tied to dump format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538099</commentid>
    <comment_count>9</comment_count>
      <attachid>370362</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-21 19:26:39 -0700</bug_when>
    <thetext>Comment on attachment 370362
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:577
&gt;&gt; +        m_out.print(&quot; &amp;&amp; &quot;);
&gt; 
&gt; Aren&apos;t parentheses required to make this non ambiguous?

Yup. Will fix.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:589
&gt;&gt; +    visit(logicalNotExpression.operand());
&gt; 
&gt; ditto

Yup. Will fix.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:609
&gt;&gt; +    m_out.print(&quot;(&quot;);
&gt; 
&gt; makeString() will make these easier to read.

I don&apos;t follow. How do you propose to do that here? I&apos;m calling visit() between each print call.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.h:44
&gt;&gt; +    void visit(AST::UnnamedType&amp;) override;
&gt; 
&gt; These can all be private because they&apos;ll all only be called from the base class.

will do

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLASTDumper.h:139
&gt;&gt; +    dataLogLn(toString(program));
&gt; 
&gt; Shouldn&apos;t we make a for realsies new logging channel and use WTFLog()?

Not sure what you mean here. I&apos;ve never done such a thing before. Can you elaborate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538101</commentid>
    <comment_count>10</comment_count>
      <attachid>370373</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-21 19:35:27 -0700</bug_when>
    <thetext>Created attachment 370373
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538102</commentid>
    <comment_count>11</comment_count>
      <attachid>370374</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-21 19:37:34 -0700</bug_when>
    <thetext>Created attachment 370374
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538108</commentid>
    <comment_count>12</comment_count>
      <attachid>370374</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-21 20:18:10 -0700</bug_when>
    <thetext>Comment on attachment 370374
patch for landing

Clearing flags on attachment: 370374

Committed r245613: &lt;https://trac.webkit.org/changeset/245613&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538109</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-21 20:18:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538110</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-21 20:19:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/51013223&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370289</attachid>
            <date>2019-05-20 18:36:00 -0700</date>
            <delta_ts>2019-05-20 20:17:37 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>40077</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIE1vZHVsZXMvd2Vi
c29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU28KIAogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFz
Q29udGV4dC5jcHAKIE1vZHVsZXMvd2ViZ3B1L05hdmlnYXRvckdQVS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OTAgQEAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXSExTTEFTVER1bXBlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMQVNULmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgbV9vdXQucHJpbnRsbigiXFxzdGFydCBQ
Uk9HUkFNIik7CisgICAgQmFzZTo6dmlzaXQocHJvZ3JhbSk7CisgICAgbV9vdXQucHJpbnRsbigi
XG5cXGVuZCBQUk9HUkFNIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdCh1bm5hbWVkVHlwZSk7Cisg
ICAgLyoKKyAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFT
U0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIH0K
KyAgICAqLworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVk
VHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdChuYW1lZFR5cGUpOworICAgIC8qCisgICAgaWYgKGlz
PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBlbHNl
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1l
ZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVk
VHlwZSkpOworICAgIH0KKyAgICAqLworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpU
eXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgQmFzZTo6dmlzaXQodHlwZURl
ZmluaXRpb24pOworICAgIC8vY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uLnR5cGUo
KSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
IHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnRsbihtX2luZGVudCwgInN0
cnVjdCAiLCBzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgIiB7Iik7CisgICAgeworICAgICAg
ICBhdXRvIGluZGVudCA9IGJ1bXBJbmRlbnQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1
cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQorICAg
ICAgICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgfQorICAgIG1fb3V0LnByaW50
bG4obV9pbmRlbnQsICJ9Iik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8m
IGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVt
YmVycygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOwor
fQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKK30KKwordm9pZCBBU1RE
dW1wZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBkYXRhTG9nTG4oIm5hdGl2ZSB0eXBlIGRlY2xhcmF0
aW9uISIpOworICAgIG1fb3V0LnByaW50KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpOwor
ICAgIC8vZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpKQorICAgIC8vICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVm
ZXJlbmNlKQoreworICAgIG1fb3V0LnByaW50KHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKKworICAg
IGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworICAgIGlmICh0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkgeworICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlv
biA9IGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVk
VHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uLnR5cGUo
KSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYg
cG9pbnRlclR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNp
dChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJl
ZmVyZW5jZVR5cGUpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QXJyYXlUeXBl
JiBhcnJheVR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZS50eXBlKCkp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1
Y3R1cmVFbGVtZW50KQoreworICAgIG1fb3V0LnByaW50KG1faW5kZW50KTsKKyAgICB2aXNpdChz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiLCBzdHJ1Y3R1cmVF
bGVtZW50Lm5hbWUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKKyAg
ICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7CisgICAgbV9vdXQucHJp
bnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1l
bWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZh
bHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25NZW1iZXIudmFs
dWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgLy9jaGVja0Vycm9yQW5kVmlzaXQoZnVu
Y3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKKyAgICBtX291dC5wcmludChtX2lu
ZGVudCk7CisgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgIG1fb3V0
LnByaW50KCIgIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksICIoIik7CisgICAgYm9vbCBo
YWRQcmV2aW91cyA9IGZhbHNlOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgaWYgKGhhZFByZXZpb3VzKQorICAg
ICAgICAgICAgbV9vdXQucHJpbnQoIiwgIik7CisgICAgICAgIGhhZFByZXZpb3VzID0gdHJ1ZTsK
KyAgICAgICAgdmlzaXQocGFyYW1ldGVyKTsKKyAgICB9CisgICAgbV9vdXQucHJpbnQoIikgIik7
CisgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSkgeworICAgICAgICB2aXNp
dCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKKyAgICAgICAgbV9vdXQucHJpbnQo
IiAiKTsKKyAgICB9Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlR5cGVBcmd1bWVu
dCYgdHlwZUFyZ3VtZW50KQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKKyAgICB9LCBbJl0oVW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIH0pLCB0eXBlQXJndW1lbnQpOworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiByZWZlcmVuY2VUeXBl
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWZlcmVuY2VUeXBlLmVsZW1lbnRUeXBlKCkp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7
CisgICAgbV9vdXQucHJpbnQoIiA6ICIpOworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgeworICAgICAgICB2
aXNpdChidWlsdEluU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMm
IHJlc291cmNlU2VtYW50aWMpIHsKKyAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7Cisg
ICAgfSwgWyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMpIHsKKyAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdl
SW5PdXRTZW1hbnRpYykgeworICAgICAgICB2aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworICAg
IH0pLCBzZW1hbnRpYyk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIGNvbnN0YW50RXhwcmVzc2lv
bi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2Vy
TGl0ZXJhbCkgeworICAgICAgICB2aXNpdChpbnRlZ2VyTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAg
ICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpGbG9h
dExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICB2aXNpdChmbG9hdExpdGVyYWwpOwor
ICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICB2aXNp
dChudWxsTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5M
aXRlcmFsKSB7CisgICAgICAgIHZpc2l0KGJvb2xlYW5MaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgewor
ICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpOworICAgIH0pKTsKK30KKwor
dm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2Nr
KQoreworICAgIGZvciAoYXV0byYgZnVuY3Rpb25BdHRyaWJ1dGUgOiBhdHRyaWJ1dGVCbG9jaykK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uQXR0cmlidXRlKTsKK30KKwordm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMp
Cit7CisgICAgbV9vdXQucHJpbnQoYnVpbHRJblNlbWFudGljLnRvU3RyaW5nKCkpOworfQorCit2
b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpSZXNvdXJjZVNlbWFudGljJiByZXNvdXJjZVNlbWFu
dGljKQoreworICAgIG1fb3V0LnByaW50KHJlc291cmNlU2VtYW50aWMudG9TdHJpbmcoKSk7Cit9
CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1h
bnRpYyYpCit7CisgICAgLy8gT09QUyEKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6
U3RhZ2VJbk91dFNlbWFudGljJikKK3sKKyAgICAvLyBPT1BTIQorfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgbV9v
dXQucHJpbnQoaW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgLy9jaGVja0Vycm9yQW5kVmlz
aXQoaW50ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkKK3sKKyAg
ICBtX291dC5wcmludCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgIC8vY2hl
Y2tFcnJvckFuZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCit7Cisg
ICAgbV9vdXQucHJpbnQoZmxvYXRMaXRlcmFsLnZhbHVlKCkpOworICAgIC8vY2hlY2tFcnJvckFu
ZFZpc2l0KGZsb2F0TGl0ZXJhbC50eXBlKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQo
QVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAgbV9vdXQucHJpbnQoIm51bGwi
KTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobnVsbExpdGVyYWwudHlwZSgpKTsKK30KKwordm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKQoreworfQorCit2b2lkIEFT
VER1bXBlcjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlw
ZSkKK3sKKyAgICBkYXRhTG9nTG4oImludGVnZXIgbGl0ZXJhbCB0eXBlISIpOworICAgIGlmIChp
bnRlZ2VyTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqaW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoaW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiB1bnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkpOworfQorCit2b2lk
IEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBl
KQoreworICAgIGlmIChmbG9hdExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKmZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9
CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYgbnVsbExpdGVy
YWxUeXBlKQoreworICAgIGlmIChudWxsTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqbnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsK
K30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
JikKK3sKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUm
IGZ1bmN0aW9uQXR0cmlidXRlKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0
dHJpYnV0ZSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlKTsKKyAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIEFTVER1
bXBlcjo6dmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQoreworfQorCit2
b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgbV9vdXQucHJp
bnRsbigieyIpOworICAgIHsKKyAgICAgICAgYXV0byBpbmRlbnQgPSBidW1wSW5kZW50KCk7Cisg
ICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogYmxvY2suc3RhdGVtZW50cygpKSB7CisgICAg
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBtX291dC5wcmludChtX2luZGVudCwgIn0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZp
c2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgbV9vdXQucHJpbnQobV9pbmRl
bnQpOworICAgIEJhc2U6OnZpc2l0KHN0YXRlbWVudCk7CisgICAgbV9vdXQucHJpbnRsbigiOyIp
OworICAgIC8qCisgICAgaWYgKGlzPEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKTsKKyAgICBl
bHNlIGlmIChpczxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8
QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6Q29udGludWU+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+
KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVu
dCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdo
PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRl
bWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OklmU3RhdGVtZW50PihzdGF0
ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRl
bWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7CisgICAg
ZWxzZSBpZiAoaXM8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoaXM8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIH0KKyAgICAq
LworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpCcmVhayYpCit7CisgICAgbV9vdXQu
cHJpbnQoImJyZWFrIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkNvbnRpbnVl
JikKK3sKKyAgICBtX291dC5wcmludCgiY29udGludWUiKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1do
aWxlTG9vcC5jb25kaXRpb25hbCgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBCYXNlOjp2aXNpdChleHByZXNzaW9uKTsK
KyAgICAvKgorICAgIGlmIChpczxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5MaXRl
cmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNh
bGxFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAg
IGVsc2UgaWYgKGlzPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4
cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9h
dExpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJMaXRl
cmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6Okxv
Z2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNl
IGlmIChpczxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNz
aW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TnVsbExpdGVy
YWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEb3RF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbmRleEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8
QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHBy
ZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsPihleHByZXNzaW9uKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAg
fQorICAgICovCit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFT
VDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oZG90RXhwcmVzc2lvbikpOworfQorCit2b2lk
IEFTVER1bXBlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lv
bigpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24pKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uLmJhc2UoKSk7Cit9CisKK3ZvaWQgQVNURHVt
cGVyOjp2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBBU1RE
dW1wZXI6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQoreworfQorCit2b2lkIEFTVER1bXBlcjo6
dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJl
c3Npb24pOworICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIGlmIChmb3JM
b29wLmNvbmRpdGlvbigpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuY29u
ZGl0aW9uKCkpOworICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OklmU3Rh
dGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1l
bnQuY29uZGl0aW9uYWwoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJv
ZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIG1fb3V0LnByaW50
KCJyZXR1cm4iKTsKKyAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAgICAg
bV9vdXQucHJpbnQoIiAiKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0
ZW1lbnQudmFsdWUoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpT
d2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICBmb3IgKGF1dG8m
IHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQo
QVNUOjpUcmFwJikKK3sKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQorewor
ICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxl
TG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJv
ZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCkpOworICAgICAgICBtX291dC5wcmludCgiICIpOworICAgIH0KKyAgICBtX291dC5w
cmludCh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFy
YXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uc2Vt
YW50aWMoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkgewor
ICAgICAgICBtX291dC5wcmludCgiID0gIik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
dmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICB9Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVz
c2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVm
dCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQo
KSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxs
RXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24u
YXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CisgICAg
aWYgKGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQorewor
ICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24p
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVy
KCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYg
bG9naWNhbEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHBy
ZXNzaW9uLmxlZnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9u
LnJpZ2h0KCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhw
cmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CisgICAgaWYgKHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24o
KSk7CisgICAgaWYgKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
cmVzdWx0RXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VGVy
bmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBB
U1REdW1wZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNl
KQoreworICAgIG1fb3V0LnByaW50KHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
QVNURHVtcGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMVmlzaXRvci5oIgorCisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgQVNURHVtcGVyIDogVmlzaXRvciB7CisgICAg
dXNpbmcgQmFzZSA9IFZpc2l0b3I7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdChQcm9ncmFtJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVubmFtZWRUeXBlJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6Ok5hbWVkVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpUeXBlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OlN0cnVjdHVyZUVsZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVy
YXRpb25NZW1iZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpDb25zdGFudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
QXR0cmlidXRlQmxvY2smKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNl
bWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRp
YyYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpCb29sZWFuTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2Vy
TGl0ZXJhbFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRl
cmFsVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5cGUm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
QnJlYWsmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpE
b3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpUcmFwJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1l
bnRFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworCisgICAgU3Ry
aW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gbV9vdXQudG9TdHJpbmcoKTsgfQorCitwcml2YXRlOgor
ICAgIHN0cnVjdCBJbmRlbnQgeworICAgICAgICBJbmRlbnQoQVNURHVtcGVyJiBkdW1wZXIpCisg
ICAgICAgICAgICA6IG1fc2NvcGUoZHVtcGVyLm1faW5kZW50LCBkdW1wZXIubV9pbmRlbnQgKyAi
ICAgIikKKyAgICAgICAgeyB9CisgICAgICAgIFNldEZvclNjb3BlPFN0cmluZz4gbV9zY29wZTsK
KyAgICB9OworCisgICAgSW5kZW50IGJ1bXBJbmRlbnQoKSB7IHJldHVybiBJbmRlbnQoKnRoaXMp
OyB9CisKKyAgICBmcmllbmQgc3RydWN0IEluZGVudDsKKworICAgIFN0cmluZ1ByaW50U3RyZWFt
IG1fb3V0OworICAgIFN0cmluZyBtX2luZGVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdITFNM
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2
LDExIEBACiAjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCiAjaW5jbHVk
ZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCisjaW5jbHVkZSAiV0hMU0xBU1REdW1wZXIu
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtNTYsMTEg
KzU5LDE3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFMKIHsKICAg
ICBQcm9ncmFtIHByb2dyYW07CiAgICAgUGFyc2VyIHBhcnNlcjsKLSAgICBhdXRvIHN0YW5kYXJk
TGlicmFyeSA9IFN0cmluZzo6ZnJvbVVURjgoV0hMU0xTdGFuZGFyZExpYnJhcnksIHNpemVvZihX
SExTTFN0YW5kYXJkTGlicmFyeSkpOwotICAgIGF1dG8gZmFpbHVyZSA9IHN0YXRpY19jYXN0PGJv
b2w+KHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdGFuZGFyZExpYnJhcnksIFBhcnNlcjo6TW9kZTo6
U3RhbmRhcmRMaWJyYXJ5KSk7Ci0gICAgQVNTRVJUX1VOVVNFRChmYWlsdXJlLCAhZmFpbHVyZSk7
CisgICAgLy9hdXRvIHN0YW5kYXJkTGlicmFyeSA9IFN0cmluZzo6ZnJvbVVURjgoV0hMU0xTdGFu
ZGFyZExpYnJhcnksIHNpemVvZihXSExTTFN0YW5kYXJkTGlicmFyeSkpOworICAgIC8vYXV0byBm
YWlsdXJlID0gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJk
TGlicmFyeSwgUGFyc2VyOjpNb2RlOjpTdGFuZGFyZExpYnJhcnkpKTsKKyAgICAvL0FTU0VSVF9V
TlVTRUQoZmFpbHVyZSwgIWZhaWx1cmUpOwogICAgIGlmIChwYXJzZXIucGFyc2UocHJvZ3JhbSwg
d2hsc2xTb3VyY2UsIFBhcnNlcjo6TW9kZTo6VXNlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBBU1REdW1wZXIgZHVtcGVyOworICAgIGR1bXBlci52aXNpdChwcm9ncmFt
KTsKKyAgICBkYXRhTG9nTG4oZHVtcGVyLnRvU3RyaW5nKCkpOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKICAgICBOYW1lUmVzb2x2ZXIgbmFtZVJlc29sdmVyKHByb2dyYW0ubmFtZUNvbnRl
eHQoKSk7CiAgICAgaWYgKCFyZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZl
cikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJKHJldmlzaW9u
IDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlz
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDczICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRl
ICJXSExTTEFycmF5VHlwZS5oIgotI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24u
aCIKLSNpbmNsdWRlICJXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldI
TFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xCbG9jay5oIgotI2luY2x1ZGUgIldI
TFNMQm9vbGVhbkxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEJyZWFrLmgiCi0jaW5jbHVkZSAi
V0hMU0xCdWlsdEluU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0
YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKLSNpbmNsdWRlICJX
SExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3Au
aCIKLSNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEVmZmVj
dGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVm
aW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKLSNpbmNsdWRl
ICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRXhwcmVz
c2lvbi5oIgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKLSNpbmNsdWRlICJXSExTTEZs
b2F0TGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgotI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24u
aCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNM
SWZTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgotI2luY2x1
ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTWFr
ZVBvaW50ZXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKLSNpbmNs
dWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCi0jaW5jbHVk
ZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBv
aW50ZXJUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVkZSAiV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgot
I2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldI
TFNMUmVmZXJlbmNlVHlwZS5oIgotI2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgot
I2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCi0jaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2lu
Y2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCi0jaW5jbHVkZSAi
V0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgot
I2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMU3Ry
dWN0dXJlRWxlbWVudC5oIgotI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgotI2luY2x1ZGUg
IldITFNMU3dpdGNoU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lv
bi5oIgotI2luY2x1ZGUgIldITFNMVHJhcC5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgotI2lu
Y2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlv
bi5oIgotI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldITFNMVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRl
ICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5o
IgotI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xBU1QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xBU1QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBU1QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBU1QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQWRkcmVzc1NwYWNlLmgiCisjaW5jbHVkZSAi
V0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgor
I2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEJh
c2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCisj
aW5jbHVkZSAiV0hMU0xCbG9jay5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIK
KyNpbmNsdWRlICJXSExTTEJyZWFrLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMu
aCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21t
YUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
RG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVy
LmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCisjaW5j
bHVkZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5
cGUuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9u
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVt
ZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dp
Y2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKKyNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xRdWFs
aWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hM
U0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5P
dXRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50
LmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xUcmFwLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNM
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisj
aW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRp
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAkod29y
a2luZyBjb3B5KQpAQCAtODEsNiArODEsNDAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CiAgICAgfQogCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgICAgICBjYXNlIFZhcmlhYmxl
OjpTVkluc3RhbmNlSUQ6CisgICAgICAgICAgICByZXR1cm4gIlNWSW5zdGFuY2VJRCI7CisgICAg
ICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgICAgICByZXR1cm4gIlNWVmVy
dGV4SUQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpQU2l6ZToKKyAgICAgICAgICAgIHJldHVy
biAiUFNpemUiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAg
ICAgcmV0dXJuICJTVlBvc2l0aW9uIjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZJc0Zyb250
RmFjZToKKyAgICAgICAgICAgIHJldHVybiAiU1ZJc0Zyb250RmFjZSI7CisgICAgICAgIGNhc2Ug
VmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gIlNWU2FtcGxlSW5k
ZXgiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVklubmVyQ292ZXJhZ2U6CisgICAgICAgICAg
ICByZXR1cm4gIlNWSW5uZXJDb3ZlcmFnZSI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVGFy
Z2V0OgorICAgICAgICAgICAgcmV0dXJuICJTVlRhcmdldCI7CisgICAgICAgIGNhc2UgVmFyaWFi
bGU6OlNWRGVwdGg6CisgICAgICAgICAgICByZXR1cm4gIlNWRGVwdGgiOworICAgICAgICBjYXNl
IFZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICAgICAgcmV0dXJuICJTVkNvdmVyYWdlIjsK
KyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAgICAgICAg
cmV0dXJuICJTVkRpc3BhdGNoVGhyZWFkSUQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkdy
b3VwSUQ6CisgICAgICAgICAgICByZXR1cm4gIlNWR3JvdXBJRCI7CisgICAgICAgIGNhc2UgVmFy
aWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZHcm91cEluZGV4IjsK
KyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAgICAgICAgcmV0
dXJuICJTVkdyb3VwVGhyZWFkSUQiOworICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBpc0Fj
Y2VwdGFibGVUeXBlKGNvbnN0IFVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihT
aGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4mKSBjb25z
dCBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaAkocmV2aXNp
b24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVzb3VyY2VTZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwyMCBAQCBw
dWJsaWM6CiAgICAgUmVzb3VyY2VTZW1hbnRpYyhjb25zdCBSZXNvdXJjZVNlbWFudGljJikgPSBk
ZWxldGU7CiAgICAgUmVzb3VyY2VTZW1hbnRpYyhSZXNvdXJjZVNlbWFudGljJiYpID0gZGVmYXVs
dDsKIAorICAgIFN0cmluZyB0b1N0cmluZygpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbW9k
ZSkgeworICAgICAgICBjYXNlIE1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAgICAgICAg
ICByZXR1cm4gIlVub3JkZXJlZEFjY2Vzc1ZpZXciOworICAgICAgICBjYXNlIE1vZGU6OlRleHR1
cmU6CisgICAgICAgICAgICByZXR1cm4gIlRleHR1cmUiOworICAgICAgICBjYXNlIE1vZGU6OkJ1
ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiAiQnVmZmVyIjsKKyAgICAgICAgY2FzZSBNb2RlOjpT
YW1wbGVyOgorICAgICAgICAgICAgcmV0dXJuICJTYW1wbGVyIjsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIHVuc2lnbmVkIHNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQ1NTM5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC04MzE0LDYgKzgzMTQsNyBAQAogCQk1MUZCNjdEOTFBRTZCNUU0MDBEMDZDNUEgLyog
Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVu
c2lvblN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVu
dEV4dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIx
MzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTIxNTg2MkMyMjkz
NzdCNzAwNTkyNUVGIC8qIFdITFNMQVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQVNULmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRGNjAwNzU5NzREIC8qIFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTY5OTcsNiArMTY5OTgsNyBAQAogCQkxQ0EwQzJGNjIxRUVEQUQyMDBB
MTE4NjAgLyogQVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk1MjE1ODYyQzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLywKIAkJCQkxQzg0
MEI5MDIxRUMzMEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKIAkJCQlDMjFC
RjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKIAkJ
CQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC5odG1sCShyZXZpc2lvbiAyNDU1MzkpCisrKyBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiwxMiArNiwxNSBAQAogPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+CiA8c2NyaXB0Pgog
Y29uc3Qgc2hhZGVyU291cmNlID0gYAotdmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBpIDogYXR0cmlidXRlKDEpKSA6IFNWX1Bv
c2l0aW9uIHsKLSAgICByZXR1cm4gcG9zaXRpb247CitzdHJ1Y3QgTSB7CisgICAgaW50IGE7Cisg
ICAgaW50IGI7CisgICAgZmxvYXQgYzsKIH0KIAotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKLSAgICBy
ZXR1cm4gcG9zaXRpb247CitmbG9hdCBmb28oaW50IGEsIGludCBiKSB7CisgICAgZmxvYXQgcmVz
dWx0ID0gNDI7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIGA7CiBhc3luYyBmdW5jdGlvbiBzdGFy
dCgpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370295</attachid>
            <date>2019-05-20 20:17:37 -0700</date>
            <delta_ts>2019-05-21 18:03:37 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>40945</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIE1vZHVsZXMvd2Vi
c29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU28KIAogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFz
Q29udGV4dC5jcHAKIE1vZHVsZXMvd2ViZ3B1L05hdmlnYXRvckdQVS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NzQgQEAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXSExTTEFTVER1bXBlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMQVNULmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgbV9vdXQucHJpbnRsbigiXFxzdGFydCBQ
Uk9HUkFNIik7CisgICAgQmFzZTo6dmlzaXQocHJvZ3JhbSk7CisgICAgbV9vdXQucHJpbnRsbigi
XG5cXGVuZCBQUk9HUkFNIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdCh1bm5hbWVkVHlwZSk7Cisg
ICAgLyoKKyAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFT
U0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIH0K
KyAgICAqLworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVk
VHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdChuYW1lZFR5cGUpOworICAgIC8qCisgICAgaWYgKGlz
PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBlbHNl
IGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVk
VHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1l
ZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVk
VHlwZSkpOworICAgIH0KKyAgICAqLworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpU
eXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQoInR5cGVk
ZWYgIiwgdHlwZURlZmluaXRpb24ubmFtZSgpLCAiID0gIik7CisgICAgdmlzaXQodHlwZURlZmlu
aXRpb24udHlwZSgpKTsKKyAgICBtX291dC5wcmludGxuKCI7Iik7CisgICAgLy9jaGVja0Vycm9y
QW5kVmlzaXQodHlwZURlZmluaXRpb24udHlwZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZp
c2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAg
ICBtX291dC5wcmludGxuKG1faW5kZW50LCAic3RydWN0ICIsIHN0cnVjdHVyZURlZmluaXRpb24u
bmFtZSgpLCAiIHsiKTsKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVtcEluZGVudCgp
OworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0
aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisgICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVt
ZW50KTsKKyAgICB9CisgICAgbV9vdXQucHJpbnRsbihtX2luZGVudCwgIn0iKTsKKyAgICBtX291
dC5wcmludGxuKCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVudW1l
cmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOworfQorCit2
b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVm
aW5pdGlvbikKK3sKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mPihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24u
YmxvY2soKSk7CisgICAgbV9vdXQucHJpbnRsbigpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24mPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQoreworICAgIGRhdGFMb2dMbigibmF0aXZlIHR5cGUgZGVjbGFyYXRpb24hIik7Cisg
ICAgbV9vdXQucHJpbnQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSk7CisgICAgLy9mb3Ig
KGF1dG8mIHR5cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KCkpCisgICAgLy8gICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7Cit9CisKK3Zv
aWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7
CisgICAgbV9vdXQucHJpbnQodHlwZVJlZmVyZW5jZS5uYW1lKCkpOworCisgICAgZm9yIChhdXRv
JiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgaWYgKHR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkgJiYgaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgIGF1dG8mIHR5cGVEZWZpbml0aW9uID0gZG93bmNh
c3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24udHlwZSgpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlw
ZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VU
eXBlJj4ocG9pbnRlclR5cGUpKTsKKyAgICBtX291dC5wcmludCgiKiIpOworfQorCit2b2lkIEFT
VER1bXBlcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlw
ZSkKK3sKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJl
ZmVyZW5jZVR5cGUpKTsKKyAgICBtX291dC5wcmludCgiW10iKTsKK30KKwordm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgdmlzaXQoYXJyYXlU
eXBlLnR5cGUoKSk7CisgICAgbV9vdXQucHJpbnQoIlsiLCBhcnJheVR5cGUubnVtRWxlbWVudHMo
KSwgIl0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVu
dCYgc3RydWN0dXJlRWxlbWVudCkKK3sKKyAgICBtX291dC5wcmludChtX2luZGVudCk7CisgICAg
dmlzaXQoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOworICAgIG1fb3V0LnByaW50KCIgIiwgc3Ry
dWN0dXJlRWxlbWVudC5uYW1lKCkpOworICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGlj
KCkpCisgICAgICAgIHZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpOworICAgIG1f
b3V0LnByaW50bG4oIjsiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RW51bWVy
YXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQoreworICAgIGlmIChlbnVtZXJhdGlvbk1l
bWJlci52YWx1ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uTWVt
YmVyLnZhbHVlKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIC8vY2hlY2tFcnJvckFuZFZp
c2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24uYXR0cmlidXRlQmxvY2soKSk7CisgICAgbV9vdXQucHJp
bnQobV9pbmRlbnQpOworICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAg
ICBtX291dC5wcmludCgiICIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIpOworICAg
IGJvb2wgaGFkUHJldmlvdXMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgIGlmIChoYWRQcmV2aW91
cykKKyAgICAgICAgICAgIG1fb3V0LnByaW50KCIsICIpOworICAgICAgICBoYWRQcmV2aW91cyA9
IHRydWU7CisgICAgICAgIHZpc2l0KHBhcmFtZXRlcik7CisgICAgfQorICAgIG1fb3V0LnByaW50
KCIpICIpOworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpIHsKKyAgICAg
ICAgdmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSk7CisgICAgICAgIG1fb3V0
LnByaW50KCIgIik7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBl
QXJndW1lbnQmIHR5cGVBcmd1bWVudCkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbik7CisgICAgfSwgWyZd
KFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICB9KSwgdHlwZUFyZ3VtZW50
KTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJl
bmNlVHlwZSkKK3sKKyAgICBtX291dC5wcmludChBU1Q6OnRvU3RyaW5nKHJlZmVyZW5jZVR5cGUu
YWRkcmVzc1NwYWNlKCkpLCAiICIpOworICAgIHZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5
cGUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRp
YykKK3sKKyAgICBtX291dC5wcmludCgiIDogIik7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKSB7CisgICAg
ICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1h
bnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgeworICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGlj
KTsKKyAgICB9LCBbJl0oQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykgeworICAgICAgICB2aXNpdChzcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYg
c3RhZ2VJbk91dFNlbWFudGljKSB7CisgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7
CisgICAgfSksIHNlbWFudGljKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCit7CisgICAgY29uc3RhbnRFeHBy
ZXNzaW9uLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKSB7CisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBb
Jl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7
CisgICAgICAgIHZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6
OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJh
bCk7CisgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSB7CisgICAgICAg
IHZpc2l0KG51bGxMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9v
bGVhbkxpdGVyYWwpIHsKKyAgICAgICAgdmlzaXQoYm9vbGVhbkxpdGVyYWwpOworICAgIH0sIFsm
XShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
KSB7CisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCk7CisgICAgfSkpOwor
fQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRl
QmxvY2spCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJs
b2NrKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1h
bnRpYykKK3sKKyAgICBtX291dC5wcmludChidWlsdEluU2VtYW50aWMudG9TdHJpbmcoKSk7Cit9
CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNl
U2VtYW50aWMpCit7CisgICAgbV9vdXQucHJpbnQocmVzb3VyY2VTZW1hbnRpYy50b1N0cmluZygp
KTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljJikKK3sKKyAgICAvLyBPT1BTIQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQo
QVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKQoreworICAgIC8vIE9PUFMhCit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAg
ICBtX291dC5wcmludChpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAvL2NoZWNrRXJyb3JB
bmRWaXNpdChpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQor
eworICAgIG1fb3V0LnByaW50KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAg
Ly9jaGVja0Vycm9yQW5kVmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC50eXBlKCkpOworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkK
K3sKKyAgICBtX291dC5wcmludChmbG9hdExpdGVyYWwudmFsdWUoKSk7CisgICAgLy9jaGVja0Vy
cm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBtX291dC5wcmludCgi
bnVsbCIpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudWxsTGl0ZXJhbC50eXBlKCkpOworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCit7Cit9CisKK3Zv
aWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlwZSYgaW50ZWdlckxpdGVy
YWxUeXBlKQoreworICAgIGRhdGFMb2dMbigiaW50ZWdlciBsaXRlcmFsIHR5cGUhIik7CisgICAg
aWYgKGludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCppbnRlZ2VyTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChpbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwor
dm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp1bnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisK
K3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmIGZsb2F0TGl0ZXJh
bFR5cGUpCit7CisgICAgaWYgKGZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZmxvYXRMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZsb2F0TGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgp
KTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJiBudWxs
TGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKG51bGxMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpudWxsTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBl
KCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwmKQoreworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJp
YnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpCit7Cit9
CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBtX291
dC5wcmludGxuKCJ7Iik7CisgICAgeworICAgICAgICBhdXRvIGluZGVudCA9IGJ1bXBJbmRlbnQo
KTsKKyAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpIHsK
KyAgICAgICAgICAgIG1fb3V0LnByaW50KG1faW5kZW50KTsKKyAgICAgICAgICAgIHZpc2l0KHN0
YXRlbWVudCk7CisgICAgICAgICAgICBtX291dC5wcmludGxuKCI7Iik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgbV9vdXQucHJpbnQobV9pbmRlbnQsICJ9Iik7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAgIEJhc2U6OnZpc2l0KHN0
YXRlbWVudCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkJyZWFrJikKK3sKKyAg
ICBtX291dC5wcmludCgiYnJlYWsiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6
Q29udGludWUmKQoreworICAgIG1fb3V0LnByaW50KCJjb250aW51ZSIpOworfQorCit2b2lkIEFT
VER1bXBlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIEJhc2U6OnZpc2l0KGV4cHJl
c3Npb24pOworICAgIC8qCisgICAgaWYgKGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Qm9v
bGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93
bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0
ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SW50
ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93
bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+
KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpO
dWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG90RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6Oklu
ZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6
VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWw+KGV4cHJlc3Np
b24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24p
KTsKKyAgICB9CisgICAgKi8KK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RG90RXhw
cmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGRvdEV4cHJlc3Npb24pKTsKKyAgICBtX291dC5wcmlu
dCgiLiIsIGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6
dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICB2aXNp
dChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGluZGV4RXhwcmVz
c2lvbikpOworICAgIG1fb3V0LnByaW50KCJbIik7CisgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9u
LmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICBtX291dC5wcmludCgiXSIpOworfQorCit2b2lkIEFT
VER1bXBlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIGV4cHJlc3Npb24p
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24uYmFzZSgpKTsKK30KKwordm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOworfQorCit2
b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworICAgIH0sIFsmXShVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZXhwcmVzc2lvbik7CisgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7CisgICAg
aWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9y
TG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIG1fb3V0LnByaW50KCJpZiAoIik7
CisgICAgdmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgbV9vdXQucHJpbnQo
IikgIik7CisgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1l
bnQuZWxzZUJvZHkoKSkgeworICAgICAgICBtX291dC5wcmludCgiIGVsc2UgIik7CisgICAgICAg
IHZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgQVNURHVt
cGVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIG1fb3V0LnBy
aW50KCJyZXR1cm4iKTsKKyAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAg
ICAgbV9vdXQucHJpbnQoIiAiKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5T
dGF0ZW1lbnQudmFsdWUoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNU
OjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKK30KKwordm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICBmb3IgKGF1
dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpUcmFwJikKK3sKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQor
eworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0
KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdo
aWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29w
LmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJh
dGlvbi50eXBlKCkpOworICAgICAgICBtX291dC5wcmludCgiICIpOworICAgIH0KKyAgICBtX291
dC5wcmludCh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVj
bGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24u
c2VtYW50aWMoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkg
eworICAgICAgICBtX291dC5wcmludCgiID0gIik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICB9Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKK3sKKyAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAg
IG1fb3V0LnByaW50KCIgPSAiKTsKKyAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdo
dCgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNh
bGxFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lv
bi5hcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFyZ3VtZW50KTsKKyAg
ICBpZiAoY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCpjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKK30KKwordm9pZCBB
U1REdW1wZXI6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7
CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lv
bikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50
ZXIoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9u
JiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4
cHJlc3Npb24ubGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Np
b24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RF
eHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2
b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKKyAgICBpZiAocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCpyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lv
bigpKTsKKyAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9u
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5yZXN1bHRFeHByZXNzaW9uKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpU
ZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworfQorCit2b2lk
IEFTVER1bXBlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVu
Y2UpCit7CisgICAgbV9vdXQucHJpbnQodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xBU1REdW1wZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
KyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBBU1REdW1wZXIgOiBWaXNpdG9yIHsKKyAg
ICB1c2luZyBCYXNlID0gVmlzaXRvcjsKK3B1YmxpYzoKKyAgICB2b2lkIHZpc2l0KFByb2dyYW0m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TmFtZWRUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlR5cGVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNl
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RydWN0dXJlRWxlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpBdHRyaWJ1dGVCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCdWlsdElu
U2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRp
YyYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFu
dGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkJvb2xlYW5MaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExp
dGVyYWxUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlw
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpCcmVhayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb250aW51ZSYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdo
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6UmV0dXJuJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2Um
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6V2hpbGVMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJl
c3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICBT
dHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX291dC50b1N0cmluZygpOyB9CisKK3ByaXZhdGU6
CisgICAgc3RydWN0IEluZGVudCB7CisgICAgICAgIEluZGVudChBU1REdW1wZXImIGR1bXBlcikK
KyAgICAgICAgICAgIDogbV9zY29wZShkdW1wZXIubV9pbmRlbnQsIGR1bXBlci5tX2luZGVudCAr
ICIgICAiKQorICAgICAgICB7IH0KKyAgICAgICAgU2V0Rm9yU2NvcGU8U3RyaW5nPiBtX3Njb3Bl
OworICAgIH07CisKKyAgICBJbmRlbnQgYnVtcEluZGVudCgpIHsgcmV0dXJuIEluZGVudCgqdGhp
cyk7IH0KKworICAgIGZyaWVuZCBzdHJ1Y3QgSW5kZW50OworCisgICAgU3RyaW5nUHJpbnRTdHJl
YW0gbV9vdXQ7CisgICAgU3RyaW5nIG1faW5kZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV0hM
U0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcAkocmV2aXNpb24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCAr
NDYsMTEgQEAKICNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKICNpbmNs
dWRlICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIldI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKKyNpbmNsdWRlICJXSExTTEFTVER1bXBl
ci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CkBAIC01Niwx
MSArNTksMTcgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQoUwogewog
ICAgIFByb2dyYW0gcHJvZ3JhbTsKICAgICBQYXJzZXIgcGFyc2VyOwotICAgIGF1dG8gc3RhbmRh
cmRMaWJyYXJ5ID0gU3RyaW5nOjpmcm9tVVRGOChXSExTTFN0YW5kYXJkTGlicmFyeSwgc2l6ZW9m
KFdITFNMU3RhbmRhcmRMaWJyYXJ5KSk7Ci0gICAgYXV0byBmYWlsdXJlID0gc3RhdGljX2Nhc3Q8
Ym9vbD4ocGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeSwgUGFyc2VyOjpNb2Rl
OjpTdGFuZGFyZExpYnJhcnkpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGZhaWx1cmUsICFmYWlsdXJl
KTsKKyAgICAvL2F1dG8gc3RhbmRhcmRMaWJyYXJ5ID0gU3RyaW5nOjpmcm9tVVRGOChXSExTTFN0
YW5kYXJkTGlicmFyeSwgc2l6ZW9mKFdITFNMU3RhbmRhcmRMaWJyYXJ5KSk7CisgICAgLy9hdXRv
IGZhaWx1cmUgPSBzdGF0aWNfY2FzdDxib29sPihwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RhbmRh
cmRMaWJyYXJ5LCBQYXJzZXI6Ok1vZGU6OlN0YW5kYXJkTGlicmFyeSkpOworICAgIC8vQVNTRVJU
X1VOVVNFRChmYWlsdXJlLCAhZmFpbHVyZSk7CiAgICAgaWYgKHBhcnNlci5wYXJzZShwcm9ncmFt
LCB3aGxzbFNvdXJjZSwgUGFyc2VyOjpNb2RlOjpVc2VyKSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIEFTVER1bXBlciBkdW1wZXI7CisgICAgZHVtcGVyLnZpc2l0KHByb2dy
YW0pOworICAgIGRhdGFMb2dMbihkdW1wZXIudG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKwogICAgIE5hbWVSZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29u
dGV4dCgpKTsKICAgICBpZiAoIXJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29s
dmVyKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkocmV2aXNp
b24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNzMgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgotI2luY2x1
ZGUgIldITFNMQXJyYXlUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lv
bi5oIgotI2luY2x1ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAi
V0hMU0xCYXNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTEJsb2NrLmgiCi0jaW5jbHVkZSAi
V0hMU0xCb29sZWFuTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKLSNpbmNsdWRl
ICJXSExTTEJ1aWx0SW5TZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24u
aCIKLSNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29u
c3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1ZGUg
IldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9v
cC5oIgotI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25E
ZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgotI2luY2x1
ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgotI2luY2x1ZGUgIldITFNM
RmxvYXRMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCi0jaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlv
bi5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hM
U0xJZlN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCi0jaW5j
bHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIldITFNMTm9kZS5oIgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNpbmNs
dWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNM
UG9pbnRlclR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXSExT
TFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgi
Ci0jaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAi
V0hMU0xSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgi
Ci0jaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKLSNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0j
aW5jbHVkZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKLSNpbmNsdWRl
ICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3RhdGVtZW50Lmgi
Ci0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xT
dHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCi0jaW5jbHVk
ZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xUcmFwLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xV
bnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEFTVC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFTVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFTVC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFTVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBZGRyZXNzU3BhY2UuaCIKKyNpbmNsdWRl
ICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
QmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIK
KyNpbmNsdWRlICJXSExTTEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5o
IgorI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0SW5TZW1hbnRp
Yy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENv
bW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudC5oIgorI2luY2x1ZGUgIldITFNMRW50cnlQb2ludFR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1i
ZXIuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgorI2luY2x1
ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNp
bmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFs
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0
ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExv
Z2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgorI2lu
Y2x1ZGUgIldITFNMTnVsbExpdGVyYWxUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFF1
YWxpZmllci5oIgorI2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJs
ZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJX
SExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExT
TFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJ
bk91dFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJX
SExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRj
aFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTFRyYXAuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmFsdWUuaCIK
KyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQWRkcmVzc1NwYWNlLmgJKHJldmlzaW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0MiwyMSBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3Qg
ewogICAgIFRocmVhZAogfTsKIAorc3RhdGljIEFMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5n
KEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCit7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2Up
IHsKKyAgICBjYXNlIEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiAiY29u
c3RhbnQiX3N0cjsKKyAgICBjYXNlIEFkZHJlc3NTcGFjZTo6RGV2aWNlOgorICAgICAgICByZXR1
cm4gImRldmljZSJfc3RyOworICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKKyAg
ICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCJfc3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVChhZGRyZXNzU3BhY2UgPT0gQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICByZXR1
cm4gInRocmVhZCJfc3RyOworICAgIH0KK30KKwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWls
dEluU2VtYW50aWMuaAkocmV2aXNpb24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDYgKzgxLDQwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOwogICAgIH0KIAorICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZJbnN0YW5j
ZUlEOgorICAgICAgICAgICAgcmV0dXJuICJTVkluc3RhbmNlSUQiOworICAgICAgICBjYXNlIFZh
cmlhYmxlOjpTVlZlcnRleElEOgorICAgICAgICAgICAgcmV0dXJuICJTVlZlcnRleElEIjsKKyAg
ICAgICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgICAgICByZXR1cm4gIlBTaXplIjsK
KyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAi
U1ZQb3NpdGlvbiI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAg
ICAgICAgICByZXR1cm4gIlNWSXNGcm9udEZhY2UiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpT
VlNhbXBsZUluZGV4OgorICAgICAgICAgICAgcmV0dXJuICJTVlNhbXBsZUluZGV4IjsKKyAgICAg
ICAgY2FzZSBWYXJpYWJsZTo6U1ZJbm5lckNvdmVyYWdlOgorICAgICAgICAgICAgcmV0dXJuICJT
VklubmVyQ292ZXJhZ2UiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlRhcmdldDoKKyAgICAg
ICAgICAgIHJldHVybiAiU1ZUYXJnZXQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRo
OgorICAgICAgICAgICAgcmV0dXJuICJTVkRlcHRoIjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6
U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiU1ZDb3ZlcmFnZSI7CisgICAgICAgIGNh
c2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZE
aXNwYXRjaFRocmVhZElEIjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAg
ICAgICAgICAgcmV0dXJuICJTVkdyb3VwSUQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkdy
b3VwSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gIlNWR3JvdXBJbmRleCI7CisgICAgICAgIGNh
c2UgVmFyaWFibGU6OlNWR3JvdXBUaHJlYWRJRDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZHcm91
cFRocmVhZElEIjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlw
ZShjb25zdCBVbm5hbWVkVHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsK
ICAgICBib29sIGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURp
cmVjdGlvbiwgY29uc3QgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+JikgY29uc3Qgb3ZlcnJpZGU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
c291cmNlU2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgJKHJldmlzaW9uIDI0NTUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNl
U2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMjAgQEAgcHVibGljOgogICAg
IFJlc291cmNlU2VtYW50aWMoY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYpID0gZGVsZXRlOwogICAg
IFJlc291cmNlU2VtYW50aWMoUmVzb3VyY2VTZW1hbnRpYyYmKSA9IGRlZmF1bHQ7CiAKKyAgICBT
dHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAg
ICAgY2FzZSBNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OgorICAgICAgICAgICAgcmV0dXJuICJV
bm9yZGVyZWRBY2Nlc3NWaWV3IjsKKyAgICAgICAgY2FzZSBNb2RlOjpUZXh0dXJlOgorICAgICAg
ICAgICAgcmV0dXJuICJUZXh0dXJlIjsKKyAgICAgICAgY2FzZSBNb2RlOjpCdWZmZXI6CisgICAg
ICAgICAgICByZXR1cm4gIkJ1ZmZlciI7CisgICAgICAgIGNhc2UgTW9kZTo6U2FtcGxlcjoKKyAg
ICAgICAgICAgIHJldHVybiAiU2FtcGxlciI7CisgICAgICAgIH0KKyAgICB9CisKICAgICBNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICB1bnNpZ25lZCBzcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BhY2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0
NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDIxICszODAsNiBAQCBTdHJpbmcg
VHlwZU5hbWVyOjptZXRhbFR5cGVEZWNsYXJhdGlvbnMoCiAgICAgcmV0dXJuIG1ldGFsVHlwZURl
Y2xhcmF0aW9uV3JpdGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdG9TdHJpbmco
QVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQotewotICAgIHN3aXRjaCAoYWRkcmVzc1Nw
YWNlKSB7Ci0gICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6Ci0gICAgICAgIHJl
dHVybiAiY29uc3RhbnQiX3N0cjsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpEZXZpY2U6
Ci0gICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7Ci0gICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkZ3JvdXA6Ci0gICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQpOwotICAgICAgICByZXR1cm4gInRocmVhZCJfc3RyOwotICAgIH0KLX0KLQogdm9p
ZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oQmFzZVR5cGVOYW1lTm9kZSYg
YmFzZVR5cGVOYW1lTm9kZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRU
eXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgaWYgKGVtaXR0ZWRVbm5hbWVkVHlw
ZXMuY29udGFpbnMoJmJhc2VUeXBlTmFtZU5vZGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQ1NTM5KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MzE0LDYgKzgzMTQsNyBAQAogCQk1MUZCNjdEOTFBRTZCNUU0MDBEMDZD
NUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVu
dEV4dGVuc2lvblN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTIxNTg2
MkMyMjkzNzdCNzAwNTkyNUVGIC8qIFdITFNMQVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQVNU
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0
RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRGNjAwNzU5NzREIC8qIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTY5OTcsNiArMTY5OTgsNyBAQAogCQkxQ0EwQzJGNjIxRUVE
QUQyMDBBMTE4NjAgLyogQVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk1MjE1ODYyQzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLywKIAkJ
CQkxQzg0MEI5MDIxRUMzMEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKIAkJ
CQlDMjFCRjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAq
LywKIAkJCQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywK
SW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sCShyZXZpc2lvbiAyNDU1MzkpCisrKyBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiwxMyArNiwzMCBAQAogPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+CiA8c2Ny
aXB0PgogY29uc3Qgc2hhZGVyU291cmNlID0gYAotdmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdCBpIDogYXR0cmlidXRlKDEpKSA6
IFNWX1Bvc2l0aW9uIHsKLSAgICByZXR1cm4gcG9zaXRpb247CisKK3R5cGVkZWYgRm9vID0gaW50
OwordHlwZWRlZiBGb28yID0gZmxvYXRbNDJdOworCitzdHJ1Y3QgTSB7CisgICAgaW50IGE7Cisg
ICAgaW50IGI7CisgICAgZmxvYXQgYzsKIH0KIAotZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKLSAgICBy
ZXR1cm4gcG9zaXRpb247CitmbG9hdCBmb28oaW50IGEsIGludCBiLCBNIG0sIHRocmVhZCBpbnQq
IGZvbywgdGhyZWFkIGZsb2F0W10gZmxvYXRBcnJheSkgeworICAgIGludFs0Ml0geDsKKyAgICB4
W20uYSA9IDI1XSA9IDQ0OworICAgIGZsb2F0IHJlc3VsdCA9IDQyOworICAgIG0uYSA9IDI1Owor
ICAgIGlmIChhKSB7CisgICAgICAgIG0uYiA9IDI1OworICAgIH0gZWxzZSB7CisgICAgICAgIG0u
YyA9IDI1LjU7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwogYDsKIGFzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgewogICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1
LnJlcXVlc3RBZGFwdGVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370362</attachid>
            <date>2019-05-21 18:03:37 -0700</date>
            <delta_ts>2019-05-21 19:35:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45599</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NTYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE5LTA1LTIxICBTYWFtIGJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdITFNMOiBBZGQgYW4gQVNUIGR1
bXBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBpdCBzbyB3ZSBjYW4gZHVtcCB0aGUgV0hMU0wgcHJvZ3JhbSdzIEFTVC4K
KyAgICAgICAgVGhpcyB3aWxsIGJlY29tZSB1c2VmdWwgd2hlbiB3ZSdyZSBkZWJ1Z2dpbmcgcGFz
c2VzIHRoYXQKKyAgICAgICAgdHJhbnNmb3JtIHRoZSBBU1QuCisgICAgICAgIAorICAgICAgICBU
aGUgZHVtcGVyIG1vc3RseSBwcmludHMgaW4gYSBzdHlsZSB3aGVyZSB0aGUgZHVtcCBpcyBhbG1v
c3QKKyAgICAgICAgdmFsaWQgV0hMU0wgY29kZS4gRS5nLCB0aGlzIFdITFNMIHByb2dyYW06Cisg
ICAgICAgIGBgYAorICAgICAgICBpbnQgZm9vKGludCBhcmcpIHsKKyAgICAgICAgICAgIHJldHVy
biBhcmcgKyAxOworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgZ2V0
cyBkdW1wZWQgYXM6CisgICAgICAgIGBgYAorICAgICAgICBpbnQgZm9vKGludCBhcmcpIHsKKyAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdG9yKyhhcmcsIDEpOworICAgICAgICB9CisgICAgICAgIGBg
YAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSB3YXkgdG8gZHVtcCBi
ZXR3ZWVuIGVhY2ggcGFzcywgYWZ0ZXIKKyAgICAgICAgcGFyc2luZywgb3IgYXQgdGhlIGVuZCBv
ZiBhbGwgcGFzc2VzLiBDdXJyZW50bHksIHRoaXMgaXMgY29udHJvbGxlZAorICAgICAgICBieSBh
IHN0YXRpYyB2YXJpYWJsZS4gSSdsbCBtYWtlIHRoZXNlIHJ1bnRpbWUgY29uZmlndXJhYmxlIGlu
IGEgZm9sbG93CisgICAgICAgIHVwOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MDk3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBpcyB1c2Vk
IGZvciBsb2dnaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QVNULmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFk
ZHJlc3NTcGFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6dG9TdHJpbmcpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QnVpbHRJblNlbWFudGljOjp0b1N0cmlu
ZyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQ
b2ludFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmg6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZXNvdXJjZVNlbWFudGljOjp0b1N0cmlu
Zyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp0b1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnZpc2l0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1REdW1wZXI6OkluZGVudDo6SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1REdW1wZXI6OmJ1bXBJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnRv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkdW1wQVNUKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OmR1bXBBU1RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6ZHVtcEFT
VEFmdGVyUGFyc2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkdW1wQVNU
QmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmR1bXBB
U1RBdEVuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlU2hhcmVk
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAxOS0wNS0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGllcyB0aGUgd3Jvbmcg
dmFyaWF0aW9uIHZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjQ1NTM5KQorKysg
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICszMDYs
NyBAQCBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvCiAKIE1vZHVsZXMv
d2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCiBNb2R1bGVzL3dlYmdwdS9OYXZpZ2F0b3JHUFUu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMQVNURHVt
cGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBU1QuaCIKKyNp
bmNsdWRlICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sK
KyAgICBtX291dC5wcmludGxuKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dy
YW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdChw
cm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKVtpXSk7CisgICAgaWYgKHByb2dyYW0ubmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIlxuXG4i
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdChwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKClbaV0pOworICAgIGlmIChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkuc2l6ZSgpKQorICAgICAgICBtX291dC5wcmludCgiXG5cbiIpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpLnNpemUo
KTsgKytpKQorICAgICAgICB2aXNpdChwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpW2ldKTsKKyAg
ICBpZiAocHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKS5zaXplKCkpCisgICAgICAgIG1fb3V0LnBy
aW50KCJcblxuIik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uc3RydWN0
dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXQocHJvZ3JhbS5zdHJ1
Y3R1cmVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBpZiAocHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0
aW9ucygpLnNpemUoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIlxuXG4iKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIHZpc2l0KHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpW2ld
KTsKKyAgICBpZiAocHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpKQorICAg
ICAgICBtX291dC5wcmludCgiXG5cbiIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXQo
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKClbaV0pOworCisgICAgbV9vdXQucHJpbnRsbigp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCit7CisgICAgQmFzZTo6dmlzaXQodW5uYW1lZFR5cGUpOworfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdChu
YW1lZFR5cGUpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlv
biYgdHlwZURlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQoInR5cGVkZWYgIiwgdHlwZURl
ZmluaXRpb24ubmFtZSgpLCAiID0gIik7CisgICAgdmlzaXQodHlwZURlZmluaXRpb24udHlwZSgp
KTsKKyAgICBtX291dC5wcmludGxuKCI7Iik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgbV9v
dXQucHJpbnRsbihtX2luZGVudCwgInN0cnVjdCAiLCBzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUo
KSwgIiB7Iik7CisgICAgeworICAgICAgICBhdXRvIGluZGVudCA9IGJ1bXBJbmRlbnQoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5z
dHJ1Y3R1cmVFbGVtZW50cygpKQorICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7
CisgICAgfQorICAgIG1fb3V0LnByaW50bG4obV9pbmRlbnQsICJ9Iik7CisgICAgbV9vdXQucHJp
bnRsbigpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50
JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIG1fb3V0LnByaW50KG1faW5kZW50KTsKKyAgICB2
aXNpdChzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMo
KSkKKyAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7CisgICAgbV9v
dXQucHJpbnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICAvLyBGSVhNRTog
VGVzdCB0aGlzIG9uY2Ugd2UgcGFyc2UgZW51bXM6CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA4NworCisgICAgbV9vdXQucHJpbnRsbihtX2luZGVu
dCwgImVudW0gIik7CisgICAgdmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgbV9vdXQucHJpbnQoIiB7Iik7CisKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVt
cEluZGVudCgpOworICAgICAgICBib29sIG9uY2UgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRv
JiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1l
bWJlcnMoKSkgeworICAgICAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICAgICAgbV9vdXQu
cHJpbnQoIiwgIik7CisgICAgICAgICAgICBtX291dC5wcmludGxuKCk7CisgICAgICAgICAgICBt
X291dC5wcmludChtX2luZGVudCk7CisgICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJl
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX291dC5wcmludGxuKCk7CisgICAgbV9vdXQu
cHJpbnRsbihtX2luZGVudCwgIn0iKTsKKyAgICBtX291dC5wcmludGxuKCk7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJl
cikKK3sKKyAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCkpOworICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKSB7CisgICAgICAgIG1fb3V0LnByaW50KCIgPSAi
KTsKKyAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOworICAgIH0KK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQobV9pbmRlbnQpOworICAgIHZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikp
OworICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICBtX291dC5wcmlu
dCgiXG5cbiIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIG1fb3V0LnBy
aW50KG1faW5kZW50KTsKKyAgICBtX291dC5wcmludCgibmF0aXZlICIpOworICAgIHZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKTsKKyAgICBtX291dC5wcmludGxuKCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAg
dmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKKyAgICBpZiAoZnVu
Y3Rpb25EZWNsYXJhdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgIG1fb3V0LnByaW50
KEFTVDo6dG9TdHJpbmcoKmZ1bmN0aW9uRGVjbGFyYXRpb24uZW50cnlQb2ludFR5cGUoKSksICIg
Iik7CisgICAgfQorICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBt
X291dC5wcmludCgiICIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIpOworICAgIGJv
b2wgb25jZSA9IGZhbHNlOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICBt
X291dC5wcmludCgiLCAiKTsKKyAgICAgICAgb25jZSA9IHRydWU7CisgICAgICAgIHZpc2l0KHBh
cmFtZXRlcik7CisgICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7CisgICAgaWYgKGZ1bmN0aW9u
RGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRp
b24uc2VtYW50aWMoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiKTsKK30KKwordm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24pCit7CisgICAgbV9vdXQucHJpbnQobV9pbmRlbnQsICJuYXRpdmUgdHlwZWRlZiAiKTsKKyAg
ICBtX291dC5wcmludChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpIHsKKyAgICAgICAgbV9v
dXQucHJpbnQoIjwiKTsKKyAgICAgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgICAgIGZvciAo
YXV0byYgdHlwZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KSkgeworICAgICAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICAgICAgbV9vdXQucHJpbnQo
IiwgIik7CisgICAgICAgICAgICBvbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIHZpc2l0KHR5cGVB
cmd1bWVudCk7CisgICAgICAgIH0KKyAgICAgICAgbV9vdXQucHJpbnQoIj4iKTsKKyAgICB9Cisg
ICAgbV9vdXQucHJpbnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIG1fb3V0LnByaW50KHR5cGVSZWZl
cmVuY2UubmFtZSgpKTsKKworICAgIGlmICh0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkpIHsKKyAgICAgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgICAgIG1fb3V0LnByaW50
KCI8Iik7CisgICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50
eXBlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChvbmNlKQorICAgICAgICAgICAgICAg
IG1fb3V0LnByaW50KCIsICIpOworICAgICAgICAgICAgb25jZSA9IHRydWU7CisgICAgICAgICAg
ICB2aXNpdCh0eXBlQXJndW1lbnQpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnByaW50KCI+
Iik7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYg
cG9pbnRlclR5cGUpCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBl
Jj4ocG9pbnRlclR5cGUpKTsKKyAgICBtX291dC5wcmludCgiKiIpOworfQorCit2b2lkIEFTVER1
bXBlcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkK
K3sKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVy
ZW5jZVR5cGUpKTsKKyAgICBtX291dC5wcmludCgiW10iKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgdmlzaXQoYXJyYXlUeXBl
LnR5cGUoKSk7CisgICAgbV9vdXQucHJpbnQoIlsiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwg
Il0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBl
QXJndW1lbnQpCit7CisgICAgQmFzZTo6dmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBB
U1REdW1wZXI6OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAg
ICBtX291dC5wcmludChBU1Q6OnRvU3RyaW5nKHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkp
LCAiICIpOworICAgIHZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9CisKK3Zv
aWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBtX291
dC5wcmludCgiIDogIik7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6
OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKSB7CisgICAgICAgIHZpc2l0KGJ1aWx0
SW5TZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VT
ZW1hbnRpYykgeworICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKKyAgICB9LCBbJl0o
QVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYykgeworICAgICAgICB2aXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50
aWMpOworICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFu
dGljKSB7CisgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7CisgICAgfSksIHNlbWFu
dGljKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
JiBjb25zdGFudEV4cHJlc3Npb24pCit7CisgICAgQmFzZTo6dmlzaXQoY29uc3RhbnRFeHByZXNz
aW9uKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0
dHJpYnV0ZUJsb2NrKQoreworICAgIGlmIChhdHRyaWJ1dGVCbG9jay5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fb3V0LnByaW50KCJbIik7CisgICAgZm9yIChhdXRvJiBmdW5j
dGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAgICB2aXNpdChmdW5jdGlvbkF0
dHJpYnV0ZSk7CisgICAgbV9vdXQucHJpbnQoIl0gIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQoreworICAgIG1fb3V0
LnByaW50KGJ1aWx0SW5TZW1hbnRpYy50b1N0cmluZygpKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykKK3sKKyAgICBt
X291dC5wcmludChyZXNvdXJjZVNlbWFudGljLnRvU3RyaW5nKCkpOworfQorCit2b2lkIEFTVER1
bXBlcjo6dmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworICAg
IC8vIEZJWE1FOiBIYW5kbGUgdGhpcyB3aGVuIHdlIGltcGxlbWVudCBpdC4KK30KKwordm9pZCBB
U1REdW1wZXI6OnZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50
aWMpCit7CisgICAgbV9vdXQucHJpbnQoImF0dHJpYnV0ZSgiLCBzdGFnZUluT3V0U2VtYW50aWMu
aW5kZXgoKSwgIikiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxp
dGVyYWwmIGludGVnZXJMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KGludGVnZXJMaXRlcmFs
LnZhbHVlKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNp
dChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KGZs
b2F0TGl0ZXJhbC52YWx1ZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6TnVs
bExpdGVyYWwmIG51bGxMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KCJudWxsIik7CisgICAg
dmlzaXQobnVsbExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQoreworICAgIGlmIChib29sZWFuTGl0
ZXJhbC52YWx1ZSgpKQorICAgICAgICBtX291dC5wcmludCgidHJ1ZSIpOworICAgIGVsc2UKKyAg
ICAgICAgbV9vdXQucHJpbnQoImZhbHNlIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OkludGVnZXJMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJikKK3sKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNp
dChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpCit7CisgICAgLy8gRklYTUU6IEhhbmRs
ZSB0aGlzIHdoZW4gd2UgY2FuIHBhcnNlIGVudW1zOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgwODcKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0
KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQoreworICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1
dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgeworICAgICAgICB2aXNpdChudW1UaHJl
YWRzRnVuY3Rpb25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisK
K3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYg
bnVtVGhyZWFkc0F0dHJpYnV0ZSkKK3sKKyAgICBtX291dC5wcmludCgibnVtdGhyZWFkcygiLCBu
dW1UaHJlYWRzQXR0cmlidXRlLndpZHRoKCksICIsICIsIG51bVRocmVhZHNBdHRyaWJ1dGUuaGVp
Z2h0KCksICIsICIsIG51bVRocmVhZHNBdHRyaWJ1dGUuZGVwdGgoKSwgIikiKTsKK30KKwordm9p
ZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIG1fb3V0LnByaW50
bG4oInsiKTsKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVtcEluZGVudCgpOworICAg
ICAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkgeworICAgICAg
ICAgICAgbV9vdXQucHJpbnQobV9pbmRlbnQpOworICAgICAgICAgICAgdmlzaXQoc3RhdGVtZW50
KTsKKyAgICAgICAgICAgIG1fb3V0LnByaW50bG4oIjsiKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBtX291dC5wcmludChtX2luZGVudCwgIn0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0
KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgQmFzZTo6dmlzaXQoc3RhdGVtZW50
KTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworICAgIG1fb3V0
LnByaW50KCJicmVhayIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpDb250aW51
ZSYpCit7CisgICAgbV9vdXQucHJpbnQoImNvbnRpbnVlIik7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIG1fb3V0LnByaW50KCJ3
aGlsZSAoIik7CisgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIG1fb3V0
LnByaW50KCIpIik7CisgICAgdmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBtX291
dC5wcmludCgiZG8gIik7CisgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICBtX291
dC5wcmludCgiIHdoaWxlKCIpOworICAgIHZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkp
OworICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAgbV9vdXQucHJpbnQoImZvciAoIik7CisgICAgV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgeworICAgICAgICB2aXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOwor
ICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIG1fb3V0LnByaW50KCI7ICIp
OworICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKQorICAgICAgICB2aXNpdCgqZm9yTG9vcC5j
b25kaXRpb24oKSk7CisgICAgbV9vdXQucHJpbnQoIjsgIik7CisgICAgaWYgKGZvckxvb3AuaW5j
cmVtZW50KCkpCisgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICBtX291
dC5wcmludCgiKSAiKTsKKyAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgQmFzZTo6
dmlzaXQoZXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkRvdEV4
cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihkb3RFeHByZXNzaW9uKSk7CisgICAgbV9vdXQucHJp
bnQoIi4iLCBkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7CisgICAgdmlz
aXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJl
c3Npb24pKTsKKyAgICBtX291dC5wcmludCgiWyIpOworICAgIHZpc2l0KGluZGV4RXhwcmVzc2lv
bi5pbmRleEV4cHJlc3Npb24oKSk7CisgICAgbV9vdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBB
U1REdW1wZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9u
KQoreworICAgIEJhc2U6OnZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIEFTVER1bXBlcjo6
dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50KQoreworICAgIEJhc2U6OnZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0
ZW1lbnQpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7
CisgICAgbV9vdXQucHJpbnQoImZhbGx0aHJvdWdoIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmludCgi
aWYgKCIpOworICAgIHZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIG1fb3V0
LnByaW50KCIpICIpOworICAgIHZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlm
U3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQoIiBlbHNlICIpOwor
ICAgICAgICB2aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgfQorfQorCit2b2lk
IEFTVER1bXBlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBt
X291dC5wcmludCgicmV0dXJuIik7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7
CisgICAgICAgIG1fb3V0LnByaW50KCIgIik7CisgICAgICAgIHZpc2l0KCpyZXR1cm5TdGF0ZW1l
bnQudmFsdWUoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUcmFw
JikKK3sKKyAgICBtX291dC5wcmludCgidHJhcCIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBtX291dC5w
cmludCgic3dpdGNoICgiKTsKKyAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7Cisg
ICAgbV9vdXQucHJpbnRsbigiKSB7Iik7CisgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgZm9y
IChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAg
ICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICBtX291dC5wcmludGxuKCk7CisgICAgICAgIG9u
Y2UgPSB0cnVlOworICAgICAgICBtX291dC5wcmludChtX2luZGVudCk7CisgICAgICAgIHZpc2l0
KHN3aXRjaENhc2UpOworICAgIH0KKyAgICBtX291dC5wcmludCgiXG4iLCBtX2luZGVudCwgIn0i
KTsKKworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hD
YXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpIHsKKyAgICAgICAgbV9vdXQucHJp
bnQoImNhc2UgIik7CisgICAgICAgIHZpc2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOworICAgICAg
ICBtX291dC5wcmludCgiOiAiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9vdXQucHJpbnQoImRl
ZmF1bHQ6ICIpOworICAgIHZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKK3sKKyAgICBCYXNlOjp2aXNpdCh2YXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKHZhcmlhYmxl
RGVjbGFyYXRpb24udHlwZSgpKSB7CisgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9u
LnR5cGUoKSk7CisgICAgICAgIG1fb3V0LnByaW50KCIgIik7CisgICAgfQorICAgIG1fb3V0LnBy
aW50KHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJh
dGlvbi5zZW1hbnRpYygpKQorICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7Cisg
ICAgICAgIG1fb3V0LnByaW50KCIgPSAiKTsKKyAgICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFy
YXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQo
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAg
dmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBtX291dC5wcmludCgiID0g
Iik7CisgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sK
KyAgICBtX291dC5wcmludChjYWxsRXhwcmVzc2lvbi5uYW1lKCksICIoIik7CisgICAgYm9vbCBv
bmNlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFy
Z3VtZW50cygpKSB7CisgICAgICAgIGlmIChvbmNlKQorICAgICAgICAgICAgbV9vdXQucHJpbnQo
IiwgIik7CisgICAgICAgIG9uY2UgPSB0cnVlOworICAgICAgICB2aXNpdChhcmd1bWVudCk7Cisg
ICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIG1fb3V0LnByaW50
KCIoIik7CisgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9u
IDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkgeworICAgICAgICBpZiAob25jZSkKKyAgICAgICAg
ICAgIG1fb3V0LnByaW50KCIsICIpOworICAgICAgICBvbmNlID0gdHJ1ZTsKKyAgICAgICAgdmlz
aXQoZXhwcmVzc2lvbik7CisgICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VF
eHByZXNzaW9uKQoreworICAgIG1fb3V0LnByaW50KCIqIik7CisgICAgdmlzaXQoZGVyZWZlcmVu
Y2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICB2aXNpdChsb2dp
Y2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIHN3aXRjaCAobG9naWNhbEV4cHJlc3Npb24udHlw
ZSgpKSB7CisgICAgY2FzZSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpBbmQ6CisgICAg
ICAgIG1fb3V0LnByaW50KCIgJiYgIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVNUOjpM
b2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6T3I6CisgICAgICAgIG1fb3V0LnByaW50KCIgfHwgIik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB2aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdo
dCgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQoreworICAgIG1fb3V0LnByaW50KCIhIik7CisgICAg
dmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKK30KKwordm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICBtX291dC5wcmludCgiQCIpOworICAgIHZpc2l0KG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lv
bikKK3sKKyAgICBtX291dC5wcmludCgiJiIpOworICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVz
c2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgYXV0
byBvbGRWYXJpYWJsZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFyaWFibGVSZWZl
cmVuY2UoKTsKKyAgICBhdXRvIG5ld1ZhcmlhYmxlID0gcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpOworCisgICAgbV9vdXQucHJpbnQoIigiKTsKKyAgICB2
aXNpdChvbGRWYXJpYWJsZS5nZXQoKSk7CisgICAgbV9vdXQucHJpbnQoIiA9ICIpOworICAgIHZp
c2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIG1fb3V0LnByaW50
KCIsICIpOworCisgICAgdmlzaXQobmV3VmFyaWFibGUuZ2V0KCkpOworICAgIG1fb3V0LnByaW50
KCIgPSAiKTsKKyAgICB2aXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4
cHJlc3Npb24oKSk7CisgICAgbV9vdXQucHJpbnQoIiwgIik7CisKKyAgICB2aXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBtX291dC5wcmludCgiID0gIik7Cisg
ICAgdmlzaXQobmV3VmFyaWFibGUuZ2V0KCkpOworICAgIG1fb3V0LnByaW50KCIsICIpOworCisg
ICAgdmlzaXQoKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsK
KyAgICBtX291dC5wcmludCgiKSIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpU
ZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAgdmlzaXQodGVybmFy
eUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgIG1fb3V0LnByaW50KCIgPyAiKTsKKyAgICB2
aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICBtX291dC5wcmlu
dCgiIDogIik7CisgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7
Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJp
YWJsZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpLmlzRW1w
dHkoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIiQoIiwgUmF3UG9pbnRlcih2YXJpYWJsZVJlZmVy
ZW5jZS52YXJpYWJsZSgpKSwgIikiKTsKKyAgICBlbHNlCisgICAgICAgIG1fb3V0LnByaW50KHZh
cmlhYmxlUmVmZXJlbmNlLm5hbWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgor
CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
KyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBBU1REdW1wZXIgOiBWaXNpdG9yIHsKKyAg
ICB1c2luZyBCYXNlID0gVmlzaXRvcjsKK3B1YmxpYzoKKyAgICB2b2lkIHZpc2l0KFByb2dyYW0m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TmFtZWRUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlR5cGVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNl
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RydWN0dXJlRWxlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpBdHRyaWJ1dGVCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCdWlsdElu
U2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRp
YyYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFu
dGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkJvb2xlYW5MaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExp
dGVyYWxUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlw
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpCcmVhayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb250aW51ZSYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdo
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6UmV0dXJuJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2Um
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6V2hpbGVMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJl
c3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICBT
dHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX291dC50b1N0cmluZygpOyB9CisKK3ByaXZhdGU6
CisgICAgc3RydWN0IEluZGVudCB7CisgICAgICAgIEluZGVudChBU1REdW1wZXImIGR1bXBlcikK
KyAgICAgICAgICAgIDogbV9zY29wZShkdW1wZXIubV9pbmRlbnQsIGR1bXBlci5tX2luZGVudCAr
ICIgICAiKQorICAgICAgICB7IH0KKyAgICAgICAgU2V0Rm9yU2NvcGU8U3RyaW5nPiBtX3Njb3Bl
OworICAgIH07CisKKyAgICBJbmRlbnQgYnVtcEluZGVudCgpIHsgcmV0dXJuIEluZGVudCgqdGhp
cyk7IH0KKworICAgIGZyaWVuZCBzdHJ1Y3QgSW5kZW50OworCisgICAgU3RyaW5nUHJpbnRTdHJl
YW0gbV9vdXQ7CisgICAgU3RyaW5nIG1faW5kZW50OworfTsKKworc3RhdGljIEFMV0FZU19JTkxJ
TkUgU3RyaW5nIHRvU3RyaW5nKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQVNURHVtcGVyIGR1
bXBlcjsKKyAgICBkdW1wZXIudmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuIGR1bXBlci50b1N0
cmluZygpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGR1bXBBU1QoUHJvZ3JhbSYg
cHJvZ3JhbSkKK3sKKyAgICBkYXRhTG9nTG4odG9TdHJpbmcocHJvZ3JhbSkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xBU1REdW1wZXIuaCIKICNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvblN0
YWdlQ2hlY2tlci5oIgpAQCAtNTIsNiArNTMsNDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgV0hMU0wgewogCitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEJlZm9yZUVh
Y2hQYXNzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2lu
ZyA9IGZhbHNlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9IGZhbHNlOwor
CitzdGF0aWMgYm9vbCBkdW1wQVNUSWZOZWVkZWQoYm9vbCBzaG91bGREdW1wLCBQcm9ncmFtJiBw
cm9ncmFtLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGlmIChzaG91bGREdW1wKSB7Cisg
ICAgICAgIGRhdGFMb2dMbihtZXNzYWdlKTsKKyAgICAgICAgZHVtcEFTVChwcm9ncmFtKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJzaW5nSWZOZWVkZWQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sK
KyAgICByZXR1cm4gZHVtcEFTVElmTmVlZGVkKGR1bXBBU1RBZnRlclBhcnNpbmcsIHByb2dyYW0s
ICJBU1QgYWZ0ZXIgcGFyc2luZyIpOworfQorCitzdGF0aWMgYm9vbCBkdW1wQVNUQmV0d2VlbkVh
Y2hQYXNzSWZOZWVkZWQoUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sK
KyAgICByZXR1cm4gZHVtcEFTVElmTmVlZGVkKGR1bXBBU1RCZWZvcmVFYWNoUGFzcywgcHJvZ3Jh
bSwgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVkKFByb2dy
YW0mIHByb2dyYW0pCit7CisgICAgcmV0dXJuIGR1bXBBU1RJZk5lZWRlZChkdW1wQVNUQXRFbmQs
IHByb2dyYW0sICJBU1QgYXQgZW5kIik7Cit9CisKKyNkZWZpbmUgUlVOX1BBU1MocGFzcywgLi4u
KSBcCisgICAgZG8geyBcCisgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChw
cm9ncmFtLCAiQVNUIGJlZm9yZSAiICMgcGFzcyk7IFwKKyAgICAgICAgaWYgKCFwYXNzKF9fVkFf
QVJHU19fKSkgXAorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgXAorICAgIH0gd2hp
bGUoMCkKKyAgICAKKwogc3RhdGljIE9wdGlvbmFsPFByb2dyYW0+IHByZXBhcmVTaGFyZWQoU3Ry
aW5nJiB3aGxzbFNvdXJjZSkKIHsKICAgICBQcm9ncmFtIHByb2dyYW07CkBAIC02MSwzNSArMTAw
LDMxIEBAIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hhcmVkKFMKICAgICBBU1NF
UlRfVU5VU0VEKGZhaWx1cmUsICFmYWlsdXJlKTsKICAgICBpZiAocGFyc2VyLnBhcnNlKHByb2dy
YW0sIHdobHNsU291cmNlLCBQYXJzZXI6Ok1vZGU6OlVzZXIpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgaWYgKCFkdW1wQVNUQmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQocHJv
Z3JhbSwgIkFTVCBhZnRlciBwYXJzaW5nIikpCisgICAgICAgIGR1bXBBU1RBZnRlclBhcnNpbmdJ
Zk5lZWRlZChwcm9ncmFtKTsKKwogICAgIE5hbWVSZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3Jh
bS5uYW1lQ29udGV4dCgpKTsKLSAgICBpZiAoIXJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwg
bmFtZVJlc29sdmVyKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIWNo
ZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgaWYgKCFzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKHByb2dyYW0pKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zKHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICgh
c3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFzeW50aGVzaXplQ29uc3RydWN0b3JzKHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghcmVzb2x2ZU5hbWVzSW5GdW5j
dGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIFJVTl9QQVNTKHJlc29sdmVOYW1lc0luVHlwZXMsIHBy
b2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgUlVOX1BBU1MoY2hlY2tSZWN1cnNpdmVUeXBlcywg
cHJvZ3JhbSk7CisgICAgUlVOX1BBU1Moc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycywgcHJv
Z3JhbSk7CisgICAgUlVOX1BBU1Moc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLCBwcm9n
cmFtKTsKKyAgICBSVU5fUEFTUyhzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aCwgcHJvZ3Jh
bSk7CisgICAgUlVOX1BBU1Moc3ludGhlc2l6ZUNvbnN0cnVjdG9ycywgcHJvZ3JhbSk7CisgICAg
UlVOX1BBU1MocmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMsIHByb2dyYW0sIG5hbWVSZXNvbHZlcik7
CisgICAgUlVOX1BBU1MoY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMsIHByb2dyYW0pOworCisgICAg
UlVOX1BBU1MoY2hlY2ssIHByb2dyYW0pOwogCi0gICAgaWYgKCFjaGVjayhwcm9ncmFtKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFt
KTsKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NTc4OCBSZXNvbHZlIHByb3BlcnRpZXMgaGVyZQogICAgIGZpbmRIaWdoWm9tYmllcyhwcm9n
cmFtKTsKLSAgICBpZiAoIWNoZWNrU3RhdGVtZW50QmVoYXZpb3IocHJvZ3JhbSkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjaGVja1JlY3Vyc2lvbihwcm9ncmFtKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIWNoZWNrRnVuY3Rpb25TdGFn
ZXMocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgUlVOX1BBU1Mo
Y2hlY2tTdGF0ZW1lbnRCZWhhdmlvciwgcHJvZ3JhbSk7CisgICAgUlVOX1BBU1MoY2hlY2tSZWN1
cnNpb24sIHByb2dyYW0pOworICAgIFJVTl9QQVNTKGNoZWNrRnVuY3Rpb25TdGFnZXMsIHByb2dy
YW0pOworCisgICAgZHVtcEFTVEF0RW5kSWZOZWVkZWQocHJvZ3JhbSk7CisKICAgICByZXR1cm4g
cHJvZ3JhbTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3MyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIK
LSNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xC
YXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgot
I2luY2x1ZGUgIldITFNMQmxvY2suaCIKLSNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgi
Ci0jaW5jbHVkZSAiV0hMU0xCcmVhay5oIgotI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGlj
LmgiCi0jaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29t
bWFFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTENvbnRpbnVlLmgiCi0jaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCi0jaW5jbHVkZSAiV0hMU0xE
b3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRl
ICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTEZhbGx0aHJvdWdoLmgiCi0jaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKLSNpbmNs
dWRlICJXSExTTEZvckxvb3AuaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgi
Ci0jaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xG
dW5jdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEludGVnZXJMaXRl
cmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldI
TFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUg
IldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0j
aW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgotI2luY2x1
ZGUgIldITFNMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKLSNpbmNsdWRlICJXSExTTFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIK
LSNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFJldHVy
bi5oIgotI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFu
dGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFN0cnVj
dHVyZURlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVu
dC5oIgotI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExT
TFRyYXAuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFR5cGVBcmd1
bWVudC5oIgotI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwu
aCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5o
IgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExTTFdo
aWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMQVNULmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQVNU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQVNULmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQVNULmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2ln
bm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUu
aCIKKyNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQmxvY2su
aCIKKyNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xCcmVh
ay5oIgorI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xD
YWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnRpbnVl
LmgiCisjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hM
U0xFbnRyeVBvaW50VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRl
cmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25E
ZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldI
TFNMSW5kZXhFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgor
I2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dp
Y2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIK
KyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJh
bFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgor
I2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCisjaW5jbHVkZSAi
V0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMUmVzb3VyY2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVk
ZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKKyNpbmNs
dWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgorI2luY2x1ZGUgIldITFNM
U3dpdGNoQ2FzZS5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCisjaW5jbHVk
ZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHJhcC5oIgorI2lu
Y2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVuc2ln
bmVkSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAi
V0hMU0xXaGlsZUxvb3AuaCIKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAko
cmV2aXNpb24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQWRkcmVzc1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDIxIEBA
IGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIDogdWludDhfdCB7CiAgICAgVGhyZWFkCiB9OwogCitz
dGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmcgdG9TdHJpbmcoQWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZSkKK3sKKyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZSkgeworICAgIGNhc2UgQWRkcmVzc1Nw
YWNlOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3RyOworICAgIGNhc2Ug
QWRkcmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7CisgICAg
Y2FzZSBBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOgorICAgICAgICByZXR1cm4gInRocmVhZGdy
b3VwIl9zdHI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFjZSA9PSBB
ZGRyZXNzU3BhY2U6OlRocmVhZCk7CisgICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7CisgICAg
fQorfQorCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCShyZXZpc2lv
biAyNDU1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xCdWlsdEluU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNDAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogCisgICAgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAgICAgICByZXR1
cm4gIlNWSW5zdGFuY2VJRCI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6Cisg
ICAgICAgICAgICByZXR1cm4gIlNWVmVydGV4SUQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpQ
U2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiUFNpemUiOworICAgICAgICBjYXNlIFZhcmlhYmxl
OjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgcmV0dXJuICJTVlBvc2l0aW9uIjsKKyAgICAgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZJc0Zyb250RmFjZToKKyAgICAgICAgICAgIHJldHVybiAiU1ZJc0Zy
b250RmFjZSI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAg
ICAgICByZXR1cm4gIlNWU2FtcGxlSW5kZXgiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVklu
bmVyQ292ZXJhZ2U6CisgICAgICAgICAgICByZXR1cm4gIlNWSW5uZXJDb3ZlcmFnZSI7CisgICAg
ICAgIGNhc2UgVmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICAgICAgcmV0dXJuICJTVlRhcmdl
dCI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWRGVwdGg6CisgICAgICAgICAgICByZXR1cm4g
IlNWRGVwdGgiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICAg
ICAgcmV0dXJuICJTVkNvdmVyYWdlIjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRj
aFRocmVhZElEOgorICAgICAgICAgICAgcmV0dXJuICJTVkRpc3BhdGNoVGhyZWFkSUQiOworICAg
ICAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgICAgICByZXR1cm4gIlNWR3Jv
dXBJRCI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAgICAgICAg
IHJldHVybiAiU1ZHcm91cEluZGV4IjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRo
cmVhZElEOgorICAgICAgICAgICAgcmV0dXJuICJTVkdyb3VwVGhyZWFkSUQiOworICAgICAgICB9
CisgICAgfQorCiAgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNvbnN0IFVubmFtZWRUeXBlJiwg
Y29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNBY2NlcHRhYmxl
Rm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBPcHRpb25h
bDxFbnRyeVBvaW50VHlwZT4mKSBjb25zdCBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnRy
eVBvaW50VHlwZS5oCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnRyeVBvaW50VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0MiwxOCBAQCBlbnVtIGNsYXNzIEVudHJ5UG9pbnRUeXBlIDogdWludDhfdCB7CiAg
ICAgLy8gRklYTUU6IEFkZCBhbiBlbnRyeSBwb2ludCB0eXBlIGZvciB0ZXN0aW5nCiB9OwogCitz
dGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmcgdG9TdHJpbmcoRW50cnlQb2ludFR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6
CisgICAgICAgIHJldHVybiAidmVydGV4IjsKKyAgICBjYXNlIEVudHJ5UG9pbnRUeXBlOjpGcmFn
bWVudDoKKyAgICAgICAgcmV0dXJuICJmcmFnbWVudCI7CisgICAgY2FzZSBFbnRyeVBvaW50VHlw
ZTo6Q29tcHV0ZToKKyAgICAgICAgcmV0dXJuICJjb21wdXRlIjsKKyAgICB9Cit9CisKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVz
b3VyY2VTZW1hbnRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaAkocmV2aXNpb24gMjQ1NTM5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VT
ZW1hbnRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwyMCBAQCBwdWJsaWM6CiAgICAg
UmVzb3VyY2VTZW1hbnRpYyhjb25zdCBSZXNvdXJjZVNlbWFudGljJikgPSBkZWxldGU7CiAgICAg
UmVzb3VyY2VTZW1hbnRpYyhSZXNvdXJjZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIFN0
cmluZyB0b1N0cmluZygpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgICAg
ICBjYXNlIE1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAgICAgICAgICByZXR1cm4gIlVu
b3JkZXJlZEFjY2Vzc1ZpZXciOworICAgICAgICBjYXNlIE1vZGU6OlRleHR1cmU6CisgICAgICAg
ICAgICByZXR1cm4gIlRleHR1cmUiOworICAgICAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKKyAgICAg
ICAgICAgIHJldHVybiAiQnVmZmVyIjsKKyAgICAgICAgY2FzZSBNb2RlOjpTYW1wbGVyOgorICAg
ICAgICAgICAgcmV0dXJuICJTYW1wbGVyIjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIE1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIHVuc2lnbmVkIHNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9zcGFjZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkocmV2aXNpb24gMjQ1
NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xU
eXBlTmFtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsMjEgKzM4MCw2IEBAIFN0cmluZyBU
eXBlTmFtZXI6Om1ldGFsVHlwZURlY2xhcmF0aW9ucygKICAgICByZXR1cm4gbWV0YWxUeXBlRGVj
bGFyYXRpb25Xcml0ZXIudG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIFN0cmluZyB0b1N0cmluZyhB
U1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCi17Ci0gICAgc3dpdGNoIChhZGRyZXNzU3Bh
Y2UpIHsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDoKLSAgICAgICAgcmV0
dXJuICJjb25zdGFudCJfc3RyOwotICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OkRldmljZToK
LSAgICAgICAgcmV0dXJuICJkZXZpY2UiX3N0cjsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWRncm91cDoKLSAgICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCJfc3RyOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChhZGRyZXNzU3BhY2UgPT0gQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCk7Ci0gICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7Ci0gICAgfQotfQotCiB2b2lk
IFR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihCYXNlVHlwZU5hbWVOb2RlJiBi
YXNlVHlwZU5hbWVOb2RlLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5
cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3Ry
aW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICBpZiAoZW1pdHRlZFVubmFtZWRUeXBl
cy5jb250YWlucygmYmFzZVR5cGVOYW1lTm9kZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDU1MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTgzMTQsNiArODMxNCw3IEBACiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1
QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0RBMUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50
RXh0ZW5zaW9uU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MjEzMUU1QTFDNEYxNTYxMDAzM0Y4MDIgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MjE1ODYy
QzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBU1Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjExQ0IyRkRGNjAwNzU5NzRE
IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3MjRGMjFDQjJGREY2MDA3NTk3NEQgLyogVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyQjBENEJEMUM1N0ZEMUUwMDc3Q0U1MyAvKiBQbGF0Zm9ybVZpZXcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1WaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjk5Nyw2ICsxNjk5OCw3IEBACiAJCTFDQTBDMkY2MjFFRURB
RDIwMEExMTg2MCAvKiBBU1QgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTUyMTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFTVC5oICovLAogCQkJ
CTFDODQwQjkwMjFFQzMwRjkwMEQwNTAwRCAvKiBXSExTTEFkZHJlc3NTcGFjZS5oICovLAogCQkJ
CUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oICov
LAogCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5oICovLAo=
</data>
<flag name="review"
          id="386324"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370373</attachid>
            <date>2019-05-21 19:35:27 -0700</date>
            <delta_ts>2019-05-21 19:37:34 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45685</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NTYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE5LTA1LTIxICBTYWFtIGJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdITFNMOiBBZGQgYW4gQVNUIGR1
bXBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgTWF4ZmllbGQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBpdCBzbyB3ZSBjYW4gZHVtcCB0aGUgV0hMU0wgcHJvZ3JhbSdzIEFTVC4K
KyAgICAgICAgVGhpcyB3aWxsIGJlY29tZSB1c2VmdWwgd2hlbiB3ZSdyZSBkZWJ1Z2dpbmcgcGFz
c2VzIHRoYXQKKyAgICAgICAgdHJhbnNmb3JtIHRoZSBBU1QuCisgICAgICAgIAorICAgICAgICBU
aGUgZHVtcGVyIG1vc3RseSBwcmludHMgaW4gYSBzdHlsZSB3aGVyZSB0aGUgZHVtcCBpcyBhbG1v
c3QKKyAgICAgICAgdmFsaWQgV0hMU0wgY29kZS4gRS5nLCB0aGlzIFdITFNMIHByb2dyYW06Cisg
ICAgICAgIGBgYAorICAgICAgICBpbnQgZm9vKGludCBhcmcpIHsKKyAgICAgICAgICAgIHJldHVy
biBhcmcgKyAxOworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgZ2V0
cyBkdW1wZWQgYXM6CisgICAgICAgIGBgYAorICAgICAgICBpbnQgZm9vKGludCBhcmcpIHsKKyAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdG9yKyhhcmcsIDEpOworICAgICAgICB9CisgICAgICAgIGBg
YAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSB3YXkgdG8gZHVtcCBi
ZXR3ZWVuIGVhY2ggcGFzcywgYWZ0ZXIKKyAgICAgICAgcGFyc2luZywgb3IgYXQgdGhlIGVuZCBv
ZiBhbGwgcGFzc2VzLiBDdXJyZW50bHksIHRoaXMgaXMgY29udHJvbGxlZAorICAgICAgICBieSBh
IHN0YXRpYyB2YXJpYWJsZS4gSSdsbCBtYWtlIHRoZXNlIHJ1bnRpbWUgY29uZmlndXJhYmxlIGlu
IGEgZm9sbG93CisgICAgICAgIHVwOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MDk3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBpcyB1c2Vk
IGZvciBsb2dnaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QVNULmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFk
ZHJlc3NTcGFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6dG9TdHJpbmcpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QnVpbHRJblNlbWFudGljOjp0b1N0cmlu
ZyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQ
b2ludFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmg6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZXNvdXJjZVNlbWFudGljOjp0b1N0cmlu
Zyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp0b1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnZpc2l0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1REdW1wZXI6OkluZGVudDo6SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1REdW1wZXI6OmJ1bXBJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnRv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkdW1wQVNUKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OmR1bXBBU1RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6ZHVtcEFT
VEFmdGVyUGFyc2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkdW1wQVNU
QmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmR1bXBB
U1RBdEVuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlU2hhcmVk
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAxOS0wNS0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGllcyB0aGUgd3Jvbmcg
dmFyaWF0aW9uIHZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjQ1NTM5KQorKysg
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICszMDYs
NyBAQCBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvCiAKIE1vZHVsZXMv
d2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCiBNb2R1bGVzL3dlYmdwdS9OYXZpZ2F0b3JHUFUu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMQVNURHVt
cGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBU1QuaCIKKyNp
bmNsdWRlICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sK
KyAgICBtX291dC5wcmludGxuKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dy
YW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdChw
cm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKVtpXSk7CisgICAgaWYgKHByb2dyYW0ubmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIlxuXG4i
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdChwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKClbaV0pOworICAgIGlmIChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkuc2l6ZSgpKQorICAgICAgICBtX291dC5wcmludCgiXG5cbiIpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpLnNpemUo
KTsgKytpKQorICAgICAgICB2aXNpdChwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpW2ldKTsKKyAg
ICBpZiAocHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKS5zaXplKCkpCisgICAgICAgIG1fb3V0LnBy
aW50KCJcblxuIik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uc3RydWN0
dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXQocHJvZ3JhbS5zdHJ1
Y3R1cmVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBpZiAocHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0
aW9ucygpLnNpemUoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIlxuXG4iKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIHZpc2l0KHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpW2ld
KTsKKyAgICBpZiAocHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpKQorICAg
ICAgICBtX291dC5wcmludCgiXG5cbiIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXQo
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKClbaV0pOworCisgICAgbV9vdXQucHJpbnRsbigp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCit7CisgICAgQmFzZTo6dmlzaXQodW5uYW1lZFR5cGUpOworfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdChu
YW1lZFR5cGUpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlv
biYgdHlwZURlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQoInR5cGVkZWYgIiwgdHlwZURl
ZmluaXRpb24ubmFtZSgpLCAiID0gIik7CisgICAgdmlzaXQodHlwZURlZmluaXRpb24udHlwZSgp
KTsKKyAgICBtX291dC5wcmludGxuKCI7Iik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgbV9v
dXQucHJpbnRsbihtX2luZGVudCwgInN0cnVjdCAiLCBzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUo
KSwgIiB7Iik7CisgICAgeworICAgICAgICBhdXRvIGluZGVudCA9IGJ1bXBJbmRlbnQoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5z
dHJ1Y3R1cmVFbGVtZW50cygpKQorICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7
CisgICAgfQorICAgIG1fb3V0LnByaW50bG4obV9pbmRlbnQsICJ9Iik7CisgICAgbV9vdXQucHJp
bnRsbigpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50
JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIG1fb3V0LnByaW50KG1faW5kZW50KTsKKyAgICB2
aXNpdChzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMo
KSkKKyAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7CisgICAgbV9v
dXQucHJpbnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICAvLyBGSVhNRTog
VGVzdCB0aGlzIG9uY2Ugd2UgcGFyc2UgZW51bXM6CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA4NworCisgICAgbV9vdXQucHJpbnRsbihtX2luZGVu
dCwgImVudW0gIik7CisgICAgdmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgbV9vdXQucHJpbnQoIiB7Iik7CisKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVt
cEluZGVudCgpOworICAgICAgICBib29sIG9uY2UgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRv
JiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1l
bWJlcnMoKSkgeworICAgICAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICAgICAgbV9vdXQu
cHJpbnQoIiwgIik7CisgICAgICAgICAgICBtX291dC5wcmludGxuKCk7CisgICAgICAgICAgICBt
X291dC5wcmludChtX2luZGVudCk7CisgICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJl
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX291dC5wcmludGxuKCk7CisgICAgbV9vdXQu
cHJpbnRsbihtX2luZGVudCwgIn0iKTsKKyAgICBtX291dC5wcmludGxuKCk7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJl
cikKK3sKKyAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCkpOworICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKSB7CisgICAgICAgIG1fb3V0LnByaW50KCIgPSAi
KTsKKyAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOworICAgIH0KK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQobV9pbmRlbnQpOworICAgIHZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikp
OworICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICBtX291dC5wcmlu
dCgiXG5cbiIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIG1fb3V0LnBy
aW50KG1faW5kZW50KTsKKyAgICBtX291dC5wcmludCgibmF0aXZlICIpOworICAgIHZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKTsKKyAgICBtX291dC5wcmludGxuKCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAg
dmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKKyAgICBpZiAoZnVu
Y3Rpb25EZWNsYXJhdGlvbi5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICBtX291dC5wcmludChB
U1Q6OnRvU3RyaW5nKCpmdW5jdGlvbkRlY2xhcmF0aW9uLmVudHJ5UG9pbnRUeXBlKCkpLCAiICIp
OworICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBtX291dC5wcmlu
dCgiICIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIpOworICAgIGJvb2wgb25jZSA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICBtX291dC5wcmlu
dCgiLCAiKTsKKyAgICAgICAgb25jZSA9IHRydWU7CisgICAgICAgIHZpc2l0KHBhcmFtZXRlcik7
CisgICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7CisgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRp
b24uc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50
aWMoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7Cisg
ICAgbV9vdXQucHJpbnQobV9pbmRlbnQsICJuYXRpdmUgdHlwZWRlZiAiKTsKKyAgICBtX291dC5w
cmludChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQo
IjwiKTsKKyAgICAgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdHlw
ZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkgeworICAg
ICAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICAgICAgbV9vdXQucHJpbnQoIiwgIik7Cisg
ICAgICAgICAgICBvbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9vdXQucHJpbnQoIj4iKTsKKyAgICB9CisgICAgbV9vdXQu
cHJpbnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJl
bmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIG1fb3V0LnByaW50KHR5cGVSZWZlcmVuY2UubmFt
ZSgpKTsKKworICAgIGlmICh0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpIHsK
KyAgICAgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgICAgIG1fb3V0LnByaW50KCI8Iik7Cisg
ICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1l
bnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChvbmNlKQorICAgICAgICAgICAgICAgIG1fb3V0LnBy
aW50KCIsICIpOworICAgICAgICAgICAgb25jZSA9IHRydWU7CisgICAgICAgICAgICB2aXNpdCh0
eXBlQXJndW1lbnQpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnByaW50KCI+Iik7CisgICAg
fQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5
cGUpCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRl
clR5cGUpKTsKKyAgICBtX291dC5wcmludCgiKiIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICB2
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUp
KTsKKyAgICBtX291dC5wcmludCgiW10iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgdmlzaXQoYXJyYXlUeXBlLnR5cGUoKSk7
CisgICAgbV9vdXQucHJpbnQoIlsiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIl0iKTsKK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQp
Cit7CisgICAgQmFzZTo6dmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAgICBtX291dC5w
cmludChBU1Q6OnRvU3RyaW5nKHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAiICIpOwor
ICAgIHZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9CisKK3ZvaWQgQVNURHVt
cGVyOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBtX291dC5wcmludCgi
IDogIik7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKSB7CisgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRp
Yyk7CisgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykg
eworICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
YykgeworICAgICAgICB2aXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOworICAg
IH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKSB7Cisg
ICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7CisgICAgfSksIHNlbWFudGljKTsKK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFu
dEV4cHJlc3Npb24pCit7CisgICAgQmFzZTo6dmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJs
b2NrKQoreworICAgIGlmIChhdHRyaWJ1dGVCbG9jay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fb3V0LnByaW50KCJbIik7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJp
YnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7
CisgICAgbV9vdXQucHJpbnQoIl0gIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQoreworICAgIG1fb3V0LnByaW50KGJ1
aWx0SW5TZW1hbnRpYy50b1N0cmluZygpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykKK3sKKyAgICBtX291dC5wcmlu
dChyZXNvdXJjZVNlbWFudGljLnRvU3RyaW5nKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworICAgIC8vIEZJWE1F
OiBIYW5kbGUgdGhpcyB3aGVuIHdlIGltcGxlbWVudCBpdC4KK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpCit7Cisg
ICAgbV9vdXQucHJpbnQoImF0dHJpYnV0ZSgiLCBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSwg
IikiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KGludGVnZXJMaXRlcmFsLnZhbHVlKCkp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
JiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwudmFsdWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkZs
b2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KGZsb2F0TGl0ZXJh
bC52YWx1ZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWwm
IG51bGxMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KCJudWxsIik7CisgICAgdmlzaXQobnVs
bExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Qm9vbGVh
bkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQoreworICAgIGlmIChib29sZWFuTGl0ZXJhbC52YWx1
ZSgpKQorICAgICAgICBtX291dC5wcmludCgidHJ1ZSIpOworICAgIGVsc2UKKyAgICAgICAgbV9v
dXQucHJpbnQoImZhbHNlIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlJikKK3sKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6RmxvYXRMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
Ok51bGxMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIHdo
ZW4gd2UgY2FuIHBhcnNlIGVudW1zOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgwODcKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVu
Y3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQoreworICAgIFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgeworICAgICAgICB2aXNpdChudW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFk
c0F0dHJpYnV0ZSkKK3sKKyAgICBtX291dC5wcmludCgibnVtdGhyZWFkcygiLCBudW1UaHJlYWRz
QXR0cmlidXRlLndpZHRoKCksICIsICIsIG51bVRocmVhZHNBdHRyaWJ1dGUuaGVpZ2h0KCksICIs
ICIsIG51bVRocmVhZHNBdHRyaWJ1dGUuZGVwdGgoKSwgIikiKTsKK30KKwordm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIG1fb3V0LnByaW50bG4oInsiKTsK
KyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVtcEluZGVudCgpOworICAgICAgICBmb3Ig
KGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkgeworICAgICAgICAgICAgbV9v
dXQucHJpbnQobV9pbmRlbnQpOworICAgICAgICAgICAgdmlzaXQoc3RhdGVtZW50KTsKKyAgICAg
ICAgICAgIG1fb3V0LnByaW50bG4oIjsiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX291dC5w
cmludChtX2luZGVudCwgIn0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6U3Rh
dGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgQmFzZTo6dmlzaXQoc3RhdGVtZW50KTsKK30KKwor
dm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworICAgIG1fb3V0LnByaW50KCJi
cmVhayIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpDb250aW51ZSYpCit7Cisg
ICAgbV9vdXQucHJpbnQoImNvbnRpbnVlIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIG1fb3V0LnByaW50KCJ3aGlsZSAoIik7
CisgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIG1fb3V0LnByaW50KCIp
Iik7CisgICAgdmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBtX291dC5wcmludCgi
ZG8gIik7CisgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICBtX291dC5wcmludCgi
IHdoaWxlKCIpOworICAgIHZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIG1f
b3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkZvckxvb3Am
IGZvckxvb3ApCit7CisgICAgbV9vdXQucHJpbnQoImZvciAoIik7CisgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgeworICAgICAgICB2aXNpdCh2YXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOworICAgIH0pLCBm
b3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIG1fb3V0LnByaW50KCI7ICIpOworICAgIGlm
IChmb3JMb29wLmNvbmRpdGlvbigpKQorICAgICAgICB2aXNpdCgqZm9yTG9vcC5jb25kaXRpb24o
KSk7CisgICAgbV9vdXQucHJpbnQoIjsgIik7CisgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkp
CisgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICBtX291dC5wcmludCgi
KSAiKTsKKyAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgQmFzZTo6dmlzaXQoZXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mPihkb3RFeHByZXNzaW9uKSk7CisgICAgbV9vdXQucHJpbnQoIi4iLCBk
b3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24pKTsK
KyAgICBtX291dC5wcmludCgiWyIpOworICAgIHZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4
cHJlc3Npb24oKSk7CisgICAgbV9vdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAg
IEJhc2U6OnZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNU
OjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50KQoreworICAgIEJhc2U6OnZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpOwor
fQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7CisgICAgbV9v
dXQucHJpbnQoImZhbGx0aHJvdWdoIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmludCgiaWYgKCIpOwor
ICAgIHZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIG1fb3V0LnByaW50KCIp
ICIpOworICAgIHZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50
LmVsc2VCb2R5KCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQoIiBlbHNlICIpOworICAgICAgICB2
aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmlu
dCgicmV0dXJuIik7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7CisgICAgICAg
IG1fb3V0LnByaW50KCIgIik7CisgICAgICAgIHZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUo
KSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUcmFwJikKK3sKKyAg
ICBtX291dC5wcmludCgidHJhcCIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpT
d2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmludCgic3dp
dGNoICgiKTsKKyAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgbV9vdXQu
cHJpbnRsbigiKSB7Iik7CisgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBz
d2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgaWYg
KG9uY2UpCisgICAgICAgICAgICBtX291dC5wcmludGxuKCk7CisgICAgICAgIG9uY2UgPSB0cnVl
OworICAgICAgICBtX291dC5wcmludChtX2luZGVudCk7CisgICAgICAgIHZpc2l0KHN3aXRjaENh
c2UpOworICAgIH0KKyAgICBtX291dC5wcmludCgiXG4iLCBtX2luZGVudCwgIn0iKTsKKworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQorewor
ICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQoImNhc2Ug
Iik7CisgICAgICAgIHZpc2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOworICAgICAgICBtX291dC5w
cmludCgiOiAiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9vdXQucHJpbnQoImRlZmF1bHQ6ICIp
OworICAgIHZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCkKK3sKKyAgICBCYXNlOjp2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpKSB7CisgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7
CisgICAgICAgIG1fb3V0LnByaW50KCIgIik7CisgICAgfQorICAgIG1fb3V0LnByaW50KHZhcmlh
YmxlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKQorICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsK
KyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CisgICAgICAgIG1f
b3V0LnByaW50KCIgPSAiKTsKKyAgICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5p
dGlhbGl6ZXIoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoYXNz
aWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBtX291dC5wcmludCgiID0gIik7CisgICAg
dmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBtX291
dC5wcmludChjYWxsRXhwcmVzc2lvbi5uYW1lKCksICIoIik7CisgICAgYm9vbCBvbmNlID0gZmFs
c2U7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygp
KSB7CisgICAgICAgIGlmIChvbmNlKQorICAgICAgICAgICAgbV9vdXQucHJpbnQoIiwgIik7Cisg
ICAgICAgIG9uY2UgPSB0cnVlOworICAgICAgICB2aXNpdChhcmd1bWVudCk7CisgICAgfQorICAg
IG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkNvbW1h
RXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIG1fb3V0LnByaW50KCIoIik7Cisg
ICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFF
eHByZXNzaW9uLmxpc3QoKSkgeworICAgICAgICBpZiAob25jZSkKKyAgICAgICAgICAgIG1fb3V0
LnByaW50KCIsICIpOworICAgICAgICBvbmNlID0gdHJ1ZTsKKyAgICAgICAgdmlzaXQoZXhwcmVz
c2lvbik7CisgICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9u
KQoreworICAgIG1fb3V0LnByaW50KCIqIik7CisgICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNz
aW9uLnBvaW50ZXIoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxF
eHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBtX291dC5wcmludCgiKCIpOwor
ICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgc3dpdGNoIChsb2dpY2Fs
RXhwcmVzc2lvbi50eXBlKCkpIHsKKyAgICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5
cGU6OkFuZDoKKyAgICAgICAgbV9vdXQucHJpbnQoIiAmJiAiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpPcjoKKyAgICAgICAgbV9vdXQu
cHJpbnQoIiB8fCAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHZpc2l0KGxvZ2ljYWxF
eHByZXNzaW9uLnJpZ2h0KCkpOworICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVz
c2lvbikKK3sKKyAgICBtX291dC5wcmludCgiISIpOworICAgIG1fb3V0LnByaW50KCIoIik7Cisg
ICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICBtX291dC5wcmlu
dCgiKSIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIG1fb3V0
LnByaW50KCJAIik7CisgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFs
dWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAgIG1fb3V0LnByaW50KCImIik7Cisg
ICAgdmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9pZCBBU1RE
dW1wZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIG9sZFZhcmlhYmxlID0gcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgIGF1dG8gbmV3VmFyaWFibGUg
PSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisKKyAg
ICBtX291dC5wcmludCgiKCIpOworICAgIHZpc2l0KG9sZFZhcmlhYmxlLmdldCgpKTsKKyAgICBt
X291dC5wcmludCgiID0gIik7CisgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
VmFsdWUoKSk7CisgICAgbV9vdXQucHJpbnQoIiwgIik7CisKKyAgICB2aXNpdChuZXdWYXJpYWJs
ZS5nZXQoKSk7CisgICAgbV9vdXQucHJpbnQoIiA9ICIpOworICAgIHZpc2l0KCpyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICBtX291dC5wcmludCgi
LCAiKTsKKworICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOwor
ICAgIG1fb3V0LnByaW50KCIgPSAiKTsKKyAgICB2aXNpdChuZXdWYXJpYWJsZS5nZXQoKSk7Cisg
ICAgbV9vdXQucHJpbnQoIiwgIik7CisKKyAgICB2aXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3Zv
aWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVz
c2lvbikKK3sKKyAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAg
bV9vdXQucHJpbnQoIiA/ICIpOworICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHBy
ZXNzaW9uKCkpOworICAgIG1fb3V0LnByaW50KCIgOiAiKTsKKyAgICB2aXNpdCh0ZXJuYXJ5RXhw
cmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICh2YXJp
YWJsZVJlZmVyZW5jZS5uYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICBtX291dC5wcmludCgiJCgi
LCBSYXdQb2ludGVyKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpLCAiKSIpOworICAgIGVs
c2UKKyAgICAgICAgbV9vdXQucHJpbnQodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xBU1REdW1wZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNz
IEFTVER1bXBlciA6IFZpc2l0b3IgeworICAgIHVzaW5nIEJhc2UgPSBWaXNpdG9yOworcHVibGlj
OgorICAgIHZvaWQgdmlzaXQoUHJvZ3JhbSYpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvU3Ry
aW5nKCkgeyByZXR1cm4gbV9vdXQudG9TdHJpbmcoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQg
dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpO
YW1lZFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5
VHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
U2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNz
aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpSZXNvdXJjZVNlbWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpGbG9hdExpdGVyYWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TnVsbExp
dGVyYWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6QmxvY2smKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RhdGVt
ZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJyZWFrJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkRvV2hpbGVMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkV4cHJlc3Np
b24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0
YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6VHJhcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3Am
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6VGVybmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKworICAgIHN0cnVjdCBJbmRlbnQgeworICAgICAg
ICBJbmRlbnQoQVNURHVtcGVyJiBkdW1wZXIpCisgICAgICAgICAgICA6IG1fc2NvcGUoZHVtcGVy
Lm1faW5kZW50LCBkdW1wZXIubV9pbmRlbnQgKyAiICAgIikKKyAgICAgICAgeyB9CisgICAgICAg
IFNldEZvclNjb3BlPFN0cmluZz4gbV9zY29wZTsKKyAgICB9OworCisgICAgSW5kZW50IGJ1bXBJ
bmRlbnQoKSB7IHJldHVybiBJbmRlbnQoKnRoaXMpOyB9CisKKyAgICBmcmllbmQgc3RydWN0IElu
ZGVudDsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIG1fb3V0OworICAgIFN0cmluZyBtX2luZGVu
dDsKK307CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZyB0b1N0cmluZyhQcm9ncmFtJiBw
cm9ncmFtKQoreworICAgIEFTVER1bXBlciBkdW1wZXI7CisgICAgZHVtcGVyLnZpc2l0KHByb2dy
YW0pOworICAgIHJldHVybiBkdW1wZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIEFMV0FZU19J
TkxJTkUgdm9pZCBkdW1wQVNUKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgZGF0YUxvZ0xuKHRv
U3RyaW5nKHByb2dyYW0pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAko
cmV2aXNpb24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMQVNURHVtcGVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIldITFNMQ2hlY2tlci5o
IgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCIKQEAgLTUyLDYgKzUzLDQ0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAorc3RhdGljIGNv
bnN0ZXhwciBib29sIGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNlOworc3RhdGljIGNvbnN0
ZXhwciBib29sIGR1bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKK3N0YXRpYyBjb25zdGV4cHIg
Ym9vbCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKKworc3RhdGljIGJvb2wgZHVtcEFTVElmTmVlZGVk
KGJvb2wgc2hvdWxkRHVtcCwgUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3QgY2hhciogbWVzc2FnZSkK
K3sKKyAgICBpZiAoc2hvdWxkRHVtcCkgeworICAgICAgICBkYXRhTG9nTG4obWVzc2FnZSk7Cisg
ICAgICAgIGR1bXBBU1QocHJvZ3JhbSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luZ0lm
TmVlZGVkKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgcmV0dXJuIGR1bXBBU1RJZk5lZWRlZChk
dW1wQVNUQWZ0ZXJQYXJzaW5nLCBwcm9ncmFtLCAiQVNUIGFmdGVyIHBhcnNpbmciKTsKK30KKwor
c3RhdGljIGJvb2wgZHVtcEFTVEJldHdlZW5FYWNoUGFzc0lmTmVlZGVkKFByb2dyYW0mIHByb2dy
YW0sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGR1bXBBU1RJZk5lZWRlZChk
dW1wQVNUQmVmb3JlRWFjaFBhc3MsIHByb2dyYW0sIG1lc3NhZ2UpOworfQorCitzdGF0aWMgYm9v
bCBkdW1wQVNUQXRFbmRJZk5lZWRlZChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIHJldHVybiBk
dW1wQVNUSWZOZWVkZWQoZHVtcEFTVEF0RW5kLCBwcm9ncmFtLCAiQVNUIGF0IGVuZCIpOworfQor
CisjZGVmaW5lIFJVTl9QQVNTKHBhc3MsIC4uLikgXAorICAgIGRvIHsgXAorICAgICAgICBkdW1w
QVNUQmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQocHJvZ3JhbSwgIkFTVCBiZWZvcmUgIiAjIHBhc3Mp
OyBcCisgICAgICAgIGlmICghcGFzcyhfX1ZBX0FSR1NfXykpIFwKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7IFwKKyAgICB9IHdoaWxlICgwKQorICAgIAorCiBzdGF0aWMgT3B0aW9u
YWw8UHJvZ3JhbT4gcHJlcGFyZVNoYXJlZChTdHJpbmcmIHdobHNsU291cmNlKQogewogICAgIFBy
b2dyYW0gcHJvZ3JhbTsKQEAgLTYxLDM1ICsxMDAsMzEgQEAgc3RhdGljIE9wdGlvbmFsPFByb2dy
YW0+IHByZXBhcmVTaGFyZWQoUwogICAgIEFTU0VSVF9VTlVTRUQoZmFpbHVyZSwgIWZhaWx1cmUp
OwogICAgIGlmIChwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xTb3VyY2UsIFBhcnNlcjo6TW9k
ZTo6VXNlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWR1bXBB
U1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGFmdGVyIHBhcnNpbmciKSkK
KyAgICAgICAgZHVtcEFTVEFmdGVyUGFyc2luZ0lmTmVlZGVkKHByb2dyYW0pOworCiAgICAgTmFt
ZVJlc29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0KCkpOwotICAgIGlmICgh
cmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY2hlY2tSZWN1cnNpdmVUeXBlcyhwcm9ncmFtKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIXN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
aWYgKCFzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3JhbSkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aChwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIXN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgaWYgKCFyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMocHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgUlVO
X1BBU1MocmVzb2x2ZU5hbWVzSW5UeXBlcywgcHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICBS
VU5fUEFTUyhjaGVja1JlY3Vyc2l2ZVR5cGVzLCBwcm9ncmFtKTsKKyAgICBSVU5fUEFTUyhzeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLCBwcm9ncmFtKTsKKyAgICBSVU5fUEFTUyhzeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMsIHByb2dyYW0pOworICAgIFJVTl9QQVNTKHN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLCBwcm9ncmFtKTsKKyAgICBSVU5fUEFTUyhzeW50aGVzaXpl
Q29uc3RydWN0b3JzLCBwcm9ncmFtKTsKKyAgICBSVU5fUEFTUyhyZXNvbHZlTmFtZXNJbkZ1bmN0
aW9ucywgcHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICBSVU5fUEFTUyhjaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucywgcHJvZ3JhbSk7CisKKyAgICBSVU5fUEFTUyhjaGVjaywgcHJvZ3JhbSk7CiAK
LSAgICBpZiAoIWNoZWNrKHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwogICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlc29sdmUgcHJvcGVydGllcyBo
ZXJlCiAgICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwotICAgIGlmICghY2hlY2tTdGF0ZW1l
bnRCZWhhdmlvcihwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBp
ZiAoIWNoZWNrUmVjdXJzaW9uKHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIGlmICghY2hlY2tGdW5jdGlvblN0YWdlcyhwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBSVU5fUEFTUyhjaGVja1N0YXRlbWVudEJlaGF2aW9yLCBwcm9n
cmFtKTsKKyAgICBSVU5fUEFTUyhjaGVja1JlY3Vyc2lvbiwgcHJvZ3JhbSk7CisgICAgUlVOX1BB
U1MoY2hlY2tGdW5jdGlvblN0YWdlcywgcHJvZ3JhbSk7CisKKyAgICBkdW1wQVNUQXRFbmRJZk5l
ZWRlZChwcm9ncmFtKTsKKwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJ
KHJldmlzaW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDczICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIK
LSNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgotI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4
cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2lu
Y2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xCbG9jay5oIgotI2lu
Y2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEJyZWFrLmgiCi0j
aW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTENhbGxFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKLSNp
bmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRG9X
aGlsZUxvb3AuaCIKLSNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEVudW1l
cmF0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIK
LSNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKLSNpbmNsdWRl
ICJXSExTTEZsb2F0TGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgotI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1
ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTExvZ2lj
YWxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCIKLSNpbmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgi
Ci0jaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRl
ICJXSExTTFBvaW50ZXJUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVk
ZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFF1YWxp
Zmllci5oIgotI2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgotI2lu
Y2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgotI2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1h
bnRpYy5oIgotI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCi0jaW5jbHVkZSAiV0hMU0xTZW1hbnRp
Yy5oIgotI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCi0j
aW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YXRl
bWVudC5oIgotI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUg
IldITFNMU3RydWN0dXJlRWxlbWVudC5oIgotI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgot
I2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUZXJuYXJ5
RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMVHJhcC5oIgotI2luY2x1ZGUgIldITFNMVHlw
ZS5oIgotI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBl
RGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgotI2luY2x1ZGUg
IldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIK
LSNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJl
ZmVyZW5jZS5oIgotI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xB
U1QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBU1QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBU1QuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBU1QuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQWRkcmVzc1NwYWNlLmgiCisj
aW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMQmFzZVNlbWFu
dGljLmgiCisjaW5jbHVkZSAiV0hMU0xCbG9jay5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVhbkxp
dGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEJyZWFrLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdElu
U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJl
bmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRl
ICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgiCisjaW5jbHVk
ZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0
aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIK
KyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdo
LmgiCisjaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0
TGl0ZXJhbFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwu
aCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFJl
c29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5j
bHVkZSAiV0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVk
ZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5j
bHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1
cmVFbGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSAiV0hM
U0xTd2l0Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xUcmFwLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVk
ZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1
ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZh
bHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVmFy
aWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJl
c3NTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMjEgQEAgZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UgOiB1
aW50OF90IHsKICAgICBUaHJlYWQKIH07CiAKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZyB0
b1N0cmluZyhBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQoreworICAgIHN3aXRjaCAoYWRkcmVz
c1NwYWNlKSB7CisgICAgY2FzZSBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OgorICAgICAgICByZXR1
cm4gImNvbnN0YW50Il9zdHI7CisgICAgY2FzZSBBZGRyZXNzU3BhY2U6OkRldmljZToKKyAgICAg
ICAgcmV0dXJuICJkZXZpY2UiX3N0cjsKKyAgICBjYXNlIEFkZHJlc3NTcGFjZTo6VGhyZWFkZ3Jv
dXA6CisgICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAg
ICAgcmV0dXJuICJ0aHJlYWQiX3N0cjsKKyAgICB9Cit9CisKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQnVpbHRJblNlbWFudGljLmgJKHJldmlzaW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MSw2ICs4MSw0MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKICAgICB9CiAKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX3ZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNW
SW5zdGFuY2VJRDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZJbnN0YW5jZUlEIjsKKyAgICAgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZWZXJ0ZXhJ
RCI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgcmV0dXJuICJQ
U2l6ZSI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWUG9zaXRpb246CisgICAgICAgICAgICBy
ZXR1cm4gIlNWUG9zaXRpb24iOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVklzRnJvbnRGYWNl
OgorICAgICAgICAgICAgcmV0dXJuICJTVklzRnJvbnRGYWNlIjsKKyAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZTYW1wbGVJbmRleCI7
CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgICAgIHJl
dHVybiAiU1ZJbm5lckNvdmVyYWdlIjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6
CisgICAgICAgICAgICByZXR1cm4gIlNWVGFyZ2V0IjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6
U1ZEZXB0aDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZEZXB0aCI7CisgICAgICAgIGNhc2UgVmFy
aWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAgICAgICByZXR1cm4gIlNWQ292ZXJhZ2UiOworICAg
ICAgICBjYXNlIFZhcmlhYmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgICAgICByZXR1
cm4gIlNWRGlzcGF0Y2hUaHJlYWRJRCI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWR3JvdXBJ
RDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZHcm91cElEIjsKKyAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgcmV0dXJuICJTVkdyb3VwSW5kZXgiOworICAg
ICAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAgICAgICAgICByZXR1cm4g
IlNWR3JvdXBUaHJlYWRJRCI7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGlzQWNjZXB0
YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRl
ckl0ZW1EaXJlY3Rpb24sIGNvbnN0IE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYpIGNvbnN0IG92
ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnRyeVBvaW50VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmgJKHJldmlzaW9uIDI0NTUz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5
UG9pbnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDE4IEBAIGVudW0gY2xhc3Mg
RW50cnlQb2ludFR5cGUgOiB1aW50OF90IHsKICAgICAvLyBGSVhNRTogQWRkIGFuIGVudHJ5IHBv
aW50IHR5cGUgZm9yIHRlc3RpbmcKIH07CiAKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZyB0
b1N0cmluZyhFbnRyeVBvaW50VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgRW50cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJuICJ2ZXJ0ZXgiOwor
ICAgIGNhc2UgRW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICByZXR1cm4gImZyYWdt
ZW50IjsKKyAgICBjYXNlIEVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICByZXR1cm4g
ImNvbXB1dGUiOworICAgIH0KK30KKwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VT
ZW1hbnRpYy5oCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDIwIEBAIHB1YmxpYzoKICAgICBSZXNvdXJjZVNlbWFudGljKGNvbnN0IFJlc291
cmNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBSZXNvdXJjZVNlbWFudGljKFJlc291cmNlU2Vt
YW50aWMmJikgPSBkZWZhdWx0OwogCisgICAgU3RyaW5nIHRvU3RyaW5nKCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgIGNhc2UgTW9kZTo6VW5vcmRlcmVkQWNjZXNz
VmlldzoKKyAgICAgICAgICAgIHJldHVybiAiVW5vcmRlcmVkQWNjZXNzVmlldyI7CisgICAgICAg
IGNhc2UgTW9kZTo6VGV4dHVyZToKKyAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZSI7CisgICAg
ICAgIGNhc2UgTW9kZTo6QnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuICJCdWZmZXIiOworICAg
ICAgICBjYXNlIE1vZGU6OlNhbXBsZXI6CisgICAgICAgICAgICByZXR1cm4gIlNhbXBsZXIiOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
dW5zaWduZWQgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xUeXBlTmFtZXIuY3BwCShyZXZpc2lvbiAyNDU1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4MCwyMSArMzgwLDYgQEAgU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlRGVjbGFyYXRp
b25zKAogICAgIHJldHVybiBtZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlci50b1N0cmluZygpOwog
fQogCi1zdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSkKLXsKLSAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZSkgewotICAgIGNhc2UgQVNUOjpBZGRyZXNz
U3BhY2U6OkNvbnN0YW50OgotICAgICAgICByZXR1cm4gImNvbnN0YW50Il9zdHI7Ci0gICAgY2Fz
ZSBBU1Q6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOgotICAgICAgICByZXR1cm4gImRldmljZSJfc3Ry
OwotICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOgotICAgICAgICByZXR1
cm4gInRocmVhZGdyb3VwIl9zdHI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGFkZHJl
c3NTcGFjZSA9PSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKLSAgICAgICAgcmV0dXJuICJ0
aHJlYWQiX3N0cjsKLSAgICB9Ci19Ci0KIHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVE
ZWZpbml0aW9uKEJhc2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUsIEhhc2hTZXQ8QVNU
OjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9k
ZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQog
ewogICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRhaW5zKCZiYXNlVHlwZU5hbWVOb2Rl
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODMxNCw2ICs4MzE0LDcg
QEAKIAkJNTFGQjY3RDkxQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNo
ZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRl
bnNpb25TdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjY3
REExQUU2QjVFNDAwRDA2QzVBIC8qIENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25TdHlsZVNoZWV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyMTMxRTVBMUM0RjE1NjEwMDMzRjgwMiAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFT
VC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MjY3MjRGMTFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
NjcyNEYyMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QkQxQzU3RkQxRTAw
NzdDRTUzIC8qIFBsYXRmb3JtVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbGF0Zm9ybVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTk3LDYg
KzE2OTk4LDcgQEAKIAkJMUNBMEMyRjYyMUVFREFEMjAwQTExODYwIC8qIEFTVCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTIxNTg2MkMyMjkzNzdCNzAw
NTkyNUVGIC8qIFdITFNMQVNULmggKi8sCiAJCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBEIC8q
IFdITFNMQWRkcmVzc1NwYWNlLmggKi8sCiAJCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8q
IFdITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmggKi8sCiAJCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3
OTc5IC8qIFdITFNMQXJyYXlUeXBlLmggKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370374</attachid>
            <date>2019-05-21 19:37:34 -0700</date>
            <delta_ts>2019-05-21 20:18:10 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45663</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NTYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE5LTA1LTIxICBTYWFtIGJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdITFNMOiBBZGQgYW4gQVNUIGR1
bXBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgTWF4ZmllbGQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBpdCBzbyB3ZSBjYW4gZHVtcCB0aGUgV0hMU0wgcHJvZ3JhbSdzIEFTVC4K
KyAgICAgICAgVGhpcyB3aWxsIGJlY29tZSB1c2VmdWwgd2hlbiB3ZSdyZSBkZWJ1Z2dpbmcgcGFz
c2VzIHRoYXQKKyAgICAgICAgdHJhbnNmb3JtIHRoZSBBU1QuCisgICAgICAgIAorICAgICAgICBU
aGUgZHVtcGVyIG1vc3RseSBwcmludHMgaW4gYSBzdHlsZSB3aGVyZSB0aGUgZHVtcCBpcyBhbG1v
c3QKKyAgICAgICAgdmFsaWQgV0hMU0wgY29kZS4gRS5nLCB0aGlzIFdITFNMIHByb2dyYW06Cisg
ICAgICAgIGBgYAorICAgICAgICBpbnQgZm9vKGludCBhcmcpIHsKKyAgICAgICAgICAgIHJldHVy
biBhcmcgKyAxOworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgZ2V0
cyBkdW1wZWQgYXM6CisgICAgICAgIGBgYAorICAgICAgICBpbnQgZm9vKGludCBhcmcpIHsKKyAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdG9yKyhhcmcsIDEpOworICAgICAgICB9CisgICAgICAgIGBg
YAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSB3YXkgdG8gZHVtcCBi
ZXR3ZWVuIGVhY2ggcGFzcywgYWZ0ZXIKKyAgICAgICAgcGFyc2luZywgb3IgYXQgdGhlIGVuZCBv
ZiBhbGwgcGFzc2VzLiBDdXJyZW50bHksIHRoaXMgaXMgY29udHJvbGxlZAorICAgICAgICBieSBh
IHN0YXRpYyB2YXJpYWJsZS4gSSdsbCBtYWtlIHRoZXNlIHJ1bnRpbWUgY29uZmlndXJhYmxlIGlu
IGEgZm9sbG93CisgICAgICAgIHVwOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MDk3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBpcyB1c2Vk
IGZvciBsb2dnaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QVNULmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFk
ZHJlc3NTcGFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6dG9TdHJpbmcpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QnVpbHRJblNlbWFudGljOjp0b1N0cmlu
ZyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQ
b2ludFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmg6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZXNvdXJjZVNlbWFudGljOjp0b1N0cmlu
Zyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp0b1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnZpc2l0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1REdW1wZXI6OkluZGVudDo6SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1REdW1wZXI6OmJ1bXBJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnRv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkdW1wQVNUKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OmR1bXBBU1RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6ZHVtcEFT
VEFmdGVyUGFyc2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkdW1wQVNU
QmV0d2VlbkVhY2hQYXNzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmR1bXBB
U1RBdEVuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlU2hhcmVk
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAxOS0wNS0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIGZvbnQtb3B0aWNhbC1zaXppbmcgYXBwbGllcyB0aGUgd3Jvbmcg
dmFyaWF0aW9uIHZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjQ1NTM5KQorKysg
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICszMDYs
NyBAQCBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvCiAKIE1vZHVsZXMv
d2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCiBNb2R1bGVzL3dlYmdwdS9OYXZpZ2F0b3JHUFUu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMQVNURHVt
cGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBU1QuaCIKKyNp
bmNsdWRlICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sK
KyAgICBtX291dC5wcmludGxuKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dy
YW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdChw
cm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKVtpXSk7CisgICAgaWYgKHByb2dyYW0ubmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIlxuXG4i
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdChwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKClbaV0pOworICAgIGlmIChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkuc2l6ZSgpKQorICAgICAgICBtX291dC5wcmludCgiXG5cbiIpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpLnNpemUo
KTsgKytpKQorICAgICAgICB2aXNpdChwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpW2ldKTsKKyAg
ICBpZiAocHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKS5zaXplKCkpCisgICAgICAgIG1fb3V0LnBy
aW50KCJcblxuIik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uc3RydWN0
dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXQocHJvZ3JhbS5zdHJ1
Y3R1cmVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBpZiAocHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0
aW9ucygpLnNpemUoKSkKKyAgICAgICAgbV9vdXQucHJpbnQoIlxuXG4iKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIHZpc2l0KHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpW2ld
KTsKKyAgICBpZiAocHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpKQorICAg
ICAgICBtX291dC5wcmludCgiXG5cbiIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXQo
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKClbaV0pOworCisgICAgbV9vdXQucHJpbnRsbigp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCit7CisgICAgQmFzZTo6dmlzaXQodW5uYW1lZFR5cGUpOworfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBCYXNlOjp2aXNpdChu
YW1lZFR5cGUpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlv
biYgdHlwZURlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQoInR5cGVkZWYgIiwgdHlwZURl
ZmluaXRpb24ubmFtZSgpLCAiID0gIik7CisgICAgdmlzaXQodHlwZURlZmluaXRpb24udHlwZSgp
KTsKKyAgICBtX291dC5wcmludGxuKCI7Iik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgbV9v
dXQucHJpbnRsbihtX2luZGVudCwgInN0cnVjdCAiLCBzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUo
KSwgIiB7Iik7CisgICAgeworICAgICAgICBhdXRvIGluZGVudCA9IGJ1bXBJbmRlbnQoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5z
dHJ1Y3R1cmVFbGVtZW50cygpKQorICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7
CisgICAgfQorICAgIG1fb3V0LnByaW50bG4obV9pbmRlbnQsICJ9Iik7CisgICAgbV9vdXQucHJp
bnRsbigpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50
JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIG1fb3V0LnByaW50KG1faW5kZW50KTsKKyAgICB2
aXNpdChzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMo
KSkKKyAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7CisgICAgbV9v
dXQucHJpbnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICAvLyBGSVhNRTog
VGVzdCB0aGlzIG9uY2Ugd2UgcGFyc2UgZW51bXM6CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA4NworCisgICAgbV9vdXQucHJpbnRsbihtX2luZGVu
dCwgImVudW0gIik7CisgICAgdmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgbV9vdXQucHJpbnQoIiB7Iik7CisKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVt
cEluZGVudCgpOworICAgICAgICBib29sIG9uY2UgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRv
JiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1l
bWJlcnMoKSkgeworICAgICAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICAgICAgbV9vdXQu
cHJpbnQoIiwgIik7CisgICAgICAgICAgICBtX291dC5wcmludGxuKCk7CisgICAgICAgICAgICBt
X291dC5wcmludChtX2luZGVudCk7CisgICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJl
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX291dC5wcmludGxuKCk7CisgICAgbV9vdXQu
cHJpbnRsbihtX2luZGVudCwgIn0iKTsKKyAgICBtX291dC5wcmludGxuKCk7Cit9CisKK3ZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJl
cikKK3sKKyAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCkpOworICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKSB7CisgICAgICAgIG1fb3V0LnByaW50KCIgPSAi
KTsKKyAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOworICAgIH0KK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgbV9vdXQucHJpbnQobV9pbmRlbnQpOworICAgIHZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikp
OworICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICBtX291dC5wcmlu
dCgiXG5cbiIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIG1fb3V0LnBy
aW50KG1faW5kZW50KTsKKyAgICBtX291dC5wcmludCgibmF0aXZlICIpOworICAgIHZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKTsKKyAgICBtX291dC5wcmludGxuKCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAg
dmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKKyAgICBpZiAoZnVu
Y3Rpb25EZWNsYXJhdGlvbi5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICBtX291dC5wcmludChB
U1Q6OnRvU3RyaW5nKCpmdW5jdGlvbkRlY2xhcmF0aW9uLmVudHJ5UG9pbnRUeXBlKCkpLCAiICIp
OworICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBtX291dC5wcmlu
dCgiICIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIpOworICAgIGJvb2wgb25jZSA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICBtX291dC5wcmlu
dCgiLCAiKTsKKyAgICAgICAgb25jZSA9IHRydWU7CisgICAgICAgIHZpc2l0KHBhcmFtZXRlcik7
CisgICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7CisgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRp
b24uc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50
aWMoKSk7CisgICAgbV9vdXQucHJpbnQoIiAiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7Cisg
ICAgbV9vdXQucHJpbnQobV9pbmRlbnQsICJuYXRpdmUgdHlwZWRlZiAiKTsKKyAgICBtX291dC5w
cmludChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQo
IjwiKTsKKyAgICAgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdHlw
ZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkgeworICAg
ICAgICAgICAgaWYgKG9uY2UpCisgICAgICAgICAgICAgICAgbV9vdXQucHJpbnQoIiwgIik7Cisg
ICAgICAgICAgICBvbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9vdXQucHJpbnQoIj4iKTsKKyAgICB9CisgICAgbV9vdXQu
cHJpbnRsbigiOyIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJl
bmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIG1fb3V0LnByaW50KHR5cGVSZWZlcmVuY2UubmFt
ZSgpKTsKKworICAgIGlmICh0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkpIHsK
KyAgICAgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgICAgIG1fb3V0LnByaW50KCI8Iik7Cisg
ICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1l
bnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChvbmNlKQorICAgICAgICAgICAgICAgIG1fb3V0LnBy
aW50KCIsICIpOworICAgICAgICAgICAgb25jZSA9IHRydWU7CisgICAgICAgICAgICB2aXNpdCh0
eXBlQXJndW1lbnQpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnByaW50KCI+Iik7CisgICAg
fQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5
cGUpCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRl
clR5cGUpKTsKKyAgICBtX291dC5wcmludCgiKiIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICB2
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUp
KTsKKyAgICBtX291dC5wcmludCgiW10iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgdmlzaXQoYXJyYXlUeXBlLnR5cGUoKSk7
CisgICAgbV9vdXQucHJpbnQoIlsiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIl0iKTsKK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQp
Cit7CisgICAgQmFzZTo6dmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAgICBtX291dC5w
cmludChBU1Q6OnRvU3RyaW5nKHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAiICIpOwor
ICAgIHZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9CisKK3ZvaWQgQVNURHVt
cGVyOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBtX291dC5wcmludCgi
IDogIik7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKSB7CisgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRp
Yyk7CisgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykg
eworICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
YykgeworICAgICAgICB2aXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOworICAg
IH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKSB7Cisg
ICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7CisgICAgfSksIHNlbWFudGljKTsKK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFu
dEV4cHJlc3Npb24pCit7CisgICAgQmFzZTo6dmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKK30K
Kwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJs
b2NrKQoreworICAgIGlmIChhdHRyaWJ1dGVCbG9jay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fb3V0LnByaW50KCJbIik7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJp
YnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7
CisgICAgbV9vdXQucHJpbnQoIl0gIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQoreworICAgIG1fb3V0LnByaW50KGJ1
aWx0SW5TZW1hbnRpYy50b1N0cmluZygpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykKK3sKKyAgICBtX291dC5wcmlu
dChyZXNvdXJjZVNlbWFudGljLnRvU3RyaW5nKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlz
aXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworICAgIC8vIEZJWE1F
OiBIYW5kbGUgdGhpcyB3aGVuIHdlIGltcGxlbWVudCBpdC4KK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpCit7Cisg
ICAgbV9vdXQucHJpbnQoImF0dHJpYnV0ZSgiLCBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSwg
IikiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KGludGVnZXJMaXRlcmFsLnZhbHVlKCkp
OworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
JiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwudmFsdWUoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkZs
b2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KGZsb2F0TGl0ZXJh
bC52YWx1ZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWwm
IG51bGxMaXRlcmFsKQoreworICAgIG1fb3V0LnByaW50KCJudWxsIik7CisgICAgdmlzaXQobnVs
bExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6Qm9vbGVh
bkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQoreworICAgIGlmIChib29sZWFuTGl0ZXJhbC52YWx1
ZSgpKQorICAgICAgICBtX291dC5wcmludCgidHJ1ZSIpOworICAgIGVsc2UKKyAgICAgICAgbV9v
dXQucHJpbnQoImZhbHNlIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlJikKK3sKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6RmxvYXRMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
Ok51bGxMaXRlcmFsVHlwZSYpCit7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIHdo
ZW4gd2UgY2FuIHBhcnNlIGVudW1zOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgwODcKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVu
Y3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQoreworICAgIFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgeworICAgICAgICB2aXNpdChudW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFk
c0F0dHJpYnV0ZSkKK3sKKyAgICBtX291dC5wcmludCgibnVtdGhyZWFkcygiLCBudW1UaHJlYWRz
QXR0cmlidXRlLndpZHRoKCksICIsICIsIG51bVRocmVhZHNBdHRyaWJ1dGUuaGVpZ2h0KCksICIs
ICIsIG51bVRocmVhZHNBdHRyaWJ1dGUuZGVwdGgoKSwgIikiKTsKK30KKwordm9pZCBBU1REdW1w
ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIG1fb3V0LnByaW50bG4oInsiKTsK
KyAgICB7CisgICAgICAgIGF1dG8gaW5kZW50ID0gYnVtcEluZGVudCgpOworICAgICAgICBmb3Ig
KGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkgeworICAgICAgICAgICAgbV9v
dXQucHJpbnQobV9pbmRlbnQpOworICAgICAgICAgICAgdmlzaXQoc3RhdGVtZW50KTsKKyAgICAg
ICAgICAgIG1fb3V0LnByaW50bG4oIjsiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX291dC5w
cmludChtX2luZGVudCwgIn0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6U3Rh
dGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgQmFzZTo6dmlzaXQoc3RhdGVtZW50KTsKK30KKwor
dm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworICAgIG1fb3V0LnByaW50KCJi
cmVhayIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpDb250aW51ZSYpCit7Cisg
ICAgbV9vdXQucHJpbnQoImNvbnRpbnVlIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChB
U1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIG1fb3V0LnByaW50KCJ3aGlsZSAoIik7
CisgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIG1fb3V0LnByaW50KCIp
Iik7CisgICAgdmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBtX291dC5wcmludCgi
ZG8gIik7CisgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICBtX291dC5wcmludCgi
IHdoaWxlKCIpOworICAgIHZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIG1f
b3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkZvckxvb3Am
IGZvckxvb3ApCit7CisgICAgbV9vdXQucHJpbnQoImZvciAoIik7CisgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgeworICAgICAgICB2aXNpdCh2YXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOworICAgIH0pLCBm
b3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIG1fb3V0LnByaW50KCI7ICIpOworICAgIGlm
IChmb3JMb29wLmNvbmRpdGlvbigpKQorICAgICAgICB2aXNpdCgqZm9yTG9vcC5jb25kaXRpb24o
KSk7CisgICAgbV9vdXQucHJpbnQoIjsgIik7CisgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkp
CisgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICBtX291dC5wcmludCgi
KSAiKTsKKyAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgQmFzZTo6dmlzaXQoZXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mPihkb3RFeHByZXNzaW9uKSk7CisgICAgbV9vdXQucHJpbnQoIi4iLCBk
b3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24pKTsK
KyAgICBtX291dC5wcmludCgiWyIpOworICAgIHZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4
cHJlc3Npb24oKSk7CisgICAgbV9vdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAg
IEJhc2U6OnZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNU
OjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50KQoreworICAgIEJhc2U6OnZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpOwor
fQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7CisgICAgbV9v
dXQucHJpbnQoImZhbGx0aHJvdWdoIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmludCgiaWYgKCIpOwor
ICAgIHZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIG1fb3V0LnByaW50KCIp
ICIpOworICAgIHZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50
LmVsc2VCb2R5KCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQoIiBlbHNlICIpOworICAgICAgICB2
aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBl
cjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmlu
dCgicmV0dXJuIik7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7CisgICAgICAg
IG1fb3V0LnByaW50KCIgIik7CisgICAgICAgIHZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUo
KSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpUcmFwJikKK3sKKyAg
ICBtX291dC5wcmludCgidHJhcCIpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpT
d2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBtX291dC5wcmludCgic3dp
dGNoICgiKTsKKyAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgbV9vdXQu
cHJpbnRsbigiKSB7Iik7CisgICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBz
d2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgaWYg
KG9uY2UpCisgICAgICAgICAgICBtX291dC5wcmludGxuKCk7CisgICAgICAgIG9uY2UgPSB0cnVl
OworICAgICAgICBtX291dC5wcmludChtX2luZGVudCk7CisgICAgICAgIHZpc2l0KHN3aXRjaENh
c2UpOworICAgIH0KKyAgICBtX291dC5wcmludCgiXG4iLCBtX2luZGVudCwgIn0iKTsKKworfQor
Cit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQorewor
ICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpIHsKKyAgICAgICAgbV9vdXQucHJpbnQoImNhc2Ug
Iik7CisgICAgICAgIHZpc2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOworICAgICAgICBtX291dC5w
cmludCgiOiAiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9vdXQucHJpbnQoImRlZmF1bHQ6ICIp
OworICAgIHZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2
aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCkKK3sKKyAgICBCYXNlOjp2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpKSB7CisgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7
CisgICAgICAgIG1fb3V0LnByaW50KCIgIik7CisgICAgfQorICAgIG1fb3V0LnByaW50KHZhcmlh
YmxlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKQorICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsK
KyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CisgICAgICAgIG1f
b3V0LnByaW50KCIgPSAiKTsKKyAgICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5p
dGlhbGl6ZXIoKSk7CisgICAgfQorfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoYXNz
aWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBtX291dC5wcmludCgiID0gIik7CisgICAg
dmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBtX291
dC5wcmludChjYWxsRXhwcmVzc2lvbi5uYW1lKCksICIoIik7CisgICAgYm9vbCBvbmNlID0gZmFs
c2U7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygp
KSB7CisgICAgICAgIGlmIChvbmNlKQorICAgICAgICAgICAgbV9vdXQucHJpbnQoIiwgIik7Cisg
ICAgICAgIG9uY2UgPSB0cnVlOworICAgICAgICB2aXNpdChhcmd1bWVudCk7CisgICAgfQorICAg
IG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkNvbW1h
RXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIG1fb3V0LnByaW50KCIoIik7Cisg
ICAgYm9vbCBvbmNlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFF
eHByZXNzaW9uLmxpc3QoKSkgeworICAgICAgICBpZiAob25jZSkKKyAgICAgICAgICAgIG1fb3V0
LnByaW50KCIsICIpOworICAgICAgICBvbmNlID0gdHJ1ZTsKKyAgICAgICAgdmlzaXQoZXhwcmVz
c2lvbik7CisgICAgfQorICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNURHVtcGVy
Ojp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9u
KQoreworICAgIG1fb3V0LnByaW50KCIqIik7CisgICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNz
aW9uLnBvaW50ZXIoKSk7Cit9CisKK3ZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxF
eHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBtX291dC5wcmludCgiKCIpOwor
ICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgc3dpdGNoIChsb2dpY2Fs
RXhwcmVzc2lvbi50eXBlKCkpIHsKKyAgICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5
cGU6OkFuZDoKKyAgICAgICAgbV9vdXQucHJpbnQoIiAmJiAiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpPcjoKKyAgICAgICAgbV9vdXQu
cHJpbnQoIiB8fCAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHZpc2l0KGxvZ2ljYWxF
eHByZXNzaW9uLnJpZ2h0KCkpOworICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVz
c2lvbikKK3sKKyAgICBtX291dC5wcmludCgiISgiKTsKKyAgICB2aXNpdChsb2dpY2FsTm90RXhw
cmVzc2lvbi5vcGVyYW5kKCkpOworICAgIG1fb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgQVNU
RHVtcGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgbV9vdXQucHJpbnQoIkAiKTsKKyAgICB2aXNp
dChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9pZCBBU1RE
dW1wZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJl
c3Npb24pCit7CisgICAgbV9vdXQucHJpbnQoIiYiKTsKKyAgICB2aXNpdChtYWtlUG9pbnRlckV4
cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAg
IGF1dG8gb2xkVmFyaWFibGUgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhcmlhYmxl
UmVmZXJlbmNlKCk7CisgICAgYXV0byBuZXdWYXJpYWJsZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsKKworICAgIG1fb3V0LnByaW50KCIoIik7Cisg
ICAgdmlzaXQob2xkVmFyaWFibGUuZ2V0KCkpOworICAgIG1fb3V0LnByaW50KCIgPSAiKTsKKyAg
ICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBtX291dC5w
cmludCgiLCAiKTsKKworICAgIHZpc2l0KG5ld1ZhcmlhYmxlLmdldCgpKTsKKyAgICBtX291dC5w
cmludCgiID0gIik7CisgICAgdmlzaXQoKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFs
dWVFeHByZXNzaW9uKCkpOworICAgIG1fb3V0LnByaW50KCIsICIpOworCisgICAgdmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgbV9vdXQucHJpbnQoIiA9ICIp
OworICAgIHZpc2l0KG5ld1ZhcmlhYmxlLmdldCgpKTsKKyAgICBtX291dC5wcmludCgiLCAiKTsK
KworICAgIHZpc2l0KCpyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24o
KSk7CisgICAgbV9vdXQucHJpbnQoIikiKTsKK30KKwordm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIHZpc2l0KHRl
cm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICBtX291dC5wcmludCgiID8gIik7Cisg
ICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgbV9vdXQu
cHJpbnQoIiA6ICIpOworICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9u
KCkpOworfQorCit2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYg
dmFyaWFibGVSZWZlcmVuY2UpCit7CisgICAgaWYgKHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKS5p
c0VtcHR5KCkpCisgICAgICAgIG1fb3V0LnByaW50KCIkKCIsIFJhd1BvaW50ZXIodmFyaWFibGVS
ZWZlcmVuY2UudmFyaWFibGUoKSksICIpIik7CisgICAgZWxzZQorICAgICAgICBtX291dC5wcmlu
dCh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXSExTTAor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVt
cGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3Bl
Lmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgQVNURHVtcGVyIDogVmlzaXRvciB7
CisgICAgdXNpbmcgQmFzZSA9IFZpc2l0b3I7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdChQcm9n
cmFtJikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX291dC50
b1N0cmluZygpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OlVubmFtZWRUeXBl
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hbWVkVHlwZSYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
VHlwZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlw
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpU
eXBlQXJndW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlw
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QnVpbHRJblNlbWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlJl
c291cmNlU2VtYW50aWMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0
YWdlSW5PdXRTZW1hbnRpYyYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2Vy
TGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpO
dWxsTGl0ZXJhbFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
QXR0cmlidXRlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29u
dGludWUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpGYWxsdGhyb3VnaCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpTd2l0Y2hDYXNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRl
bWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUcmFwJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1h
RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Np
b24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpIG92ZXJy
aWRlOworCisgICAgc3RydWN0IEluZGVudCB7CisgICAgICAgIEluZGVudChBU1REdW1wZXImIGR1
bXBlcikKKyAgICAgICAgICAgIDogbV9zY29wZShkdW1wZXIubV9pbmRlbnQsIGR1bXBlci5tX2lu
ZGVudCArICIgICAiKQorICAgICAgICB7IH0KKyAgICAgICAgU2V0Rm9yU2NvcGU8U3RyaW5nPiBt
X3Njb3BlOworICAgIH07CisKKyAgICBJbmRlbnQgYnVtcEluZGVudCgpIHsgcmV0dXJuIEluZGVu
dCgqdGhpcyk7IH0KKworICAgIGZyaWVuZCBzdHJ1Y3QgSW5kZW50OworCisgICAgU3RyaW5nUHJp
bnRTdHJlYW0gbV9vdXQ7CisgICAgU3RyaW5nIG1faW5kZW50OworfTsKKworc3RhdGljIEFMV0FZ
U19JTkxJTkUgU3RyaW5nIHRvU3RyaW5nKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQVNURHVt
cGVyIGR1bXBlcjsKKyAgICBkdW1wZXIudmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuIGR1bXBl
ci50b1N0cmluZygpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGR1bXBBU1QoUHJv
Z3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBkYXRhTG9nTG4odG9TdHJpbmcocHJvZ3JhbSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR1BVKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcmVwYXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDU1MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5j
bHVkZSAiV0hMU0xBU1REdW1wZXIuaCIKICNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5j
dGlvblN0YWdlQ2hlY2tlci5oIgpAQCAtNTIsNiArNTMsNDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEJl
Zm9yZUVhY2hQYXNzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFmdGVy
UGFyc2luZyA9IGZhbHNlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9IGZh
bHNlOworCitzdGF0aWMgYm9vbCBkdW1wQVNUSWZOZWVkZWQoYm9vbCBzaG91bGREdW1wLCBQcm9n
cmFtJiBwcm9ncmFtLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGlmIChzaG91bGREdW1w
KSB7CisgICAgICAgIGRhdGFMb2dMbihtZXNzYWdlKTsKKyAgICAgICAgZHVtcEFTVChwcm9ncmFt
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJzaW5nSWZOZWVkZWQoUHJvZ3JhbSYgcHJvZ3Jh
bSkKK3sKKyAgICByZXR1cm4gZHVtcEFTVElmTmVlZGVkKGR1bXBBU1RBZnRlclBhcnNpbmcsIHBy
b2dyYW0sICJBU1QgYWZ0ZXIgcGFyc2luZyIpOworfQorCitzdGF0aWMgYm9vbCBkdW1wQVNUQmV0
d2VlbkVhY2hQYXNzSWZOZWVkZWQoUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKK3sKKyAgICByZXR1cm4gZHVtcEFTVElmTmVlZGVkKGR1bXBBU1RCZWZvcmVFYWNoUGFzcywg
cHJvZ3JhbSwgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBib29sIGR1bXBBU1RBdEVuZElmTmVlZGVk
KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgcmV0dXJuIGR1bXBBU1RJZk5lZWRlZChkdW1wQVNU
QXRFbmQsIHByb2dyYW0sICJBU1QgYXQgZW5kIik7Cit9CisKKyNkZWZpbmUgUlVOX1BBU1MocGFz
cywgLi4uKSBcCisgICAgZG8geyBcCisgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5l
ZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9yZSAiICMgcGFzcyk7IFwKKyAgICAgICAgaWYgKCFwYXNz
KF9fVkFfQVJHU19fKSkgXAorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsgXAorICAg
IH0gd2hpbGUgKDApCisgICAgCisKIHN0YXRpYyBPcHRpb25hbDxQcm9ncmFtPiBwcmVwYXJlU2hh
cmVkKFN0cmluZyYgd2hsc2xTb3VyY2UpCiB7CiAgICAgUHJvZ3JhbSBwcm9ncmFtOwpAQCAtNjEs
MzUgKzEwMCwzMSBAQCBzdGF0aWMgT3B0aW9uYWw8UHJvZ3JhbT4gcHJlcGFyZVNoYXJlZChTCiAg
ICAgQVNTRVJUX1VOVVNFRChmYWlsdXJlLCAhZmFpbHVyZSk7CiAgICAgaWYgKHBhcnNlci5wYXJz
ZShwcm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2VyOjpNb2RlOjpVc2VyKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZHVtcEFTVEJldHdlZW5FYWNoUGFzc0lmTmVl
ZGVkKHByb2dyYW0sICJBU1QgYWZ0ZXIgcGFyc2luZyIpKQorICAgICAgICBkdW1wQVNUQWZ0ZXJQ
YXJzaW5nSWZOZWVkZWQocHJvZ3JhbSk7CisKICAgICBOYW1lUmVzb2x2ZXIgbmFtZVJlc29sdmVy
KHByb2dyYW0ubmFtZUNvbnRleHQoKSk7Ci0gICAgaWYgKCFyZXNvbHZlTmFtZXNJblR5cGVzKHBy
b2dyYW0sIG5hbWVSZXNvbHZlcikpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
aWYgKCFjaGVja1JlY3Vyc2l2ZVR5cGVzKHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIGlmICghc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhwcm9ncmFtKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIXN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucyhwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBpZiAoIXN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhwcm9n
cmFtKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIXJlc29sdmVOYW1l
c0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcikpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgaWYgKCFjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhwcm9ncmFtKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBSVU5fUEFTUyhyZXNvbHZlTmFtZXNJblR5
cGVzLCBwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIFJVTl9QQVNTKGNoZWNrUmVjdXJzaXZl
VHlwZXMsIHByb2dyYW0pOworICAgIFJVTl9QQVNTKHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMsIHByb2dyYW0pOworICAgIFJVTl9QQVNTKHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cywgcHJvZ3JhbSk7CisgICAgUlVOX1BBU1Moc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgs
IHByb2dyYW0pOworICAgIFJVTl9QQVNTKHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMsIHByb2dyYW0p
OworICAgIFJVTl9QQVNTKHJlc29sdmVOYW1lc0luRnVuY3Rpb25zLCBwcm9ncmFtLCBuYW1lUmVz
b2x2ZXIpOworICAgIFJVTl9QQVNTKGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zLCBwcm9ncmFtKTsK
KworICAgIFJVTl9QQVNTKGNoZWNrLCBwcm9ncmFtKTsKIAotICAgIGlmICghY2hlY2socHJvZ3Jh
bSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMo
cHJvZ3JhbSk7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTU3ODggUmVzb2x2ZSBwcm9wZXJ0aWVzIGhlcmUKICAgICBmaW5kSGlnaFpvbWJp
ZXMocHJvZ3JhbSk7Ci0gICAgaWYgKCFjaGVja1N0YXRlbWVudEJlaGF2aW9yKHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY2hlY2tSZWN1cnNpb24ocHJv
Z3JhbSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjaGVja0Z1bmN0
aW9uU3RhZ2VzKHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIFJV
Tl9QQVNTKGNoZWNrU3RhdGVtZW50QmVoYXZpb3IsIHByb2dyYW0pOworICAgIFJVTl9QQVNTKGNo
ZWNrUmVjdXJzaW9uLCBwcm9ncmFtKTsKKyAgICBSVU5fUEFTUyhjaGVja0Z1bmN0aW9uU3RhZ2Vz
LCBwcm9ncmFtKTsKKworICAgIGR1bXBBU1RBdEVuZElmTmVlZGVkKHByb2dyYW0pOworCiAgICAg
cmV0dXJuIHByb2dyYW07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkocmV2aXNpb24gMjQ1NTM5KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNzMgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNp
bmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgotI2luY2x1ZGUgIldITFNMQXJyYXlU
eXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50
aWMuaCIKLSNpbmNsdWRlICJXSExTTEJsb2NrLmgiCi0jaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0
ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKLSNpbmNsdWRlICJXSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTENvbW1hRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9u
LmgiCi0jaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1ZGUgIldITFNMRGVyZWZlcmVu
Y2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgotI2luY2x1ZGUg
IldITFNMRG90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgotI2luY2x1ZGUgIldITFNMRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5j
bHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgotI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgi
Ci0jaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCi0jaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJp
YnV0ZS5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5o
IgotI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJbnRl
Z2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKLSNpbmNs
dWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNp
bmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTE51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIK
LSNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCi0jaW5jbHVkZSAiV0hM
U0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VU
eXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hM
U0xSZXR1cm4uaCIKLSNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YWdlSW5P
dXRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50
LmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hT
dGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xUcmFwLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xU
eXBlQXJndW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAi
V0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEFTVC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFTVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEFTVC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFTVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiV0hMU0xBZGRyZXNzU3BhY2UuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0
cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExT
TEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldI
TFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUg
IldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xD
b250aW51ZS5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgorI2luY2x1
ZGUgIldITFNMRW50cnlQb2ludFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRl
ICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNpbmNsdWRlICJXSExTTEZs
b2F0TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIK
KyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1
bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNs
dWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVy
YWwuaCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMTG9naWNhbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5h
bWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xO
b2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTnVs
bExpdGVyYWxUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgorI2lu
Y2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgor
I2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNpYWxpemF0aW9u
Q29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgi
CisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURl
ZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgor
I2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFRyYXAu
aCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5o
IgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlICJXSExT
TFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1Nw
YWNlLmgJKHJldmlzaW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
MiwyMSBAQCBlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZSA6IHVpbnQ4X3QgewogICAgIFRocmVhZAog
fTsKIAorc3RhdGljIEFMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5nKEFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpCit7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2UpIHsKKyAgICBjYXNlIEFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiAiY29uc3RhbnQiX3N0cjsKKyAg
ICBjYXNlIEFkZHJlc3NTcGFjZTo6RGV2aWNlOgorICAgICAgICByZXR1cm4gImRldmljZSJfc3Ry
OworICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKKyAgICAgICAgcmV0dXJuICJ0
aHJlYWRncm91cCJfc3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChhZGRyZXNzU3Bh
Y2UgPT0gQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICByZXR1cm4gInRocmVhZCJfc3Ry
OworICAgIH0KK30KKwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAko
cmV2aXNpb24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDQw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAor
ICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdmFy
aWFibGUpIHsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZJbnN0YW5jZUlEOgorICAgICAgICAg
ICAgcmV0dXJuICJTVkluc3RhbmNlSUQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlZlcnRl
eElEOgorICAgICAgICAgICAgcmV0dXJuICJTVlZlcnRleElEIjsKKyAgICAgICAgY2FzZSBWYXJp
YWJsZTo6UFNpemU6CisgICAgICAgICAgICByZXR1cm4gIlBTaXplIjsKKyAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiU1ZQb3NpdGlvbiI7Cisg
ICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgICAgICByZXR1cm4g
IlNWSXNGcm9udEZhY2UiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlNhbXBsZUluZGV4Ogor
ICAgICAgICAgICAgcmV0dXJuICJTVlNhbXBsZUluZGV4IjsKKyAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZJbm5lckNvdmVyYWdlOgorICAgICAgICAgICAgcmV0dXJuICJTVklubmVyQ292ZXJhZ2Ui
OworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlRhcmdldDoKKyAgICAgICAgICAgIHJldHVybiAi
U1ZUYXJnZXQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAg
cmV0dXJuICJTVkRlcHRoIjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKKyAg
ICAgICAgICAgIHJldHVybiAiU1ZDb3ZlcmFnZSI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNW
RGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZEaXNwYXRjaFRocmVhZElE
IjsKKyAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgcmV0dXJu
ICJTVkdyb3VwSUQiOworICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSW5kZXg6CisgICAg
ICAgICAgICByZXR1cm4gIlNWR3JvdXBJbmRleCI7CisgICAgICAgIGNhc2UgVmFyaWFibGU6OlNW
R3JvdXBUaHJlYWRJRDoKKyAgICAgICAgICAgIHJldHVybiAiU1ZHcm91cFRocmVhZElEIjsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShjb25zdCBVbm5hbWVk
VHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3Qg
T3B0aW9uYWw8RW50cnlQb2ludFR5cGU+JikgY29uc3Qgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW50cnlQb2ludFR5cGUuaAkocmV2aXNpb24gMjQ1NTM5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsMTggQEAgZW51bSBjbGFzcyBFbnRyeVBvaW50VHlwZSA6IHVpbnQ4
X3QgewogICAgIC8vIEZJWE1FOiBBZGQgYW4gZW50cnkgcG9pbnQgdHlwZSBmb3IgdGVzdGluZwog
fTsKIAorc3RhdGljIEFMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5nKEVudHJ5UG9pbnRUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFbnRyeVBvaW50VHlwZTo6
VmVydGV4OgorICAgICAgICByZXR1cm4gInZlcnRleCI7CisgICAgY2FzZSBFbnRyeVBvaW50VHlw
ZTo6RnJhZ21lbnQ6CisgICAgICAgIHJldHVybiAiZnJhZ21lbnQiOworICAgIGNhc2UgRW50cnlQ
b2ludFR5cGU6OkNvbXB1dGU6CisgICAgICAgIHJldHVybiAiY29tcHV0ZSI7CisgICAgfQorfQor
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFJlc291cmNlU2VtYW50aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgJKHJldmlzaW9uIDI0
NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
c291cmNlU2VtYW50aWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMjAgQEAgcHVibGlj
OgogICAgIFJlc291cmNlU2VtYW50aWMoY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYpID0gZGVsZXRl
OwogICAgIFJlc291cmNlU2VtYW50aWMoUmVzb3VyY2VTZW1hbnRpYyYmKSA9IGRlZmF1bHQ7CiAK
KyAgICBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsK
KyAgICAgICAgY2FzZSBNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OgorICAgICAgICAgICAgcmV0
dXJuICJVbm9yZGVyZWRBY2Nlc3NWaWV3IjsKKyAgICAgICAgY2FzZSBNb2RlOjpUZXh0dXJlOgor
ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlIjsKKyAgICAgICAgY2FzZSBNb2RlOjpCdWZmZXI6
CisgICAgICAgICAgICByZXR1cm4gIkJ1ZmZlciI7CisgICAgICAgIGNhc2UgTW9kZTo6U2FtcGxl
cjoKKyAgICAgICAgICAgIHJldHVybiAiU2FtcGxlciI7CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICB1bnNpZ25lZCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICB1bnNpZ25lZCBzcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BhY2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlz
aW9uIDI0NTUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDIxICszODAsNiBAQCBT
dHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVEZWNsYXJhdGlvbnMoCiAgICAgcmV0dXJuIG1ldGFs
VHlwZURlY2xhcmF0aW9uV3JpdGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdG9T
dHJpbmcoQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQotewotICAgIHN3aXRjaCAoYWRk
cmVzc1NwYWNlKSB7Ci0gICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6Ci0gICAg
ICAgIHJldHVybiAiY29uc3RhbnQiX3N0cjsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpE
ZXZpY2U6Ci0gICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7Ci0gICAgY2FzZSBBU1Q6OkFkZHJl
c3NTcGFjZTo6VGhyZWFkZ3JvdXA6Ci0gICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQpOwotICAgICAgICByZXR1cm4gInRocmVhZCJfc3RyOwotICAgIH0KLX0K
LQogdm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oQmFzZVR5cGVOYW1l
Tm9kZSYgYmFzZVR5cGVOYW1lTm9kZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVk
TmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlw
ZXMsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgaWYgKGVtaXR0ZWRVbm5h
bWVkVHlwZXMuY29udGFpbnMoJmJhc2VUeXBlTmFtZU5vZGUpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQ1
NTM5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC04MzE0LDYgKzgzMTQsNyBAQAogCQk1MUZCNjdEOTFBRTZCNUU0
MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEQTFBRTZCNUU0MDBEMDZDNUEgLyog
Q29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTIxMzFFNUExQzRGMTU2MTAwMzNGODAyIC8qIFZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTIxNTg2MkMyMjkzNzdCNzAwNTkyNUVGIC8qIFdITFNMQVNULmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMQVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjcyNEYxMUNCMkZERjYw
MDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzI0RjIxQ0IyRkRGNjAwNzU5NzRE
IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5OTcsNiArMTY5OTgsNyBAQAogCQkxQ0EwQzJG
NjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk1MjE1ODYyQzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAq
LywKIAkJCQkxQzg0MEI5MDIxRUMzMEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAq
LywKIAkJCQlDMjFCRjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5
cGUuaCAqLywKIAkJCQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUu
aCAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>