{
  "Name": "NoiseDistort",
  "_id": "fb339d7f-305a-4821-a9ed-cfa077d086c6",
  "Namespace": "lib.3d.modify",
  "Description": "GPU-based noise deformer derived from Scatter. It transforms vertices randomly.\r\n\r\nNeeds a RGBANoise as 2nd input\r\n\r\n[NoiseDistort____________]\r\n[BackMesh]  [SetResolution]\r\n[Transform]  [RGBANoise]\r\n[Rectangle]\r\n\r\n\t",
  "Inputs": [
    {
      "Name": "Code",
      "MetaInstanceID": "08544103-d5cb-437c-949f-f945ac0ce587",
      "DefaultValue": {
        "Type": "Text",
        "Value": [
          "//>>> _parameters\r",
          "float Normalize;",
          "float3 Center;",
          "float NoiseAmount;",
          "float NoiseScale;",
          "Texture2D NoiseTexture;",
          "float3 NoiseAmountXYZ;",
          "//<<< _parameters\r",
          "\r",
          "struct Vertex\r",
          "{\r",
          "    float4 pos : POSITION;\r",
          "    float3 normal : NORMAL;\r",
          "    float4 col : COLOR;\r",
          "    float2 texCoord : TEXCOORD0;\r",
          "    float3 tangent : TANGENT0;\r",
          "    float3 binormal : BINORMAL0;\r",
          "};\r",
          "\r",
          "SamplerState samLinear\r",
          "{\r",
          "    Filter = MIN_MAG_MIP_LINEAR;\r",
          "    AddressU = Wrap;\r",
          "    AddressV = Wrap;\r",
          "};\r",
          "\r",
          "\r",
          "\r",
          "float Lerp(float a, float b, float t)\r",
          "{\r",
          "    return a + t*(b - a);\r",
          "}\r",
          "\r",
          "\r",
          "\r",
          "\r",
          "\r",
          "Vertex VertexMain(Vertex input)\r",
          "{\r",
          "    return input;\r",
          "}\r",
          "\r",
          "float _noiseTime=0;\r",
          "float _frequency=0;\r",
          "\r",
          "\r",
          "float3 offsetAtPoint( float3 p) \r",
          "{\r",
          "        float3 samplePos = p + Center;\r",
          "        float3 offset1 = (NoiseTexture.SampleLevel(samLinear, samplePos.xy / NoiseScale / 1000, 0).xyz - float3(0.5, 0.5, 0.5)) * NoiseAmount;\r",
          "        float3 offset2 = (NoiseTexture.SampleLevel(samLinear, (samplePos.yz + float2(0.23,0.21))  / NoiseScale / 1000, 0).xyz - float3(0.5, 0.5, 0.5)) * NoiseAmount;\r",
          "        return offset1+offset2;\r",
          "}\r",
          "\r",
          "\r",
          "[maxvertexcount(3)]\r",
          "void GeometryMain(triangle Vertex input[3], inout TriangleStream<Vertex> outputStream)\r",
          "{\r",
          "    \r",
          "    Vertex vertex0 = input[0];\r",
          "    vertex0.normal.xyz += offsetAtPoint ( vertex0.pos.xyz+ vertex0.normal.xyz);\r",
          "    vertex0.pos.xyz += offsetAtPoint( vertex0.pos) * NoiseAmountXYZ;\r",
          "\r",
          "    Vertex vertex1 = input[1];\r",
          "    vertex1.normal.xyz += offsetAtPoint ( vertex1.pos.xyz+ vertex1.normal.xyz);\r",
          "    vertex1.pos.xyz += offsetAtPoint( vertex1.pos) * NoiseAmountXYZ;\r",
          "\r",
          "    Vertex vertex2 = input[2];\r",
          "    vertex2.normal.xyz += offsetAtPoint ( vertex2.pos.xyz+ vertex2.normal.xyz);\r",
          "    vertex2.pos.xyz += offsetAtPoint( vertex2.pos) * NoiseAmountXYZ;\r",
          "\r",
          "    float3 n = normalize( vertex0.normal + vertex1.normal + vertex2.normal);\r",
          "    vertex0.normal = lerp(vertex0.normal,n, Normalize);\r",
          "    vertex1.normal = lerp(vertex1.normal,n, Normalize);\r",
          "    vertex2.normal = lerp(vertex2.normal,n, Normalize);\r",
          "\r",
          "    outputStream.Append(vertex0);\r",
          "    outputStream.Append(vertex1);\r",
          "    outputStream.Append(vertex2);\r",
          "    \r",
          "    \r",
          "    \r",
          "    outputStream.RestartStrip();\r",
          "};\r",
          "\r",
          "\r",
          "GeometryShader pGSComp = CompileShader(gs_5_0, GeometryMain());\r",
          "GeometryShader pGSwSO = ConstructGSWithSO(pGSComp, \"POSITION; NORMAL.xyz; COLOR; TEXCOORD0.xy; TANGENT0.xyz; BINORMAL0.xyz\", NULL, NULL, NULL, 0);\r",
          "\r",
          "\r",
          "technique11 Render\r",
          "{\r",
          "    pass \r",
          "    {\r",
          "        SetVertexShader(CompileShader(vs_5_0, VertexMain()));\r",
          "        SetGeometryShader(pGSwSO);\r",
          "        SetPixelShader(NULL);\r",
          "    }\r",
          "}\r",
          "\r",
          ""
        ]
      },
      "MetaID": "c522a66e-3260-4692-b3e3-79fd0361fa3d",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Scene",
      "MetaInstanceID": "548f8824-1aa9-4dae-9f23-0551ed7ed953",
      "DefaultValue": {
        "Type": "Scene",
        "Value": "Framefield.Core.Scene"
      },
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248",
      "IsMultiInput": "False",
      "Relevance": "Required",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Normalize",
      "MetaInstanceID": "799fd3dc-2c85-458a-8b1c-9f3e20faa659",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10",
      "Max": "1",
      "Scale": "0.01",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Center.X",
      "MetaInstanceID": "4c4b61f6-33a3-4cee-a438-fc54409b5fc8",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Center.Y",
      "MetaInstanceID": "110aa357-88a0-4400-a999-96d4f87a4608",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Center.Z",
      "MetaInstanceID": "50086d22-456f-4d1f-b735-56fb75a5f1c4",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "NoiseAmount",
      "MetaInstanceID": "3f7af5f3-d100-41c7-9d0d-8ec4564f3bbc",
      "DefaultValue": {
        "Type": "Float",
        "Value": "5"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "NoiseScale",
      "MetaInstanceID": "d414dff8-bec7-48bc-a2b0-169d633f4dd8",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0.25"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "100000",
      "Scale": "0.01",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "NoiseTexture",
      "MetaInstanceID": "49f47e8e-9809-45a3-92fd-32081e6caa48",
      "DefaultValue": {
        "Type": "Image",
        "Value": "Framefield.Core.Image"
      },
      "MetaID": "9848060d-fd84-45b0-b658-d0d531c61dab",
      "IsMultiInput": "False",
      "Relevance": "Required",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "NoiseAmountXYZ.Width",
      "MetaInstanceID": "d21d7a42-3405-4d84-8daf-56cd09f20dfc",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "NoiseAmountXYZ.Height",
      "MetaInstanceID": "ca458296-9e0d-4097-8153-0bd03c51afa8",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "NoiseAmountXYZ.Depth",
      "MetaInstanceID": "f2711f71-69d9-45d9-bb60-c084dcdbd9de",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    }
  ],
  "Outputs": [
    {
      "Name": "Scene",
      "MetaInstanceID": "0695b364-9d3c-4068-a7c9-9716930b6bf0",
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248"
    }
  ],
  "OperatorParts": [
    {
      "MetaInstanceID": "c74c57ca-8726-49df-a613-62f130f2c512",
      "MetaID": "b387bf0a-5d76-499c-b139-b4b0023605d5",
      "Name": "NoiseDistortFunc",
      "Version": "25f509dd-5a6b-416e-81e3-b5ff7ad32983",
      "Type": "Float",
      "IsMultiInput": "True",
      "Script": [
        "//>>> _using",
        "using System;",
        "using System.Collections.Generic;",
        "using System.Linq;",
        "using System.Text;",
        "using SharpDX;",
        "using SharpDX.Direct3D11;",
        "using SharpDX.Windows;",
        "//<<< _using",
        "using Framefield.Core.OperatorPartTraits;",
        "using Framefield.Core.Rendering;",
        "using Buffer = SharpDX.Direct3D11.Buffer;",
        "using SharpDX.Direct3D;",
        "",
        "namespace Framefield.Core.IDb387bf0a_5d76_499c_b139_b4b0023605d5",
        "{",
        "    public class Class_NoiseDistort : FXSourceCodeFunction, IFXSceneSourceCode, IMeshSupplier",
        "    {",
        "        //>>> _inputids",
        "        private enum InputId",
        "        {",
        "            Code = 0,",
        "            Scene = 1,",
        "            Normalize = 2,",
        "            CenterX = 3,",
        "            CenterY = 4,",
        "            CenterZ = 5,",
        "            NoiseAmount = 6,",
        "            NoiseScale = 7,",
        "            NoiseTexture = 8,",
        "            NoiseAmountXYZWidth = 9,",
        "            NoiseAmountXYZHeight = 10,",
        "            NoiseAmountXYZDepth = 11",
        "        }",
        "        //<<< _inputids",
        "",
        "        public Class_NoiseDistort()",
        "        {",
        "            _meshCollector = new MeshCollector(this);",
        "        }",
        "",
        "        public override void Dispose() ",
        "        {",
        "            Utilities.DisposeObj(ref _mesh);",
        "            base.Dispose();",
        "        }",
        "",
        "        public void AddMeshesTo(ICollection<Mesh> meshes)",
        "        {",
        "            UpdateMesh(new OperatorPartContext(), OperatorPart.Connections);",
        "            if (_mesh != null)",
        "                meshes.Add(_mesh);",
        "        }",
        "",
        "        public override OperatorPartContext Eval(OperatorPartContext context, List<OperatorPart> inputs, int outputIdx)",
        "        {",
        "            try",
        "            {",
        "                UpdateMesh(context, inputs);",
        "",
        "                if (_mesh.Vertices != null)",
        "                {",
        "                    // render stream output to screen or whatever target is set",
        "                    context.Renderer.SetupEffect(context);",
        "                    context.Renderer.Render(_mesh, context);",
        "                }",
        "            }",
        "            catch (Exception exception)",
        "            {",
        "                Logger.Error(this, \"Load Effect error: {0}\", exception.Message);",
        "            }",
        "",
        "            return context;",
        "        }",
        "",
        "        bool _firstEval = true;",
        "        private void UpdateMesh(OperatorPartContext context, List<OperatorPart> inputs)",
        "        {",
        "            if (_firstEval)",
        "            {",
        "                for (int i = 0; i < NumCodes(); ++i)",
        "                    Compile(i);",
        "                _firstEval = false;",
        "                Changed = true;",
        "            }",
        "",
        "            if (!Changed && _mesh.Vertices != null)",
        "                return;",
        "",
        "            //>>> __params",
        "            var Code = inputs[(int)InputId.Code].Eval(context).Text;",
        "            var Scene = inputs[(int)InputId.Scene];",
        "            var Normalize = inputs[(int)InputId.Normalize].Eval(context).Value;",
        "            var CenterX = inputs[(int)InputId.CenterX].Eval(context).Value;",
        "            var CenterY = inputs[(int)InputId.CenterY].Eval(context).Value;",
        "            var CenterZ = inputs[(int)InputId.CenterZ].Eval(context).Value;",
        "            var Center = new Vector3(CenterX, CenterY, CenterZ);",
        "            var NoiseAmount = inputs[(int)InputId.NoiseAmount].Eval(context).Value;",
        "            var NoiseScale = inputs[(int)InputId.NoiseScale].Eval(context).Value;",
        "            var NoiseTexture = inputs[(int)InputId.NoiseTexture].Eval(context).Image;",
        "            var NoiseAmountXYZWidth = inputs[(int)InputId.NoiseAmountXYZWidth].Eval(context).Value;",
        "            var NoiseAmountXYZHeight = inputs[(int)InputId.NoiseAmountXYZHeight].Eval(context).Value;",
        "            var NoiseAmountXYZDepth = inputs[(int)InputId.NoiseAmountXYZDepth].Eval(context).Value;",
        "            var NoiseAmountXYZ = new Vector3(NoiseAmountXYZWidth, NoiseAmountXYZHeight, NoiseAmountXYZDepth);",
        "            //<<< __params",
        "",
        "            if (NoiseTexture == null)",
        "                return;",
        "",
        "            if (Scene.Func.Changed || _mesh.Vertices == null)",
        "            {",
        "                //Logger.Info(this, \"collect meshes\");",
        "                _meshCollector.Collect(Scene);",
        "                Scene.Func.Changed = false;",
        "            }",
        "",
        "            var inputMesh = _meshCollector.FirstMeshOrDefault;",
        "            if (inputMesh == null)",
        "                return;",
        "",
        "            _mesh.AttributesSize = inputMesh.AttributesSize;",
        "            _mesh.NumTriangles = inputMesh.NumTriangles;",
        "            _mesh.InputElements = inputMesh.InputElements;",
        "            if (_mesh.Vertices == null || _mesh.Vertices.Description.SizeInBytes != inputMesh.Vertices.Description.SizeInBytes)",
        "            {",
        "                if (_mesh.Vertices != null)",
        "                    _mesh.Vertices.Dispose();",
        "",
        "                _mesh.Vertices = new Buffer(D3DDevice.Device, new BufferDescription()",
        "                                                                    {",
        "                                                                        BindFlags = BindFlags.StreamOutput | BindFlags.VertexBuffer,",
        "                                                                        CpuAccessFlags = CpuAccessFlags.None,",
        "                                                                        OptionFlags = ResourceOptionFlags.None,",
        "                                                                        SizeInBytes = _mesh.NumTriangles*inputMesh.AttributesSize*3,",
        "                                                                        Usage = ResourceUsage.Default",
        "                                                                    });",
        "            }",
        "            //var textureView = new ShaderResourceView(D3DDevice, NoiseTexture);",
        "            var noiseTextureView = new ShaderResourceView(context.D3DDevice, NoiseTexture);",
        "            _effect.GetVariableByName(\"NoiseTexture\").AsShaderResource().SetResource(noiseTextureView);",
        "",
        "            ",
        "            _effect.GetVariableByName(\"Normalize\").AsScalar().Set(Normalize);",
        "            _effect.GetVariableByName(\"Center\").AsVector().Set(new Vector3(CenterX, CenterY, CenterZ));",
        "            _effect.GetVariableByName(\"NoiseAmount\").AsScalar().Set(NoiseAmount);",
        "            _effect.GetVariableByName(\"NoiseScale\").AsScalar().Set(NoiseScale);",
        "            _effect.GetVariableByName(\"NoiseAmountXYZ\").AsVector().Set(new Vector3(NoiseAmountXYZ.X, NoiseAmountXYZ.Y, NoiseAmountXYZ.Z));",
        "",
        "            context.D3DDevice.ImmediateContext.StreamOutput.SetTargets(new [] { new StreamOutputBufferBinding(_mesh.Vertices, 0) });",
        "            context.D3DDevice.ImmediateContext.OutputMerger.DepthStencilState = new DepthStencilState(context.D3DDevice,",
        "                                                                                                        new DepthStencilStateDescription()",
        "                                                                                                            {",
        "                                                                                                                IsDepthEnabled = false,",
        "                                                                                                                IsStencilEnabled = false",
        "                                                                                                            });",
        "            context.D3DDevice.ImmediateContext.InputAssembler.InputLayout = context.InputLayout;",
        "            context.D3DDevice.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;",
        "            context.D3DDevice.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(inputMesh.Vertices, inputMesh.AttributesSize, 0));",
        "            var technique = _effect.GetTechniqueByIndex(0);",
        "            technique.GetPassByIndex(0).Apply(context.D3DDevice.ImmediateContext);",
        "            context.D3DDevice.ImmediateContext.Draw(_mesh.NumTriangles*3, 0);",
        "            context.D3DDevice.ImmediateContext.StreamOutput.SetTargets(new [] { new StreamOutputBufferBinding(null, 0) });",
        "",
        "            Changed = false;",
        "        }",
        "",
        "        private Mesh _mesh = new Mesh();",
        "        private MeshCollector _meshCollector;",
        "    }",
        "}",
        "",
        "",
        ""
      ],
      "AdditionalAssemblies": []
    }
  ],
  "Operators": [],
  "Connections": [
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c74c57ca-8726-49df-a613-62f130f2c512",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "0695b364-9d3c-4068-a7c9-9716930b6bf0"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "08544103-d5cb-437c-949f-f945ac0ce587",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "548f8824-1aa9-4dae-9f23-0551ed7ed953",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "799fd3dc-2c85-458a-8b1c-9f3e20faa659",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "4c4b61f6-33a3-4cee-a438-fc54409b5fc8",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "110aa357-88a0-4400-a999-96d4f87a4608",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "50086d22-456f-4d1f-b735-56fb75a5f1c4",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "3f7af5f3-d100-41c7-9d0d-8ec4564f3bbc",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "d414dff8-bec7-48bc-a2b0-169d633f4dd8",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "49f47e8e-9809-45a3-92fd-32081e6caa48",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "d21d7a42-3405-4d84-8daf-56cd09f20dfc",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ca458296-9e0d-4097-8153-0bd03c51afa8",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "f2711f71-69d9-45d9-bb60-c084dcdbd9de",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "c74c57ca-8726-49df-a613-62f130f2c512"
    }
  ]
}