This is an automated email from the ASF dual-hosted git repository.

pabloem pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 2420585  [BEAM-13155][Playground] add a new status: STATUS_RUN_ERROR; 
add a new API method GetRunError; add a new sunKey RunError; update of 
validation processing;
     new f068a62  Merge pull request #15879 from [BEAM-13155][Playground] 
Update the processing of error during run code
2420585 is described below

commit 24205850efc35caff49f8adbbf04f79e625b575c
Author: AydarZaynutdinov <[email protected]>
AuthorDate: Wed Nov 3 18:56:24 2021 +0300

    [BEAM-13155][Playground]
    add a new status: STATUS_RUN_ERROR;
    add a new API method GetRunError;
    add a new sunKey RunError;
    update of validation processing;
---
 playground/api/v1/api.proto                        |  19 +-
 playground/backend/cmd/server/controller.go        |  41 +-
 playground/backend/cmd/server/controller_test.go   | 173 ++++++--
 playground/backend/internal/api/v1/api.pb.go       | 479 +++++++++++++--------
 playground/backend/internal/api/v1/api_grpc.pb.go  |  38 ++
 playground/backend/internal/cache/cache.go         |   3 +
 .../backend/internal/cache/redis/redis_cache.go    |   2 +-
 playground/frontend/lib/api/v1/api.pb.dart         | 106 ++++-
 playground/frontend/lib/api/v1/api.pbenum.dart     |   6 +-
 playground/frontend/lib/api/v1/api.pbgrpc.dart     |  28 ++
 playground/frontend/lib/api/v1/api.pbjson.dart     |  30 +-
 11 files changed, 666 insertions(+), 259 deletions(-)

diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto
index e0e164f..d716ca3 100644
--- a/playground/api/v1/api.proto
+++ b/playground/api/v1/api.proto
@@ -37,8 +37,9 @@ enum Status {
   STATUS_COMPILE_ERROR = 4;
   STATUS_EXECUTING = 5;
   STATUS_FINISHED = 6;
-  STATUS_ERROR = 7;
-  STATUS_RUN_TIMEOUT = 8;
+  STATUS_RUN_ERROR = 7;
+  STATUS_ERROR = 8;
+  STATUS_RUN_TIMEOUT = 9;
 }
 
 enum ExampleType {
@@ -87,7 +88,16 @@ message GetRunOutputRequest {
 // RunOutputResponse represents the result of the executed code.
 message GetRunOutputResponse {
   string output = 1;
-  Status compilation_status = 2;
+}
+
+// GetRunErrorRequest contains information of the pipeline uuid.
+message GetRunErrorRequest {
+  string pipeline_uuid = 1;
+}
+
+// GetRunErrorResponse represents the error of the executed code.
+message GetRunErrorResponse {
+  string output = 1;
 }
 
 // ListOfExamplesRequest contains information of the needed examples sdk and 
categories.
@@ -140,6 +150,9 @@ service PlaygroundService {
   // Get the result of pipeline execution.
   rpc GetRunOutput(GetRunOutputRequest) returns (GetRunOutputResponse);
 
+  // Get the error of pipeline execution.
+  rpc GetRunError(GetRunErrorRequest) returns (GetRunErrorResponse);
+
   // Get the result of pipeline compilation.
   rpc GetCompileOutput(GetCompileOutputRequest) returns 
(GetCompileOutputResponse);
 
diff --git a/playground/backend/cmd/server/controller.go 
b/playground/backend/cmd/server/controller.go
index ad964b2..5b92d2b 100644
--- a/playground/backend/cmd/server/controller.go
+++ b/playground/backend/cmd/server/controller.go
@@ -104,6 +104,23 @@ func (controller *playgroundController) GetRunOutput(ctx 
context.Context, info *
        return &pipelineResult, nil
 }
 
+//GetRunError is returning error output of execution for specific pipeline by 
PipelineUuid
+func (controller *playgroundController) GetRunError(ctx context.Context, info 
*pb.GetRunErrorRequest) (*pb.GetRunErrorResponse, error) {
+       pipelineId := info.PipelineUuid
+       runErrorInterface, err := controller.cacheService.GetValue(ctx, 
uuid.MustParse(pipelineId), cache.RunError)
+       if err != nil {
+               logger.Errorf("%s: GetRunError(): cache.GetValue: error: %s", 
pipelineId, err.Error())
+               return nil, errors.NotFoundError("GetRunError", "there is no 
run error output for pipelineId: "+pipelineId+", subKey: cache.RunError")
+       }
+       runError, converted := runErrorInterface.(string)
+       if !converted {
+               return nil, errors.InternalError("GetRunError", "run output 
can't be converted to string")
+       }
+       pipelineResult := pb.GetRunErrorResponse{Output: runError}
+
+       return &pipelineResult, nil
+}
+
 //GetCompileOutput is returning output of compilation for specific pipeline by 
PipelineUuid
 func (controller *playgroundController) GetCompileOutput(ctx context.Context, 
info *pb.GetCompileOutputRequest) (*pb.GetCompileOutputResponse, error) {
        pipelineId := info.PipelineUuid
@@ -237,10 +254,10 @@ func setupValidators(sdk pb.Sdk, filepath string) 
*[]validators.Validator {
 
 // processCode validates, compiles and runs code by pipelineId.
 // During each operation updates status of execution and saves it into cache:
-// - In case of validation step is failed saves playground.Status_STATUS_ERROR 
as cache.Status into cache.
+// - In case of validation step is failed saves 
playground.Status_STATUS_VALIDATION_ERROR as cache.Status into cache.
 // - In case of compile step is failed saves 
playground.Status_STATUS_COMPILE_ERROR as cache.Status and compile logs as 
cache.CompileOutput into cache.
-// - In case of compile step is completed with no errors saves empty string 
("") as cache.CompileOutput into cache.
-// - In case of run step is failed saves playground.Status_STATUS_ERROR as 
cache.Status and run logs as cache.RunOutput into cache.
+// - In case of compile step is completed with no errors saves compile output 
as cache.CompileOutput into cache.
+// - In case of run step is failed saves playground.Status_STATUS_RUN_ERROR as 
cache.Status and run logs as cache.RunError into cache.
 // - In case of run step is completed with no errors saves 
playground.Status_STATUS_FINISHED as cache.Status and run output as 
cache.RunOutput into cache.
 // At the end of this method deletes all created folders.
 func processCode(ctx context.Context, cacheService cache.Cache, lc 
*fs_tool.LifeCycle, compileBuilder *executors.CompileBuilder, pipelineId 
uuid.UUID, env *environment.Environment, sdk pb.Sdk) {
@@ -282,7 +299,7 @@ func processCode(ctx context.Context, cacheService 
cache.Cache, lc *fs_tool.Life
        logger.Infof("%s: Run() ...\n", pipelineId)
        runCmd := exec.Run()
        if data, err := runCmd.CombinedOutput(); err != nil {
-               processError(ctx, err, data, pipelineId, cacheService, 
pb.Status_STATUS_ERROR)
+               processError(ctx, err, data, pipelineId, cacheService, 
pb.Status_STATUS_RUN_ERROR)
                return
        } else {
                processSuccess(ctx, data, pipelineId, cacheService, 
pb.Status_STATUS_FINISHED)
@@ -305,24 +322,19 @@ func processError(ctx context.Context, err error, data 
[]byte, pipelineId uuid.U
        case pb.Status_STATUS_VALIDATION_ERROR:
                logger.Errorf("%s: Validate: %s\n", pipelineId, err.Error())
 
-               // set to cache pipelineId: cache.SubKey_Status: 
pb.Status_STATUS_VALIDATION_ERROR
                setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_VALIDATION_ERROR)
        case pb.Status_STATUS_COMPILE_ERROR:
                logger.Errorf("%s: Compile: err: %s, output: %s\n", pipelineId, 
err.Error(), data)
 
-               // set to cache pipelineId: cache.SubKey_CompileOutput: 
err.Error()
                setToCache(ctx, cacheService, pipelineId, cache.CompileOutput, 
"error: "+err.Error()+", output: "+string(data))
 
-               // set to cache pipelineId: cache.SubKey_Status: 
pb.Status_STATUS_ERROR
                setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_COMPILE_ERROR)
-       case pb.Status_STATUS_ERROR:
+       case pb.Status_STATUS_RUN_ERROR:
                logger.Errorf("%s: Run: err: %s, output: %s\n", pipelineId, 
err.Error(), data)
 
-               // set to cache pipelineId: cache.SubKey_RunOutput: err.Error()
-               setToCache(ctx, cacheService, pipelineId, cache.RunOutput, 
"error: "+err.Error()+", output: "+string(data))
+               setToCache(ctx, cacheService, pipelineId, cache.RunError, 
"error: "+err.Error()+", output: "+string(data))
 
-               // set to cache pipelineId: cache.SubKey_Status: 
pb.Status_STATUS_ERROR
-               setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_ERROR)
+               setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_RUN_ERROR)
        }
 }
 
@@ -332,23 +344,18 @@ func processSuccess(ctx context.Context, output []byte, 
pipelineId uuid.UUID, ca
        case pb.Status_STATUS_COMPILING:
                logger.Infof("%s: Validate() finish\n", pipelineId)
 
-               // set to cache pipelineId: cache.SubKey_Status: 
pb.Status_STATUS_EXECUTING
                setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_COMPILING)
        case pb.Status_STATUS_EXECUTING:
                logger.Infof("%s: Compile() finish\n", pipelineId)
 
-               // set to cache pipelineId: cache.SubKey_CompileOutput: output
                setToCache(ctx, cacheService, pipelineId, cache.CompileOutput, 
string(output))
 
-               // set to cache pipelineId: cache.SubKey_Status: 
pb.Status_STATUS_EXECUTING
                setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_EXECUTING)
        case pb.Status_STATUS_FINISHED:
                logger.Infof("%s: Run() finish\n", pipelineId)
 
-               // set to cache pipelineId: cache.SubKey_RunOutput: output
                setToCache(ctx, cacheService, pipelineId, cache.RunOutput, 
string(output))
 
-               // set to cache pipelineId: cache.SubKey_Status: 
pb.Status_STATUS_FINISHED
                setToCache(ctx, cacheService, pipelineId, cache.Status, 
pb.Status_STATUS_FINISHED)
        }
 }
diff --git a/playground/backend/cmd/server/controller_test.go 
b/playground/backend/cmd/server/controller_test.go
index 251fab8..c597910 100644
--- a/playground/backend/cmd/server/controller_test.go
+++ b/playground/backend/cmd/server/controller_test.go
@@ -307,9 +307,6 @@ func TestPlaygroundController_GetCompileOutput(t 
*testing.T) {
                                if !strings.EqualFold(got.Output, 
tt.want.Output) {
                                        t.Errorf("GetCompileOutput() got = %v, 
want %v", got.Output, tt.want.Output)
                                }
-                               if !reflect.DeepEqual(got.CompilationStatus, 
tt.want.CompilationStatus) {
-                                       t.Errorf("GetCompileOutput() got = %v, 
want %v", got.CompilationStatus, tt.want.CompilationStatus)
-                               }
                        }
                })
        }
@@ -372,8 +369,79 @@ func TestPlaygroundController_GetRunOutput(t *testing.T) {
                                if !strings.EqualFold(got.Output, 
tt.want.Output) {
                                        t.Errorf("GetRunOutput() got = %v, want 
%v", got.Output, tt.want.Output)
                                }
-                               if !reflect.DeepEqual(got.CompilationStatus, 
tt.want.CompilationStatus) {
-                                       t.Errorf("GetRunOutput() got = %v, want 
%v", got.CompilationStatus, tt.want.CompilationStatus)
+                       }
+               })
+       }
+}
+
+func TestPlaygroundController_GetRunError(t *testing.T) {
+       ctx := context.Background()
+       pipelineId := uuid.New()
+       runError := "MOCK_RUN_ERROR"
+       conn, err := grpc.DialContext(ctx, "bufnet", 
grpc.WithContextDialer(bufDialer), grpc.WithInsecure())
+       if err != nil {
+               t.Fatalf("Failed to dial bufnet: %v", err)
+       }
+       defer conn.Close()
+       client := pb.NewPlaygroundServiceClient(conn)
+
+       type args struct {
+               ctx  context.Context
+               info *pb.GetRunErrorRequest
+       }
+       tests := []struct {
+               name    string
+               prepare func()
+               args    args
+               want    *pb.GetRunErrorResponse
+               wantErr bool
+       }{
+               {
+                       name:    "pipelineId doesn't exist",
+                       prepare: func() {},
+                       args: args{
+                               ctx:  ctx,
+                               info: &pb.GetRunErrorRequest{PipelineUuid: 
pipelineId.String()},
+                       },
+                       want:    nil,
+                       wantErr: true,
+               },
+               {
+                       name: "run error output doesn't exist",
+                       prepare: func() {
+                               _ = cacheService.SetValue(ctx, pipelineId, 
cache.Status, pb.Status_STATUS_VALIDATING)
+                       },
+                       args: args{
+                               ctx:  ctx,
+                               info: &pb.GetRunErrorRequest{PipelineUuid: 
pipelineId.String()},
+                       },
+                       want:    nil,
+                       wantErr: true,
+               },
+               {
+                       name: "run error output exist",
+                       prepare: func() {
+                               _ = cacheService.SetValue(ctx, pipelineId, 
cache.RunError, runError)
+                       },
+                       args: args{
+                               ctx:  ctx,
+                               info: &pb.GetRunErrorRequest{PipelineUuid: 
pipelineId.String()},
+                       },
+                       want:    &pb.GetRunErrorResponse{Output: runError},
+                       wantErr: false,
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       tt.prepare()
+                       got, err := client.GetRunError(tt.args.ctx, 
tt.args.info)
+                       if (err != nil) != tt.wantErr {
+                               t.Errorf("GetRunError() error = %v, wantErr 
%v", err, tt.wantErr)
+                               return
+                       }
+                       if !tt.wantErr {
+                               if !strings.EqualFold(got.Output, 
tt.want.Output) {
+                                       t.Errorf("GetRunError() got = %v, want 
%v", got.Output, tt.want.Output)
                                }
                        }
                })
@@ -381,7 +449,6 @@ func TestPlaygroundController_GetRunOutput(t *testing.T) {
 }
 
 func Test_processCode(t *testing.T) {
-       pipelineId := uuid.New()
        networkEnvs, err := environment.GetNetworkEnvsFromOsEnvs()
        if err != nil {
                panic(err)
@@ -394,25 +461,14 @@ func Test_processCode(t *testing.T) {
        if err != nil {
                panic(err)
        }
-       env := environment.NewEnvironment(*networkEnvs, *sdkEnv, *appEnvs)
 
-       lc, _ := fs_tool.NewLifeCycle(pb.Sdk_SDK_JAVA, pipelineId, 
os.Getenv("APP_WORK_DIR"))
-       filePath := lc.GetAbsoluteExecutableFilePath()
-       workingDir := lc.GetAbsoluteExecutableFilesFolderPath()
-
-       exec := executors.NewExecutorBuilder().
-               WithValidator().
-               WithSdkValidators(validators.GetJavaValidators(filePath)).
-               WithCompiler().
-               WithCommand(sdkEnv.ExecutorConfig.CompileCmd).
-               WithArgs(sdkEnv.ExecutorConfig.CompileArgs).
-               WithFileName(filePath).
-               WithWorkingDir(workingDir)
+       env := environment.NewEnvironment(*networkEnvs, *sdkEnv, *appEnvs)
 
        type args struct {
-               ctx context.Context
-               env *environment.Environment
-               sdk pb.Sdk
+               pipelineId uuid.UUID
+               ctx        context.Context
+               env        *environment.Environment
+               sdk        pb.Sdk
        }
        tests := []struct {
                name                  string
@@ -420,6 +476,7 @@ func Test_processCode(t *testing.T) {
                code                  string
                expectedStatus        pb.Status
                expectedRunOutput     interface{}
+               expectedRunError      interface{}
                expectedCompileOutput interface{}
                args                  args
        }{
@@ -432,10 +489,12 @@ func Test_processCode(t *testing.T) {
                        expectedStatus:        
pb.Status_STATUS_VALIDATION_ERROR,
                        expectedCompileOutput: nil,
                        expectedRunOutput:     nil,
+                       expectedRunError:      nil,
                        args: args{
-                               ctx: context.Background(),
-                               env: env,
-                               sdk: pb.Sdk_SDK_JAVA,
+                               ctx:        context.Background(),
+                               env:        env,
+                               sdk:        pb.Sdk_SDK_JAVA,
+                               pipelineId: uuid.New(),
                        },
                },
                {
@@ -445,27 +504,31 @@ func Test_processCode(t *testing.T) {
                        createExecFile:        true,
                        code:                  "MOCK_CODE",
                        expectedStatus:        pb.Status_STATUS_COMPILE_ERROR,
-                       expectedCompileOutput: fmt.Sprintf("error: exit status 
1, output: %s:1: error: reached end of file while parsing\nMOCK_CODE\n^\n1 
error\n", lc.GetAbsoluteExecutableFilePath()),
+                       expectedCompileOutput: "error: exit status 1, output: 
%s:1: error: reached end of file while parsing\nMOCK_CODE\n^\n1 error\n",
                        expectedRunOutput:     nil,
+                       expectedRunError:      nil,
                        args: args{
-                               ctx: context.Background(),
-                               env: env,
-                               sdk: pb.Sdk_SDK_JAVA,
+                               ctx:        context.Background(),
+                               env:        env,
+                               sdk:        pb.Sdk_SDK_JAVA,
+                               pipelineId: uuid.New(),
                        },
                },
                {
                        // Test case with calling processCode method with 
incorrect logic into code.
-                       // As a result status into cache should be set as 
Status_STATUS_ERROR.
+                       // As a result status into cache should be set as 
Status_STATUS_RUN_ERROR.
                        name:                  "run failed",
                        createExecFile:        true,
                        code:                  "class HelloWorld {\n    public 
static void main(String[] args) {\n        System.out.println(1/0);\n    }\n}",
-                       expectedStatus:        pb.Status_STATUS_ERROR,
+                       expectedStatus:        pb.Status_STATUS_RUN_ERROR,
                        expectedCompileOutput: "",
-                       expectedRunOutput:     fmt.Sprintf("error: exit status 
1, output: Exception in thread \"main\" java.lang.ArithmeticException: / by 
zero\n\tat HelloWorld.main(%s.java:3)\n", pipelineId),
+                       expectedRunOutput:     nil,
+                       expectedRunError:      "error: exit status 1, output: 
Exception in thread \"main\" java.lang.ArithmeticException: / by zero\n\tat 
HelloWorld.main(%s.java:3)\n",
                        args: args{
-                               ctx: context.Background(),
-                               env: env,
-                               sdk: pb.Sdk_SDK_JAVA,
+                               ctx:        context.Background(),
+                               env:        env,
+                               sdk:        pb.Sdk_SDK_JAVA,
+                               pipelineId: uuid.New(),
                        },
                },
                {
@@ -477,15 +540,30 @@ func Test_processCode(t *testing.T) {
                        expectedStatus:        pb.Status_STATUS_FINISHED,
                        expectedCompileOutput: "",
                        expectedRunOutput:     "Hello world!\n",
+                       expectedRunError:      nil,
                        args: args{
-                               ctx: context.Background(),
-                               env: env,
-                               sdk: pb.Sdk_SDK_JAVA,
+                               ctx:        context.Background(),
+                               env:        env,
+                               sdk:        pb.Sdk_SDK_JAVA,
+                               pipelineId: uuid.New(),
                        },
                },
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
+                       lc, _ := fs_tool.NewLifeCycle(pb.Sdk_SDK_JAVA, 
tt.args.pipelineId, os.Getenv("APP_WORK_DIR"))
+                       filePath := lc.GetAbsoluteExecutableFilePath()
+                       workingDir := lc.GetAbsoluteExecutableFilesFolderPath()
+
+                       exec := executors.NewExecutorBuilder().
+                               WithValidator().
+                               
WithSdkValidators(validators.GetJavaValidators(filePath)).
+                               WithCompiler().
+                               WithCommand(sdkEnv.ExecutorConfig.CompileCmd).
+                               WithArgs(sdkEnv.ExecutorConfig.CompileArgs).
+                               WithFileName(filePath).
+                               WithWorkingDir(workingDir)
+
                        err := lc.CreateFolders()
                        if err != nil {
                                t.Fatalf("error during prepare folders: %s", 
err.Error())
@@ -494,23 +572,34 @@ func Test_processCode(t *testing.T) {
                                _, _ = lc.CreateExecutableFile(tt.code)
                        }
 
-                       processCode(tt.args.ctx, cacheService, lc, exec, 
pipelineId, tt.args.env, tt.args.sdk)
+                       processCode(tt.args.ctx, cacheService, lc, exec, 
tt.args.pipelineId, tt.args.env, tt.args.sdk)
 
-                       status, _ := cacheService.GetValue(tt.args.ctx, 
pipelineId, cache.Status)
+                       status, _ := cacheService.GetValue(tt.args.ctx, 
tt.args.pipelineId, cache.Status)
                        if !reflect.DeepEqual(status, tt.expectedStatus) {
                                t.Errorf("processCode() set status: %s, but 
expectes: %s", status, tt.expectedStatus)
                        }
 
-                       compileOutput, _ := cacheService.GetValue(tt.args.ctx, 
pipelineId, cache.CompileOutput)
+                       compileOutput, _ := cacheService.GetValue(tt.args.ctx, 
tt.args.pipelineId, cache.CompileOutput)
+                       if tt.expectedCompileOutput != nil && 
strings.Contains(tt.expectedCompileOutput.(string), "%s") {
+                               tt.expectedCompileOutput = 
fmt.Sprintf(tt.expectedCompileOutput.(string), 
lc.GetAbsoluteExecutableFilePath())
+                       }
                        if !reflect.DeepEqual(compileOutput, 
tt.expectedCompileOutput) {
                                t.Errorf("processCode() set compileOutput: %s, 
but expectes: %s", compileOutput, tt.expectedCompileOutput)
                        }
 
-                       runOutput, _ := cacheService.GetValue(tt.args.ctx, 
pipelineId, cache.RunOutput)
+                       runOutput, _ := cacheService.GetValue(tt.args.ctx, 
tt.args.pipelineId, cache.RunOutput)
                        if !reflect.DeepEqual(runOutput, tt.expectedRunOutput) {
                                t.Errorf("processCode() set runOutput: %s, but 
expectes: %s", runOutput, tt.expectedRunOutput)
                        }
 
+                       runError, _ := cacheService.GetValue(tt.args.ctx, 
tt.args.pipelineId, cache.RunError)
+                       if tt.expectedRunError != nil && 
strings.Contains(tt.expectedRunError.(string), "%s") {
+                               tt.expectedRunError = 
fmt.Sprintf(tt.expectedRunError.(string), tt.args.pipelineId)
+                       }
+                       if !reflect.DeepEqual(runError, tt.expectedRunError) {
+                               t.Errorf("processCode() set runError: %s, but 
expectes: %s", runError, tt.expectedRunError)
+                       }
+
                        // remove
                        path := os.Getenv("APP_WORK_DIR") + "/executable_files"
                        os.RemoveAll(path)
diff --git a/playground/backend/internal/api/v1/api.pb.go 
b/playground/backend/internal/api/v1/api.pb.go
index 7e787d0..ef5b62d 100644
--- a/playground/backend/internal/api/v1/api.pb.go
+++ b/playground/backend/internal/api/v1/api.pb.go
@@ -18,7 +18,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 //     protoc-gen-go v1.26.0
-//     protoc        v3.18.1
+//     protoc        v3.17.3
 // source: api/v1/api.proto
 
 package playground
@@ -102,8 +102,9 @@ const (
        Status_STATUS_COMPILE_ERROR    Status = 4
        Status_STATUS_EXECUTING        Status = 5
        Status_STATUS_FINISHED         Status = 6
-       Status_STATUS_ERROR            Status = 7
-       Status_STATUS_RUN_TIMEOUT      Status = 8
+       Status_STATUS_RUN_ERROR        Status = 7
+       Status_STATUS_ERROR            Status = 8
+       Status_STATUS_RUN_TIMEOUT      Status = 9
 )
 
 // Enum value maps for Status.
@@ -116,8 +117,9 @@ var (
                4: "STATUS_COMPILE_ERROR",
                5: "STATUS_EXECUTING",
                6: "STATUS_FINISHED",
-               7: "STATUS_ERROR",
-               8: "STATUS_RUN_TIMEOUT",
+               7: "STATUS_RUN_ERROR",
+               8: "STATUS_ERROR",
+               9: "STATUS_RUN_TIMEOUT",
        }
        Status_value = map[string]int32{
                "STATUS_UNSPECIFIED":      0,
@@ -127,8 +129,9 @@ var (
                "STATUS_COMPILE_ERROR":    4,
                "STATUS_EXECUTING":        5,
                "STATUS_FINISHED":         6,
-               "STATUS_ERROR":            7,
-               "STATUS_RUN_TIMEOUT":      8,
+               "STATUS_RUN_ERROR":        7,
+               "STATUS_ERROR":            8,
+               "STATUS_RUN_TIMEOUT":      9,
        }
 )
 
@@ -566,8 +569,7 @@ type GetRunOutputResponse struct {
        sizeCache     protoimpl.SizeCache
        unknownFields protoimpl.UnknownFields
 
-       Output            string `protobuf:"bytes,1,opt,name=output,proto3" 
json:"output,omitempty"`
-       CompilationStatus Status 
`protobuf:"varint,2,opt,name=compilation_status,json=compilationStatus,proto3,enum=api.v1.Status"
 json:"compilation_status,omitempty"`
+       Output string `protobuf:"bytes,1,opt,name=output,proto3" 
json:"output,omitempty"`
 }
 
 func (x *GetRunOutputResponse) Reset() {
@@ -609,11 +611,100 @@ func (x *GetRunOutputResponse) GetOutput() string {
        return ""
 }
 
-func (x *GetRunOutputResponse) GetCompilationStatus() Status {
+// GetRunErrorRequest contains information of the pipeline uuid.
+type GetRunErrorRequest struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       PipelineUuid string 
`protobuf:"bytes,1,opt,name=pipeline_uuid,json=pipelineUuid,proto3" 
json:"pipeline_uuid,omitempty"`
+}
+
+func (x *GetRunErrorRequest) Reset() {
+       *x = GetRunErrorRequest{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_api_v1_api_proto_msgTypes[8]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *GetRunErrorRequest) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetRunErrorRequest) ProtoMessage() {}
+
+func (x *GetRunErrorRequest) ProtoReflect() protoreflect.Message {
+       mi := &file_api_v1_api_proto_msgTypes[8]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetRunErrorRequest.ProtoReflect.Descriptor instead.
+func (*GetRunErrorRequest) Descriptor() ([]byte, []int) {
+       return file_api_v1_api_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *GetRunErrorRequest) GetPipelineUuid() string {
        if x != nil {
-               return x.CompilationStatus
+               return x.PipelineUuid
        }
-       return Status_STATUS_UNSPECIFIED
+       return ""
+}
+
+// GetRunErrorResponse represents the error of the executed code.
+type GetRunErrorResponse struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Output string `protobuf:"bytes,1,opt,name=output,proto3" 
json:"output,omitempty"`
+}
+
+func (x *GetRunErrorResponse) Reset() {
+       *x = GetRunErrorResponse{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_api_v1_api_proto_msgTypes[9]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *GetRunErrorResponse) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetRunErrorResponse) ProtoMessage() {}
+
+func (x *GetRunErrorResponse) ProtoReflect() protoreflect.Message {
+       mi := &file_api_v1_api_proto_msgTypes[9]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetRunErrorResponse.ProtoReflect.Descriptor instead.
+func (*GetRunErrorResponse) Descriptor() ([]byte, []int) {
+       return file_api_v1_api_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *GetRunErrorResponse) GetOutput() string {
+       if x != nil {
+               return x.Output
+       }
+       return ""
 }
 
 // ListOfExamplesRequest contains information of the needed examples sdk and 
categories.
@@ -629,7 +720,7 @@ type GetListOfExamplesRequest struct {
 func (x *GetListOfExamplesRequest) Reset() {
        *x = GetListOfExamplesRequest{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[8]
+               mi := &file_api_v1_api_proto_msgTypes[10]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -642,7 +733,7 @@ func (x *GetListOfExamplesRequest) String() string {
 func (*GetListOfExamplesRequest) ProtoMessage() {}
 
 func (x *GetListOfExamplesRequest) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[8]
+       mi := &file_api_v1_api_proto_msgTypes[10]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -655,7 +746,7 @@ func (x *GetListOfExamplesRequest) ProtoReflect() 
protoreflect.Message {
 
 // Deprecated: Use GetListOfExamplesRequest.ProtoReflect.Descriptor instead.
 func (*GetListOfExamplesRequest) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{8}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *GetListOfExamplesRequest) GetSdk() Sdk {
@@ -687,7 +778,7 @@ type Example struct {
 func (x *Example) Reset() {
        *x = Example{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[9]
+               mi := &file_api_v1_api_proto_msgTypes[11]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -700,7 +791,7 @@ func (x *Example) String() string {
 func (*Example) ProtoMessage() {}
 
 func (x *Example) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[9]
+       mi := &file_api_v1_api_proto_msgTypes[11]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -713,7 +804,7 @@ func (x *Example) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Example.ProtoReflect.Descriptor instead.
 func (*Example) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{9}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *Example) GetExampleUuid() string {
@@ -757,7 +848,7 @@ type Categories struct {
 func (x *Categories) Reset() {
        *x = Categories{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[10]
+               mi := &file_api_v1_api_proto_msgTypes[12]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -770,7 +861,7 @@ func (x *Categories) String() string {
 func (*Categories) ProtoMessage() {}
 
 func (x *Categories) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[10]
+       mi := &file_api_v1_api_proto_msgTypes[12]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -783,7 +874,7 @@ func (x *Categories) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Categories.ProtoReflect.Descriptor instead.
 func (*Categories) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{10}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *Categories) GetSdk() Sdk {
@@ -812,7 +903,7 @@ type GetListOfExamplesResponse struct {
 func (x *GetListOfExamplesResponse) Reset() {
        *x = GetListOfExamplesResponse{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[11]
+               mi := &file_api_v1_api_proto_msgTypes[13]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -825,7 +916,7 @@ func (x *GetListOfExamplesResponse) String() string {
 func (*GetListOfExamplesResponse) ProtoMessage() {}
 
 func (x *GetListOfExamplesResponse) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[11]
+       mi := &file_api_v1_api_proto_msgTypes[13]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -838,7 +929,7 @@ func (x *GetListOfExamplesResponse) ProtoReflect() 
protoreflect.Message {
 
 // Deprecated: Use GetListOfExamplesResponse.ProtoReflect.Descriptor instead.
 func (*GetListOfExamplesResponse) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{11}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{13}
 }
 
 func (x *GetListOfExamplesResponse) GetSdkExamples() []*Categories {
@@ -860,7 +951,7 @@ type GetExampleRequest struct {
 func (x *GetExampleRequest) Reset() {
        *x = GetExampleRequest{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[12]
+               mi := &file_api_v1_api_proto_msgTypes[14]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -873,7 +964,7 @@ func (x *GetExampleRequest) String() string {
 func (*GetExampleRequest) ProtoMessage() {}
 
 func (x *GetExampleRequest) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[12]
+       mi := &file_api_v1_api_proto_msgTypes[14]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -886,7 +977,7 @@ func (x *GetExampleRequest) ProtoReflect() 
protoreflect.Message {
 
 // Deprecated: Use GetExampleRequest.ProtoReflect.Descriptor instead.
 func (*GetExampleRequest) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{12}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{14}
 }
 
 func (x *GetExampleRequest) GetExampleUuid() string {
@@ -908,7 +999,7 @@ type GetExampleResponse struct {
 func (x *GetExampleResponse) Reset() {
        *x = GetExampleResponse{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[13]
+               mi := &file_api_v1_api_proto_msgTypes[15]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -921,7 +1012,7 @@ func (x *GetExampleResponse) String() string {
 func (*GetExampleResponse) ProtoMessage() {}
 
 func (x *GetExampleResponse) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[13]
+       mi := &file_api_v1_api_proto_msgTypes[15]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -934,7 +1025,7 @@ func (x *GetExampleResponse) ProtoReflect() 
protoreflect.Message {
 
 // Deprecated: Use GetExampleResponse.ProtoReflect.Descriptor instead.
 func (*GetExampleResponse) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{13}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{15}
 }
 
 func (x *GetExampleResponse) GetCode() string {
@@ -956,7 +1047,7 @@ type Categories_Category struct {
 func (x *Categories_Category) Reset() {
        *x = Categories_Category{}
        if protoimpl.UnsafeEnabled {
-               mi := &file_api_v1_api_proto_msgTypes[14]
+               mi := &file_api_v1_api_proto_msgTypes[16]
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                ms.StoreMessageInfo(mi)
        }
@@ -969,7 +1060,7 @@ func (x *Categories_Category) String() string {
 func (*Categories_Category) ProtoMessage() {}
 
 func (x *Categories_Category) ProtoReflect() protoreflect.Message {
-       mi := &file_api_v1_api_proto_msgTypes[14]
+       mi := &file_api_v1_api_proto_msgTypes[16]
        if protoimpl.UnsafeEnabled && x != nil {
                ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
                if ms.LoadMessageInfo() == nil {
@@ -982,7 +1073,7 @@ func (x *Categories_Category) ProtoReflect() 
protoreflect.Message {
 
 // Deprecated: Use Categories_Category.ProtoReflect.Descriptor instead.
 func (*Categories_Category) Descriptor() ([]byte, []int) {
-       return file_api_v1_api_proto_rawDescGZIP(), []int{10, 0}
+       return file_api_v1_api_proto_rawDescGZIP(), []int{12, 0}
 }
 
 func (x *Categories_Category) GetCategoryName() string {
@@ -1034,115 +1125,124 @@ var file_api_v1_api_proto_rawDesc = []byte{
        0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 
0x23, 0x0a, 0x0d, 0x70,
        0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 
0x18, 0x01, 0x20, 0x01,
        0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 
0x55, 0x75, 0x69, 0x64,
-       0x22, 0x6d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 
0x74, 0x70, 0x75, 0x74,
+       0x22, 0x2e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 
0x74, 0x70, 0x75, 0x74,
        0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 
0x6f, 0x75, 0x74, 0x70,
        0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 
0x74, 0x70, 0x75, 0x74,
-       0x12, 0x3d, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 
0x69, 0x6f, 0x6e, 0x5f,
-       0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 
0x32, 0x0e, 0x2e, 0x61,
-       0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 
0x52, 0x11, 0x63, 0x6f,
-       0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 
0x74, 0x75, 0x73, 0x22,
-       0x55, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 
0x45, 0x78, 0x61, 0x6d,
-       0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 
0x1d, 0x0a, 0x03, 0x73,
-       0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 
0x70, 0x69, 0x2e, 0x76,
-       0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x1a, 
0x0a, 0x08, 0x63, 0x61,
-       0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 
0x52, 0x08, 0x63, 0x61,
-       0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x8b, 0x01, 0x0a, 0x07, 0x45, 
0x78, 0x61, 0x6d, 0x70,
-       0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 
0x65, 0x5f, 0x75, 0x75,
-       0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 
0x61, 0x6d, 0x70, 0x6c,
-       0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 
0x65, 0x18, 0x02, 0x20,
-       0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 
0x0b, 0x64, 0x65, 0x73,
-       0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 
0x28, 0x09, 0x52, 0x0b,
-       0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 
0x27, 0x0a, 0x04, 0x74,
-       0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 
0x61, 0x70, 0x69, 0x2e,
-       0x76, 0x31, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 
0x70, 0x65, 0x52, 0x04,
-       0x74, 0x79, 0x70, 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x74, 
0x65, 0x67, 0x6f, 0x72,
-       0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 
0x20, 0x01, 0x28, 0x0e,
-       0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 
0x6b, 0x52, 0x03, 0x73,
-       0x64, 0x6b, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 
0x72, 0x69, 0x65, 0x73,
-       0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 
0x2e, 0x76, 0x31, 0x2e,
-       0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x43, 
0x61, 0x74, 0x65, 0x67,
-       0x6f, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 
0x69, 0x65, 0x73, 0x1a,
-       0x5c, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 
0x23, 0x0a, 0x0d, 0x63,
-       0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 
0x18, 0x01, 0x20, 0x01,
-       0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 
0x4e, 0x61, 0x6d, 0x65,
-       0x12, 0x2b, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 
0x18, 0x02, 0x20, 0x03,
-       0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 
0x45, 0x78, 0x61, 0x6d,
-       0x70, 0x6c, 0x65, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 
0x73, 0x22, 0x52, 0x0a,
-       0x19, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x45, 0x78, 
0x61, 0x6d, 0x70, 0x6c,
-       0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 
0x0a, 0x0c, 0x73, 0x64,
-       0x6b, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 
0x20, 0x03, 0x28, 0x0b,
-       0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 
0x74, 0x65, 0x67, 0x6f,
-       0x72, 0x69, 0x65, 0x73, 0x52, 0x0b, 0x73, 0x64, 0x6b, 0x45, 0x78, 0x61, 
0x6d, 0x70, 0x6c, 0x65,
-       0x73, 0x22, 0x36, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x6d, 
0x70, 0x6c, 0x65, 0x52,
-       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 
0x61, 0x6d, 0x70, 0x6c,
-       0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 
0x52, 0x0b, 0x65, 0x78,
-       0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x28, 0x0a, 
0x12, 0x47, 0x65, 0x74,
-       0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 
0x6e, 0x73, 0x65, 0x12,
-       0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x04, 0x63,
-       0x6f, 0x64, 0x65, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 
0x0a, 0x0f, 0x53, 0x44,
-       0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 
0x44, 0x10, 0x00, 0x12,
-       0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 
0x01, 0x12, 0x0a, 0x0a,
-       0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 
0x0a, 0x53, 0x44, 0x4b,
-       0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 
0x08, 0x53, 0x44, 0x4b,
-       0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xd9, 0x01, 0x0a, 0x06, 
0x53, 0x74, 0x61, 0x74,
-       0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 
0x5f, 0x55, 0x4e, 0x53,
-       0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 
0x0a, 0x11, 0x53, 0x54,
-       0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 
0x49, 0x4e, 0x47, 0x10,
-       0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 
0x56, 0x41, 0x4c, 0x49,
-       0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 
0x10, 0x02, 0x12, 0x14,
-       0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 
0x50, 0x49, 0x4c, 0x49,
-       0x4e, 0x47, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 
0x55, 0x53, 0x5f, 0x43,
-       0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 
0x10, 0x04, 0x12, 0x14,
-       0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 
0x43, 0x55, 0x54, 0x49,
-       0x4e, 0x47, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 
0x55, 0x53, 0x5f, 0x46,
-       0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x06, 0x12, 0x10, 0x0a, 
0x0c, 0x53, 0x54, 0x41,
-       0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, 0x12, 
0x16, 0x0a, 0x12, 0x53,
-       0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 
0x4d, 0x45, 0x4f, 0x55,
-       0x54, 0x10, 0x08, 0x2a, 0x5a, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 
0x6c, 0x65, 0x54, 0x79,
-       0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 
0x45, 0x5f, 0x54, 0x59,
-       0x50, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 
0x12, 0x15, 0x0a, 0x11,
-       0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 
0x5f, 0x4b, 0x41, 0x54,
-       0x41, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x58, 0x41, 0x4d, 0x50, 
0x4c, 0x45, 0x5f, 0x54,
-       0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 
0x54, 0x10, 0x02, 0x32,
-       0xa5, 0x04, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 
0x6e, 0x64, 0x53, 0x65,
-       0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 
0x43, 0x6f, 0x64, 0x65,
-       0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 
0x6e, 0x43, 0x6f, 0x64,
-       0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 
0x70, 0x69, 0x2e, 0x76,
-       0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 
0x70, 0x6f, 0x6e, 0x73,
-       0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 
0x61, 0x74, 0x75, 0x73,
-       0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 
0x65, 0x63, 0x6b, 0x53,
-       0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 
0x1a, 0x1b, 0x2e, 0x61,
-       0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 
0x74, 0x61, 0x74, 0x75,
-       0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 
0x0c, 0x47, 0x65, 0x74,
-       0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 
0x61, 0x70, 0x69, 0x2e,
-       0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 
0x70, 0x75, 0x74, 0x52,
-       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 
0x2e, 0x76, 0x31, 0x2e,
-       0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 
0x52, 0x65, 0x73, 0x70,
-       0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 
0x6f, 0x6d, 0x70, 0x69,
-       0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 
0x70, 0x69, 0x2e, 0x76,
-       0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 
0x4f, 0x75, 0x74, 0x70,
-       0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 
0x61, 0x70, 0x69, 0x2e,
-       0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 
0x65, 0x4f, 0x75, 0x74,
-       0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 
0x58, 0x0a, 0x11, 0x47,
-       0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x45, 0x78, 0x61, 0x6d, 
0x70, 0x6c, 0x65, 0x73,
-       0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 
0x74, 0x4c, 0x69, 0x73,
-       0x74, 0x4f, 0x66, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 
0x65, 0x71, 0x75, 0x65,
-       0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 
0x47, 0x65, 0x74, 0x4c,
+       0x22, 0x39, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 
0x72, 0x6f, 0x72, 0x52,
+       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 
0x70, 0x65, 0x6c, 0x69,
+       0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x0c, 0x70,
+       0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 
0x2d, 0x0a, 0x13, 0x47,
+       0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 
0x73, 0x70, 0x6f, 0x6e,
+       0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 
0x18, 0x01, 0x20, 0x01,
+       0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x55, 
0x0a, 0x18, 0x47, 0x65,
+       0x74, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x45, 0x78, 0x61, 0x6d, 0x70, 
0x6c, 0x65, 0x73, 0x52,
+       0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 
0x6b, 0x18, 0x01, 0x20,
+       0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 
0x2e, 0x53, 0x64, 0x6b,
+       0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 
0x65, 0x67, 0x6f, 0x72,
+       0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 
0x65, 0x67, 0x6f, 0x72,
+       0x79, 0x22, 0x8b, 0x01, 0x0a, 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 
0x65, 0x12, 0x21, 0x0a,
+       0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x75, 0x75, 0x69, 
0x64, 0x18, 0x01, 0x20,
+       0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 
0x55, 0x75, 0x69, 0x64,
+       0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 
0x28, 0x09, 0x52, 0x04,
+       0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 
0x72, 0x69, 0x70, 0x74,
+       0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 
0x65, 0x73, 0x63, 0x72,
+       0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x04, 0x74, 0x79, 
0x70, 0x65, 0x18, 0x04,
+       0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 
0x31, 0x2e, 0x45, 0x78,
+       0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 
0x79, 0x70, 0x65, 0x22,
+       0xc6, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 
0x65, 0x73, 0x12, 0x1d,
+       0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 
0x0b, 0x2e, 0x61, 0x70,
+       0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 
0x6b, 0x12, 0x3b, 0x0a,
+       0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 
0x02, 0x20, 0x03, 0x28,
+       0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 
0x61, 0x74, 0x65, 0x67,
+       0x6f, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 
0x72, 0x79, 0x52, 0x0a,
+       0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x5c, 
0x0a, 0x08, 0x43, 0x61,
+       0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 
0x74, 0x65, 0x67, 0x6f,
+       0x72, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x0c, 0x63,
+       0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 
0x2b, 0x0a, 0x08, 0x65,
+       0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 
0x0b, 0x32, 0x0f, 0x2e,
+       0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 
0x6c, 0x65, 0x52, 0x08,
+       0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x52, 0x0a, 0x19, 
0x47, 0x65, 0x74, 0x4c,
        0x69, 0x73, 0x74, 0x4f, 0x66, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 
0x73, 0x52, 0x65, 0x73,
-       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 
0x45, 0x78, 0x61, 0x6d,
-       0x70, 0x6c, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 
0x2e, 0x47, 0x65, 0x74,
-       0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 
0x73, 0x74, 0x1a, 0x1a,
-       0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 
0x78, 0x61, 0x6d, 0x70,
-       0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 
0x0a, 0x10, 0x47, 0x65,
-       0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 
0x75, 0x74, 0x12, 0x19,
-       0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 
0x78, 0x61, 0x6d, 0x70,
-       0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 
0x61, 0x70, 0x69, 0x2e,
-       0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 
0x70, 0x75, 0x74, 0x52,
-       0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 
0x65, 0x61, 0x6d, 0x2e,
-       0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 
0x6c, 0x61, 0x79, 0x67,
-       0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 
0x64, 0x2f, 0x69, 0x6e,
-       0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 
0x72, 0x6f, 0x75, 0x6e,
-       0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x64, 0x6b, 
0x5f, 0x65, 0x78, 0x61,
+       0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 
0x12, 0x2e, 0x61, 0x70,
+       0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 
0x69, 0x65, 0x73, 0x52,
+       0x0b, 0x73, 0x64, 0x6b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 
0x22, 0x36, 0x0a, 0x11,
+       0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 
0x71, 0x75, 0x65, 0x73,
+       0x74, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 
0x5f, 0x75, 0x75, 0x69,
+       0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x61, 
0x6d, 0x70, 0x6c, 0x65,
+       0x55, 0x75, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x45, 
0x78, 0x61, 0x6d, 0x70,
+       0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 
0x0a, 0x04, 0x63, 0x6f,
+       0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 
0x64, 0x65, 0x2a, 0x52,
+       0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 
0x5f, 0x55, 0x4e, 0x53,
+       0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 
0x0a, 0x08, 0x53, 0x44,
+       0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 
0x53, 0x44, 0x4b, 0x5f,
+       0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 
0x50, 0x59, 0x54, 0x48,
+       0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 
0x53, 0x43, 0x49, 0x4f,
+       0x10, 0x04, 0x2a, 0xef, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 
0x73, 0x12, 0x16, 0x0a,
+       0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 
0x45, 0x43, 0x49, 0x46,
+       0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 
0x54, 0x55, 0x53, 0x5f,
+       0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 
0x12, 0x1b, 0x0a, 0x17,
+       0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 
0x41, 0x54, 0x49, 0x4f,
+       0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 
0x10, 0x53, 0x54, 0x41,
+       0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, 
0x47, 0x10, 0x03, 0x12,
+       0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 
0x4d, 0x50, 0x49, 0x4c,
+       0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, 
0x10, 0x53, 0x54, 0x41,
+       0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 
0x47, 0x10, 0x05, 0x12,
+       0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 
0x4e, 0x49, 0x53, 0x48,
+       0x45, 0x44, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 
0x55, 0x53, 0x5f, 0x52,
+       0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x10, 
0x0a, 0x0c, 0x53, 0x54,
+       0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x08, 
0x12, 0x16, 0x0a, 0x12,
+       0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 
0x49, 0x4d, 0x45, 0x4f,
+       0x55, 0x54, 0x10, 0x09, 0x2a, 0x5a, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 
0x70, 0x6c, 0x65, 0x54,
+       0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x58, 0x41, 0x4d, 0x50, 
0x4c, 0x45, 0x5f, 0x54,
+       0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 
0x00, 0x12, 0x15, 0x0a,
+       0x11, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 
0x45, 0x5f, 0x4b, 0x41,
+       0x54, 0x41, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x58, 0x41, 0x4d, 
0x50, 0x4c, 0x45, 0x5f,
+       0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 
0x53, 0x54, 0x10, 0x02,
+       0x32, 0xed, 0x04, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 
0x75, 0x6e, 0x64, 0x53,
+       0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 
0x6e, 0x43, 0x6f, 0x64,
+       0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 
0x75, 0x6e, 0x43, 0x6f,
+       0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 
0x61, 0x70, 0x69, 0x2e,
+       0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 
0x73, 0x70, 0x6f, 0x6e,
+       0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 
0x74, 0x61, 0x74, 0x75,
+       0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 
0x68, 0x65, 0x63, 0x6b,
+       0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 
0x74, 0x1a, 0x1b, 0x2e,
+       0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 
0x53, 0x74, 0x61, 0x74,
+       0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 
0x0a, 0x0c, 0x47, 0x65,
+       0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 
0x2e, 0x61, 0x70, 0x69,
+       0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 
0x74, 0x70, 0x75, 0x74,
+       0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 
0x69, 0x2e, 0x76, 0x31,
+       0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 
0x74, 0x52, 0x65, 0x73,
+       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 
0x52, 0x75, 0x6e, 0x45,
+       0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 
0x31, 0x2e, 0x47, 0x65,
+       0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 
0x75, 0x65, 0x73, 0x74,
+       0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 
0x74, 0x52, 0x75, 0x6e,
+       0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 
0x65, 0x12, 0x55, 0x0a,
+       0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 
0x75, 0x74, 0x70, 0x75,
+       0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 
0x65, 0x74, 0x43, 0x6f,
+       0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 
0x65, 0x71, 0x75, 0x65,
+       0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 
0x47, 0x65, 0x74, 0x43,
+       0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 
0x52, 0x65, 0x73, 0x70,
+       0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 
0x69, 0x73, 0x74, 0x4f,
+       0x66, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 
0x61, 0x70, 0x69, 0x2e,
+       0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 
0x45, 0x78, 0x61, 0x6d,
+       0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 
0x21, 0x2e, 0x61, 0x70,
+       0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 
0x4f, 0x66, 0x45, 0x78,
+       0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 
0x73, 0x65, 0x12, 0x43,
+       0x0a, 0x0a, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 
0x12, 0x19, 0x2e, 0x61,
+       0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 
0x6d, 0x70, 0x6c, 0x65,
+       0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 
0x69, 0x2e, 0x76, 0x31,
+       0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 
0x65, 0x73, 0x70, 0x6f,
+       0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x45, 0x78, 
0x61, 0x6d, 0x70, 0x6c,
+       0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 
0x69, 0x2e, 0x76, 0x31,
+       0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 
0x65, 0x71, 0x75, 0x65,
+       0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 
0x47, 0x65, 0x74, 0x52,
+       0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 
0x6f, 0x6e, 0x73, 0x65,
+       0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 
0x63, 0x68, 0x65, 0x2e,
+       0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 
0x6e, 0x64, 0x2f, 0x62,
+       0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 
0x6e, 0x61, 0x6c, 0x3b,
+       0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 
0x70, 0x72, 0x6f, 0x74,
+       0x6f, 0x33,
 }
 
 var (
@@ -1158,7 +1258,7 @@ func file_api_v1_api_proto_rawDescGZIP() []byte {
 }
 
 var file_api_v1_api_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_api_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
+var file_api_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
 var file_api_v1_api_proto_goTypes = []interface{}{
        (Sdk)(0),                          // 0: api.v1.Sdk
        (Status)(0),                       // 1: api.v1.Status
@@ -1171,44 +1271,47 @@ var file_api_v1_api_proto_goTypes = []interface{}{
        (*GetCompileOutputResponse)(nil),  // 8: api.v1.GetCompileOutputResponse
        (*GetRunOutputRequest)(nil),       // 9: api.v1.GetRunOutputRequest
        (*GetRunOutputResponse)(nil),      // 10: api.v1.GetRunOutputResponse
-       (*GetListOfExamplesRequest)(nil),  // 11: 
api.v1.GetListOfExamplesRequest
-       (*Example)(nil),                   // 12: api.v1.Example
-       (*Categories)(nil),                // 13: api.v1.Categories
-       (*GetListOfExamplesResponse)(nil), // 14: 
api.v1.GetListOfExamplesResponse
-       (*GetExampleRequest)(nil),         // 15: api.v1.GetExampleRequest
-       (*GetExampleResponse)(nil),        // 16: api.v1.GetExampleResponse
-       (*Categories_Category)(nil),       // 17: api.v1.Categories.Category
+       (*GetRunErrorRequest)(nil),        // 11: api.v1.GetRunErrorRequest
+       (*GetRunErrorResponse)(nil),       // 12: api.v1.GetRunErrorResponse
+       (*GetListOfExamplesRequest)(nil),  // 13: 
api.v1.GetListOfExamplesRequest
+       (*Example)(nil),                   // 14: api.v1.Example
+       (*Categories)(nil),                // 15: api.v1.Categories
+       (*GetListOfExamplesResponse)(nil), // 16: 
api.v1.GetListOfExamplesResponse
+       (*GetExampleRequest)(nil),         // 17: api.v1.GetExampleRequest
+       (*GetExampleResponse)(nil),        // 18: api.v1.GetExampleResponse
+       (*Categories_Category)(nil),       // 19: api.v1.Categories.Category
 }
 var file_api_v1_api_proto_depIdxs = []int32{
        0,  // 0: api.v1.RunCodeRequest.sdk:type_name -> api.v1.Sdk
        1,  // 1: api.v1.CheckStatusResponse.status:type_name -> api.v1.Status
        1,  // 2: api.v1.GetCompileOutputResponse.compilation_status:type_name 
-> api.v1.Status
-       1,  // 3: api.v1.GetRunOutputResponse.compilation_status:type_name -> 
api.v1.Status
-       0,  // 4: api.v1.GetListOfExamplesRequest.sdk:type_name -> api.v1.Sdk
-       2,  // 5: api.v1.Example.type:type_name -> api.v1.ExampleType
-       0,  // 6: api.v1.Categories.sdk:type_name -> api.v1.Sdk
-       17, // 7: api.v1.Categories.categories:type_name -> 
api.v1.Categories.Category
-       13, // 8: api.v1.GetListOfExamplesResponse.sdk_examples:type_name -> 
api.v1.Categories
-       12, // 9: api.v1.Categories.Category.examples:type_name -> 
api.v1.Example
-       3,  // 10: api.v1.PlaygroundService.RunCode:input_type -> 
api.v1.RunCodeRequest
-       5,  // 11: api.v1.PlaygroundService.CheckStatus:input_type -> 
api.v1.CheckStatusRequest
-       9,  // 12: api.v1.PlaygroundService.GetRunOutput:input_type -> 
api.v1.GetRunOutputRequest
+       0,  // 3: api.v1.GetListOfExamplesRequest.sdk:type_name -> api.v1.Sdk
+       2,  // 4: api.v1.Example.type:type_name -> api.v1.ExampleType
+       0,  // 5: api.v1.Categories.sdk:type_name -> api.v1.Sdk
+       19, // 6: api.v1.Categories.categories:type_name -> 
api.v1.Categories.Category
+       15, // 7: api.v1.GetListOfExamplesResponse.sdk_examples:type_name -> 
api.v1.Categories
+       14, // 8: api.v1.Categories.Category.examples:type_name -> 
api.v1.Example
+       3,  // 9: api.v1.PlaygroundService.RunCode:input_type -> 
api.v1.RunCodeRequest
+       5,  // 10: api.v1.PlaygroundService.CheckStatus:input_type -> 
api.v1.CheckStatusRequest
+       9,  // 11: api.v1.PlaygroundService.GetRunOutput:input_type -> 
api.v1.GetRunOutputRequest
+       11, // 12: api.v1.PlaygroundService.GetRunError:input_type -> 
api.v1.GetRunErrorRequest
        7,  // 13: api.v1.PlaygroundService.GetCompileOutput:input_type -> 
api.v1.GetCompileOutputRequest
-       11, // 14: api.v1.PlaygroundService.GetListOfExamples:input_type -> 
api.v1.GetListOfExamplesRequest
-       15, // 15: api.v1.PlaygroundService.GetExample:input_type -> 
api.v1.GetExampleRequest
-       15, // 16: api.v1.PlaygroundService.GetExampleOutput:input_type -> 
api.v1.GetExampleRequest
+       13, // 14: api.v1.PlaygroundService.GetListOfExamples:input_type -> 
api.v1.GetListOfExamplesRequest
+       17, // 15: api.v1.PlaygroundService.GetExample:input_type -> 
api.v1.GetExampleRequest
+       17, // 16: api.v1.PlaygroundService.GetExampleOutput:input_type -> 
api.v1.GetExampleRequest
        4,  // 17: api.v1.PlaygroundService.RunCode:output_type -> 
api.v1.RunCodeResponse
        6,  // 18: api.v1.PlaygroundService.CheckStatus:output_type -> 
api.v1.CheckStatusResponse
        10, // 19: api.v1.PlaygroundService.GetRunOutput:output_type -> 
api.v1.GetRunOutputResponse
-       8,  // 20: api.v1.PlaygroundService.GetCompileOutput:output_type -> 
api.v1.GetCompileOutputResponse
-       14, // 21: api.v1.PlaygroundService.GetListOfExamples:output_type -> 
api.v1.GetListOfExamplesResponse
-       16, // 22: api.v1.PlaygroundService.GetExample:output_type -> 
api.v1.GetExampleResponse
-       10, // 23: api.v1.PlaygroundService.GetExampleOutput:output_type -> 
api.v1.GetRunOutputResponse
-       17, // [17:24] is the sub-list for method output_type
-       10, // [10:17] is the sub-list for method input_type
-       10, // [10:10] is the sub-list for extension type_name
-       10, // [10:10] is the sub-list for extension extendee
-       0,  // [0:10] is the sub-list for field type_name
+       12, // 20: api.v1.PlaygroundService.GetRunError:output_type -> 
api.v1.GetRunErrorResponse
+       8,  // 21: api.v1.PlaygroundService.GetCompileOutput:output_type -> 
api.v1.GetCompileOutputResponse
+       16, // 22: api.v1.PlaygroundService.GetListOfExamples:output_type -> 
api.v1.GetListOfExamplesResponse
+       18, // 23: api.v1.PlaygroundService.GetExample:output_type -> 
api.v1.GetExampleResponse
+       10, // 24: api.v1.PlaygroundService.GetExampleOutput:output_type -> 
api.v1.GetRunOutputResponse
+       17, // [17:25] is the sub-list for method output_type
+       9,  // [9:17] is the sub-list for method input_type
+       9,  // [9:9] is the sub-list for extension type_name
+       9,  // [9:9] is the sub-list for extension extendee
+       0,  // [0:9] is the sub-list for field type_name
 }
 
 func init() { file_api_v1_api_proto_init() }
@@ -1314,7 +1417,7 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[8].Exporter = func(v 
interface{}, i int) interface{} {
-                       switch v := v.(*GetListOfExamplesRequest); i {
+                       switch v := v.(*GetRunErrorRequest); i {
                        case 0:
                                return &v.state
                        case 1:
@@ -1326,7 +1429,7 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[9].Exporter = func(v 
interface{}, i int) interface{} {
-                       switch v := v.(*Example); i {
+                       switch v := v.(*GetRunErrorResponse); i {
                        case 0:
                                return &v.state
                        case 1:
@@ -1338,7 +1441,7 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[10].Exporter = func(v 
interface{}, i int) interface{} {
-                       switch v := v.(*Categories); i {
+                       switch v := v.(*GetListOfExamplesRequest); i {
                        case 0:
                                return &v.state
                        case 1:
@@ -1350,7 +1453,7 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[11].Exporter = func(v 
interface{}, i int) interface{} {
-                       switch v := v.(*GetListOfExamplesResponse); i {
+                       switch v := v.(*Example); i {
                        case 0:
                                return &v.state
                        case 1:
@@ -1362,7 +1465,7 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[12].Exporter = func(v 
interface{}, i int) interface{} {
-                       switch v := v.(*GetExampleRequest); i {
+                       switch v := v.(*Categories); i {
                        case 0:
                                return &v.state
                        case 1:
@@ -1374,7 +1477,7 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[13].Exporter = func(v 
interface{}, i int) interface{} {
-                       switch v := v.(*GetExampleResponse); i {
+                       switch v := v.(*GetListOfExamplesResponse); i {
                        case 0:
                                return &v.state
                        case 1:
@@ -1386,6 +1489,30 @@ func file_api_v1_api_proto_init() {
                        }
                }
                file_api_v1_api_proto_msgTypes[14].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*GetExampleRequest); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_api_v1_api_proto_msgTypes[15].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*GetExampleResponse); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_api_v1_api_proto_msgTypes[16].Exporter = func(v 
interface{}, i int) interface{} {
                        switch v := v.(*Categories_Category); i {
                        case 0:
                                return &v.state
@@ -1404,7 +1531,7 @@ func file_api_v1_api_proto_init() {
                        GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
                        RawDescriptor: file_api_v1_api_proto_rawDesc,
                        NumEnums:      3,
-                       NumMessages:   15,
+                       NumMessages:   17,
                        NumExtensions: 0,
                        NumServices:   1,
                },
diff --git a/playground/backend/internal/api/v1/api_grpc.pb.go 
b/playground/backend/internal/api/v1/api_grpc.pb.go
index af31472..849723a 100644
--- a/playground/backend/internal/api/v1/api_grpc.pb.go
+++ b/playground/backend/internal/api/v1/api_grpc.pb.go
@@ -41,6 +41,8 @@ type PlaygroundServiceClient interface {
        CheckStatus(ctx context.Context, in *CheckStatusRequest, opts 
...grpc.CallOption) (*CheckStatusResponse, error)
        // Get the result of pipeline execution.
        GetRunOutput(ctx context.Context, in *GetRunOutputRequest, opts 
...grpc.CallOption) (*GetRunOutputResponse, error)
+       // Get the error of pipeline execution.
+       GetRunError(ctx context.Context, in *GetRunErrorRequest, opts 
...grpc.CallOption) (*GetRunErrorResponse, error)
        // Get the result of pipeline compilation.
        GetCompileOutput(ctx context.Context, in *GetCompileOutputRequest, opts 
...grpc.CallOption) (*GetCompileOutputResponse, error)
        // Get the list of precompiled examples.
@@ -86,6 +88,15 @@ func (c *playgroundServiceClient) GetRunOutput(ctx 
context.Context, in *GetRunOu
        return out, nil
 }
 
+func (c *playgroundServiceClient) GetRunError(ctx context.Context, in 
*GetRunErrorRequest, opts ...grpc.CallOption) (*GetRunErrorResponse, error) {
+       out := new(GetRunErrorResponse)
+       err := c.cc.Invoke(ctx, "/api.v1.PlaygroundService/GetRunError", in, 
out, opts...)
+       if err != nil {
+               return nil, err
+       }
+       return out, nil
+}
+
 func (c *playgroundServiceClient) GetCompileOutput(ctx context.Context, in 
*GetCompileOutputRequest, opts ...grpc.CallOption) (*GetCompileOutputResponse, 
error) {
        out := new(GetCompileOutputResponse)
        err := c.cc.Invoke(ctx, "/api.v1.PlaygroundService/GetCompileOutput", 
in, out, opts...)
@@ -132,6 +143,8 @@ type PlaygroundServiceServer interface {
        CheckStatus(context.Context, *CheckStatusRequest) 
(*CheckStatusResponse, error)
        // Get the result of pipeline execution.
        GetRunOutput(context.Context, *GetRunOutputRequest) 
(*GetRunOutputResponse, error)
+       // Get the error of pipeline execution.
+       GetRunError(context.Context, *GetRunErrorRequest) 
(*GetRunErrorResponse, error)
        // Get the result of pipeline compilation.
        GetCompileOutput(context.Context, *GetCompileOutputRequest) 
(*GetCompileOutputResponse, error)
        // Get the list of precompiled examples.
@@ -155,6 +168,9 @@ func (UnimplementedPlaygroundServiceServer) 
CheckStatus(context.Context, *CheckS
 func (UnimplementedPlaygroundServiceServer) GetRunOutput(context.Context, 
*GetRunOutputRequest) (*GetRunOutputResponse, error) {
        return nil, status.Errorf(codes.Unimplemented, "method GetRunOutput not 
implemented")
 }
+func (UnimplementedPlaygroundServiceServer) GetRunError(context.Context, 
*GetRunErrorRequest) (*GetRunErrorResponse, error) {
+       return nil, status.Errorf(codes.Unimplemented, "method GetRunError not 
implemented")
+}
 func (UnimplementedPlaygroundServiceServer) GetCompileOutput(context.Context, 
*GetCompileOutputRequest) (*GetCompileOutputResponse, error) {
        return nil, status.Errorf(codes.Unimplemented, "method GetCompileOutput 
not implemented")
 }
@@ -233,6 +249,24 @@ func _PlaygroundService_GetRunOutput_Handler(srv 
interface{}, ctx context.Contex
        return interceptor(ctx, in, info, handler)
 }
 
+func _PlaygroundService_GetRunError_Handler(srv interface{}, ctx 
context.Context, dec func(interface{}) error, interceptor 
grpc.UnaryServerInterceptor) (interface{}, error) {
+       in := new(GetRunErrorRequest)
+       if err := dec(in); err != nil {
+               return nil, err
+       }
+       if interceptor == nil {
+               return srv.(PlaygroundServiceServer).GetRunError(ctx, in)
+       }
+       info := &grpc.UnaryServerInfo{
+               Server:     srv,
+               FullMethod: "/api.v1.PlaygroundService/GetRunError",
+       }
+       handler := func(ctx context.Context, req interface{}) (interface{}, 
error) {
+               return srv.(PlaygroundServiceServer).GetRunError(ctx, 
req.(*GetRunErrorRequest))
+       }
+       return interceptor(ctx, in, info, handler)
+}
+
 func _PlaygroundService_GetCompileOutput_Handler(srv interface{}, ctx 
context.Context, dec func(interface{}) error, interceptor 
grpc.UnaryServerInterceptor) (interface{}, error) {
        in := new(GetCompileOutputRequest)
        if err := dec(in); err != nil {
@@ -325,6 +359,10 @@ var PlaygroundService_ServiceDesc = grpc.ServiceDesc{
                        Handler:    _PlaygroundService_GetRunOutput_Handler,
                },
                {
+                       MethodName: "GetRunError",
+                       Handler:    _PlaygroundService_GetRunError_Handler,
+               },
+               {
                        MethodName: "GetCompileOutput",
                        Handler:    _PlaygroundService_GetCompileOutput_Handler,
                },
diff --git a/playground/backend/internal/cache/cache.go 
b/playground/backend/internal/cache/cache.go
index f71ce89..50085f6 100644
--- a/playground/backend/internal/cache/cache.go
+++ b/playground/backend/internal/cache/cache.go
@@ -32,6 +32,9 @@ const (
        // RunOutput is used to keep run code output value
        RunOutput SubKey = "RUN_OUTPUT"
 
+       // RunError is used to keep run code error value
+       RunError SubKey = "RUN_ERROR"
+
        // CompileOutput is used to keep compilation output value
        CompileOutput SubKey = "COMPILE_OUTPUT"
 )
diff --git a/playground/backend/internal/cache/redis/redis_cache.go 
b/playground/backend/internal/cache/redis/redis_cache.go
index 03f427b..af24e34 100644
--- a/playground/backend/internal/cache/redis/redis_cache.go
+++ b/playground/backend/internal/cache/redis/redis_cache.go
@@ -102,7 +102,7 @@ func unmarshalBySubKey(subKey cache.SubKey, value string) 
(result interface{}, e
        case cache.Status:
                result = new(pb.Status)
                err = json.Unmarshal([]byte(value), &result)
-       case cache.RunOutput, cache.CompileOutput:
+       case cache.RunOutput, cache.RunError, cache.CompileOutput:
                result = ""
                err = json.Unmarshal([]byte(value), &result)
        }
diff --git a/playground/frontend/lib/api/v1/api.pb.dart 
b/playground/frontend/lib/api/v1/api.pb.dart
index 45cd80c..daa5a58 100644
--- a/playground/frontend/lib/api/v1/api.pb.dart
+++ b/playground/frontend/lib/api/v1/api.pb.dart
@@ -390,22 +390,17 @@ class GetRunOutputRequest extends $pb.GeneratedMessage {
 class GetRunOutputResponse extends $pb.GeneratedMessage {
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(const 
$core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 
'GetRunOutputResponse', package: const $pb.PackageName(const 
$core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), 
createEmptyInstance: create)
     ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? 
'' : 'output')
-    ..e<Status>(2, const 
$core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 
'compilationStatus', $pb.PbFieldType.OE, defaultOrMaker: 
Status.STATUS_UNSPECIFIED, valueOf: Status.valueOf, enumValues: Status.values)
     ..hasRequiredFields = false
   ;
 
   GetRunOutputResponse._() : super();
   factory GetRunOutputResponse({
     $core.String? output,
-    Status? compilationStatus,
   }) {
     final _result = create();
     if (output != null) {
       _result.output = output;
     }
-    if (compilationStatus != null) {
-      _result.compilationStatus = compilationStatus;
-    }
     return _result;
   }
   factory GetRunOutputResponse.fromBuffer($core.List<$core.int> i, 
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => 
create()..mergeFromBuffer(i, r);
@@ -437,15 +432,100 @@ class GetRunOutputResponse extends $pb.GeneratedMessage {
   $core.bool hasOutput() => $_has(0);
   @$pb.TagNumber(1)
   void clearOutput() => clearField(1);
+}
 
-  @$pb.TagNumber(2)
-  Status get compilationStatus => $_getN(1);
-  @$pb.TagNumber(2)
-  set compilationStatus(Status v) { setField(2, v); }
-  @$pb.TagNumber(2)
-  $core.bool hasCompilationStatus() => $_has(1);
-  @$pb.TagNumber(2)
-  void clearCompilationStatus() => clearField(2);
+class GetRunErrorRequest extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(const 
$core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 
'GetRunErrorRequest', package: const $pb.PackageName(const 
$core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), 
createEmptyInstance: create)
+    ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? 
'' : 'pipelineUuid')
+    ..hasRequiredFields = false
+  ;
+
+  GetRunErrorRequest._() : super();
+  factory GetRunErrorRequest({
+    $core.String? pipelineUuid,
+  }) {
+    final _result = create();
+    if (pipelineUuid != null) {
+      _result.pipelineUuid = pipelineUuid;
+    }
+    return _result;
+  }
+  factory GetRunErrorRequest.fromBuffer($core.List<$core.int> i, 
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => 
create()..mergeFromBuffer(i, r);
+  factory GetRunErrorRequest.fromJson($core.String i, [$pb.ExtensionRegistry r 
= $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GetRunErrorRequest clone() => GetRunErrorRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GetRunErrorRequest copyWith(void Function(GetRunErrorRequest) updates) => 
super.copyWith((message) => updates(message as GetRunErrorRequest)) as 
GetRunErrorRequest; // ignore: deprecated_member_use
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static GetRunErrorRequest create() => GetRunErrorRequest._();
+  GetRunErrorRequest createEmptyInstance() => create();
+  static $pb.PbList<GetRunErrorRequest> createRepeated() => 
$pb.PbList<GetRunErrorRequest>();
+  @$core.pragma('dart2js:noInline')
+  static GetRunErrorRequest getDefault() => _defaultInstance ??= 
$pb.GeneratedMessage.$_defaultFor<GetRunErrorRequest>(create);
+  static GetRunErrorRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get pipelineUuid => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set pipelineUuid($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasPipelineUuid() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearPipelineUuid() => clearField(1);
+}
+
+class GetRunErrorResponse extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(const 
$core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 
'GetRunErrorResponse', package: const $pb.PackageName(const 
$core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), 
createEmptyInstance: create)
+    ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? 
'' : 'output')
+    ..hasRequiredFields = false
+  ;
+
+  GetRunErrorResponse._() : super();
+  factory GetRunErrorResponse({
+    $core.String? output,
+  }) {
+    final _result = create();
+    if (output != null) {
+      _result.output = output;
+    }
+    return _result;
+  }
+  factory GetRunErrorResponse.fromBuffer($core.List<$core.int> i, 
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => 
create()..mergeFromBuffer(i, r);
+  factory GetRunErrorResponse.fromJson($core.String i, [$pb.ExtensionRegistry 
r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GetRunErrorResponse clone() => GetRunErrorResponse()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GetRunErrorResponse copyWith(void Function(GetRunErrorResponse) updates) => 
super.copyWith((message) => updates(message as GetRunErrorResponse)) as 
GetRunErrorResponse; // ignore: deprecated_member_use
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static GetRunErrorResponse create() => GetRunErrorResponse._();
+  GetRunErrorResponse createEmptyInstance() => create();
+  static $pb.PbList<GetRunErrorResponse> createRepeated() => 
$pb.PbList<GetRunErrorResponse>();
+  @$core.pragma('dart2js:noInline')
+  static GetRunErrorResponse getDefault() => _defaultInstance ??= 
$pb.GeneratedMessage.$_defaultFor<GetRunErrorResponse>(create);
+  static GetRunErrorResponse? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get output => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set output($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasOutput() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearOutput() => clearField(1);
 }
 
 class GetListOfExamplesRequest extends $pb.GeneratedMessage {
diff --git a/playground/frontend/lib/api/v1/api.pbenum.dart 
b/playground/frontend/lib/api/v1/api.pbenum.dart
index 973aae0..c9216ef 100644
--- a/playground/frontend/lib/api/v1/api.pbenum.dart
+++ b/playground/frontend/lib/api/v1/api.pbenum.dart
@@ -55,8 +55,9 @@ class Status extends $pb.ProtobufEnum {
   static const Status STATUS_COMPILE_ERROR = Status._(4, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 
'STATUS_COMPILE_ERROR');
   static const Status STATUS_EXECUTING = Status._(5, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 
'STATUS_EXECUTING');
   static const Status STATUS_FINISHED = Status._(6, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 
'STATUS_FINISHED');
-  static const Status STATUS_ERROR = Status._(7, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'STATUS_ERROR');
-  static const Status STATUS_RUN_TIMEOUT = Status._(8, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 
'STATUS_RUN_TIMEOUT');
+  static const Status STATUS_RUN_ERROR = Status._(7, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 
'STATUS_RUN_ERROR');
+  static const Status STATUS_ERROR = Status._(8, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'STATUS_ERROR');
+  static const Status STATUS_RUN_TIMEOUT = Status._(9, const 
$core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 
'STATUS_RUN_TIMEOUT');
 
   static const $core.List<Status> values = <Status> [
     STATUS_UNSPECIFIED,
@@ -66,6 +67,7 @@ class Status extends $pb.ProtobufEnum {
     STATUS_COMPILE_ERROR,
     STATUS_EXECUTING,
     STATUS_FINISHED,
+    STATUS_RUN_ERROR,
     STATUS_ERROR,
     STATUS_RUN_TIMEOUT,
   ];
diff --git a/playground/frontend/lib/api/v1/api.pbgrpc.dart 
b/playground/frontend/lib/api/v1/api.pbgrpc.dart
index f49c585..0ef8b83 100644
--- a/playground/frontend/lib/api/v1/api.pbgrpc.dart
+++ b/playground/frontend/lib/api/v1/api.pbgrpc.dart
@@ -49,6 +49,12 @@ class PlaygroundServiceClient extends $grpc.Client {
           ($0.GetRunOutputRequest value) => value.writeToBuffer(),
           ($core.List<$core.int> value) =>
               $0.GetRunOutputResponse.fromBuffer(value));
+  static final _$getRunError =
+      $grpc.ClientMethod<$0.GetRunErrorRequest, $0.GetRunErrorResponse>(
+          '/api.v1.PlaygroundService/GetRunError',
+          ($0.GetRunErrorRequest value) => value.writeToBuffer(),
+          ($core.List<$core.int> value) =>
+              $0.GetRunErrorResponse.fromBuffer(value));
   static final _$getCompileOutput = $grpc.ClientMethod<
           $0.GetCompileOutputRequest, $0.GetCompileOutputResponse>(
       '/api.v1.PlaygroundService/GetCompileOutput',
@@ -96,6 +102,12 @@ class PlaygroundServiceClient extends $grpc.Client {
     return $createUnaryCall(_$getRunOutput, request, options: options);
   }
 
+  $grpc.ResponseFuture<$0.GetRunErrorResponse> getRunError(
+      $0.GetRunErrorRequest request,
+      {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$getRunError, request, options: options);
+  }
+
   $grpc.ResponseFuture<$0.GetCompileOutputResponse> getCompileOutput(
       $0.GetCompileOutputRequest request,
       {$grpc.CallOptions? options}) {
@@ -150,6 +162,15 @@ abstract class PlaygroundServiceBase extends $grpc.Service 
{
             ($core.List<$core.int> value) =>
                 $0.GetRunOutputRequest.fromBuffer(value),
             ($0.GetRunOutputResponse value) => value.writeToBuffer()));
+    $addMethod(
+        $grpc.ServiceMethod<$0.GetRunErrorRequest, $0.GetRunErrorResponse>(
+            'GetRunError',
+            getRunError_Pre,
+            false,
+            false,
+            ($core.List<$core.int> value) =>
+                $0.GetRunErrorRequest.fromBuffer(value),
+            ($0.GetRunErrorResponse value) => value.writeToBuffer()));
     $addMethod($grpc.ServiceMethod<$0.GetCompileOutputRequest,
             $0.GetCompileOutputResponse>(
         'GetCompileOutput',
@@ -202,6 +223,11 @@ abstract class PlaygroundServiceBase extends $grpc.Service 
{
     return getRunOutput(call, await request);
   }
 
+  $async.Future<$0.GetRunErrorResponse> getRunError_Pre($grpc.ServiceCall call,
+      $async.Future<$0.GetRunErrorRequest> request) async {
+    return getRunError(call, await request);
+  }
+
   $async.Future<$0.GetCompileOutputResponse> getCompileOutput_Pre(
       $grpc.ServiceCall call,
       $async.Future<$0.GetCompileOutputRequest> request) async {
@@ -231,6 +257,8 @@ abstract class PlaygroundServiceBase extends $grpc.Service {
       $grpc.ServiceCall call, $0.CheckStatusRequest request);
   $async.Future<$0.GetRunOutputResponse> getRunOutput(
       $grpc.ServiceCall call, $0.GetRunOutputRequest request);
+  $async.Future<$0.GetRunErrorResponse> getRunError(
+      $grpc.ServiceCall call, $0.GetRunErrorRequest request);
   $async.Future<$0.GetCompileOutputResponse> getCompileOutput(
       $grpc.ServiceCall call, $0.GetCompileOutputRequest request);
   $async.Future<$0.GetListOfExamplesResponse> getListOfExamples(
diff --git a/playground/frontend/lib/api/v1/api.pbjson.dart 
b/playground/frontend/lib/api/v1/api.pbjson.dart
index 972ec2b..4ceced4 100644
--- a/playground/frontend/lib/api/v1/api.pbjson.dart
+++ b/playground/frontend/lib/api/v1/api.pbjson.dart
@@ -50,13 +50,14 @@ const Status$json = const {
     const {'1': 'STATUS_COMPILE_ERROR', '2': 4},
     const {'1': 'STATUS_EXECUTING', '2': 5},
     const {'1': 'STATUS_FINISHED', '2': 6},
-    const {'1': 'STATUS_ERROR', '2': 7},
-    const {'1': 'STATUS_RUN_TIMEOUT', '2': 8},
+    const {'1': 'STATUS_RUN_ERROR', '2': 7},
+    const {'1': 'STATUS_ERROR', '2': 8},
+    const {'1': 'STATUS_RUN_TIMEOUT', '2': 9},
   ],
 };
 
 /// Descriptor for `Status`. Decode as a `google.protobuf.EnumDescriptorProto`.
-final $typed_data.Uint8List statusDescriptor = 
$convert.base64Decode('CgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASFQoRU1RBVFVTX1ZBTElEQVRJTkcQARIbChdTVEFUVVNfVkFMSURBVElPTl9FUlJPUhACEhQKEFNUQVRVU19DT01QSUxJTkcQAxIYChRTVEFUVVNfQ09NUElMRV9FUlJPUhAEEhQKEFNUQVRVU19FWEVDVVRJTkcQBRITCg9TVEFUVVNfRklOSVNIRUQQBhIQCgxTVEFUVVNfRVJST1IQBxIWChJTVEFUVVNfUlVOX1RJTUVPVVQQCA==');
+final $typed_data.Uint8List statusDescriptor = 
$convert.base64Decode('CgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASFQoRU1RBVFVTX1ZBTElEQVRJTkcQARIbChdTVEFUVVNfVkFMSURBVElPTl9FUlJPUhACEhQKEFNUQVRVU19DT01QSUxJTkcQAxIYChRTVEFUVVNfQ09NUElMRV9FUlJPUhAEEhQKEFNUQVRVU19FWEVDVVRJTkcQBRITCg9TVEFUVVNfRklOSVNIRUQQBhIUChBTVEFUVVNfUlVOX0VSUk9SEAcSEAoMU1RBVFVTX0VSUk9SEAgSFgoSU1RBVFVTX1JVTl9USU1FT1VUEAk=');
 @$core.Deprecated('Use exampleTypeDescriptor instead')
 const ExampleType$json = const {
   '1': 'ExampleType',
@@ -146,12 +147,31 @@ const GetRunOutputResponse$json = const {
   '1': 'GetRunOutputResponse',
   '2': const [
     const {'1': 'output', '3': 1, '4': 1, '5': 9, '10': 'output'},
-    const {'1': 'compilation_status', '3': 2, '4': 1, '5': 14, '6': 
'.api.v1.Status', '10': 'compilationStatus'},
   ],
 };
 
 /// Descriptor for `GetRunOutputResponse`. Decode as a 
`google.protobuf.DescriptorProto`.
-final $typed_data.Uint8List getRunOutputResponseDescriptor = 
$convert.base64Decode('ChRHZXRSdW5PdXRwdXRSZXNwb25zZRIWCgZvdXRwdXQYASABKAlSBm91dHB1dBI9ChJjb21waWxhdGlvbl9zdGF0dXMYAiABKA4yDi5hcGkudjEuU3RhdHVzUhFjb21waWxhdGlvblN0YXR1cw==');
+final $typed_data.Uint8List getRunOutputResponseDescriptor = 
$convert.base64Decode('ChRHZXRSdW5PdXRwdXRSZXNwb25zZRIWCgZvdXRwdXQYASABKAlSBm91dHB1dA==');
+@$core.Deprecated('Use getRunErrorRequestDescriptor instead')
+const GetRunErrorRequest$json = const {
+  '1': 'GetRunErrorRequest',
+  '2': const [
+    const {'1': 'pipeline_uuid', '3': 1, '4': 1, '5': 9, '10': 'pipelineUuid'},
+  ],
+};
+
+/// Descriptor for `GetRunErrorRequest`. Decode as a 
`google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List getRunErrorRequestDescriptor = 
$convert.base64Decode('ChJHZXRSdW5FcnJvclJlcXVlc3QSIwoNcGlwZWxpbmVfdXVpZBgBIAEoCVIMcGlwZWxpbmVVdWlk');
+@$core.Deprecated('Use getRunErrorResponseDescriptor instead')
+const GetRunErrorResponse$json = const {
+  '1': 'GetRunErrorResponse',
+  '2': const [
+    const {'1': 'output', '3': 1, '4': 1, '5': 9, '10': 'output'},
+  ],
+};
+
+/// Descriptor for `GetRunErrorResponse`. Decode as a 
`google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List getRunErrorResponseDescriptor = 
$convert.base64Decode('ChNHZXRSdW5FcnJvclJlc3BvbnNlEhYKBm91dHB1dBgBIAEoCVIGb3V0cHV0');
 @$core.Deprecated('Use getListOfExamplesRequestDescriptor instead')
 const GetListOfExamplesRequest$json = const {
   '1': 'GetListOfExamplesRequest',

Reply via email to