{"action":"created","comment":{"url":"https://api.github.com/repos/sjbarag/brs/pulls/comments/239968294","pull_request_review_id":182901461,"id":239968294,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzOTk2ODI5NA==","diff_hunk":"@@ -28,6 +27,201 @@ export function getMemfsPath(fileUri: string) {\n     return new URL(fileUri).pathname;\n }\n \n+/** Copies a file from src to dst, return true if successful */\n+export const CopyFile = new Callable(\n+    \"CopyFile\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"source\", type: ValueKind.String},\n+                {name: \"destination\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Boolean\n+        },\n+        impl: (interpreter: Interpreter, src: BrsString, dst: BrsString) => {\n+            const srcVolume = getVolumeByPath(interpreter, src.value);\n+            if (srcVolume === null) {\n+                return BrsBoolean.False;\n+            }\n+            const dstVolume = getVolumeByPath(interpreter, dst.value);\n+            if (dstVolume === null) {\n+                return BrsBoolean.False;\n+            }\n+\n+            const srcMemfsPath = getMemfsPath(src.value);\n+            const dstMemfsPath = getMemfsPath(dst.value);\n+            try {\n+                let contents = srcVolume.readFileSync(srcMemfsPath);\n+                dstVolume.writeFileSync(dstMemfsPath, contents);\n+                return BrsBoolean.True;\n+            } catch (err) {\n+                return BrsBoolean.False;\n+            }\n+        }\n+    }\n+);\n+\n+/** Copies a file from src to dst, return true if successful */\n+export const MoveFile = new Callable(\n+    \"MoveFile\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"source\", type: ValueKind.String},\n+                {name: \"destination\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Boolean\n+        },\n+        impl: (interpreter: Interpreter, src: BrsString, dst: BrsString) => {\n+            const srcVolume = getVolumeByPath(interpreter, src.value);\n+            if (srcVolume === null) {\n+                return BrsBoolean.False;\n+            }\n+            const dstVolume = getVolumeByPath(interpreter, dst.value);\n+            if (dstVolume === null) {\n+                return BrsBoolean.False;\n+            }\n+\n+            const srcMemfsPath = getMemfsPath(src.value);\n+            const dstMemfsPath = getMemfsPath(dst.value);\n+            try {\n+                let contents = srcVolume.readFileSync(srcMemfsPath);\n+                dstVolume.writeFileSync(dstMemfsPath, contents);\n+                srcVolume.unlinkSync(srcMemfsPath);\n+                return BrsBoolean.True;\n+            } catch (err) {\n+                return BrsBoolean.False;\n+            }\n+        }\n+    }\n+);\n+\n+/** Deletes a file, return true if successful */\n+export const DeleteFile = new Callable(\n+    \"DeleteFile\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"file\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Boolean\n+        },\n+        impl: (interpreter: Interpreter, file: BrsString) => {\n+            const volume = getVolumeByPath(interpreter, file.value);\n+            if (volume === null) {\n+                return BrsBoolean.False;\n+            }\n+\n+            const memfsPath = getMemfsPath(file.value);\n+            try {\n+                volume.unlinkSync(memfsPath);\n+                return BrsBoolean.True;\n+            } catch (err) {\n+                return BrsBoolean.False;\n+            }\n+        }\n+    }\n+);\n+\n+/** Deletes a directory (if empty), return true if successful */\n+export const DeleteDirectory = new Callable(\n+    \"DeleteDirectory\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"dir\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Boolean\n+        },\n+        impl: (interpreter: Interpreter, dir: BrsString) => {\n+            const volume = getVolumeByPath(interpreter, dir.value);\n+            if (volume === null) {\n+                return BrsBoolean.False;\n+            }\n+\n+            const memfsPath = getMemfsPath(dir.value);\n+            try {\n+                volume.rmdirSync(memfsPath);\n+                return BrsBoolean.True;\n+            } catch (err) {\n+                return BrsBoolean.False;\n+            }\n+        }\n+    }\n+);\n+\n+/** Creates a directory, return true if successful */\n+export const CreateDirectory = new Callable(\n+    \"CreateDirectory\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"dir\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Boolean\n+        },\n+        impl: (interpreter: Interpreter, dir: BrsString) => {\n+            const volume = getVolumeByPath(interpreter, dir.value);\n+            if (volume === null) {\n+                return BrsBoolean.False;\n+            }\n+\n+            const memfsPath = getMemfsPath(dir.value);\n+            try {\n+                volume.mkdirSync(memfsPath);\n+                return BrsBoolean.True;\n+            } catch (err) {\n+                return BrsBoolean.False;\n+            }\n+        }\n+    }\n+);\n+\n+/** Stubbed function for formatting a drive; always returns false */\n+export const FormatDrive = new Callable(\n+    \"FormatDrive\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"drive\", type: ValueKind.String},\n+                {name: \"fs_type\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Boolean\n+        },\n+        impl: (interpreter: Interpreter, dir: BrsString) => {\n+            console.warn(\"`FormatDrive` is not implemented in `brs`.\");\n+            return BrsBoolean.False;\n+        }\n+    }\n+);\n+\n+/** Returns an array of paths in a directory */\n+export const ListDir = new Callable(\n+    \"ListDir\",\n+    {\n+        signature: {\n+            args: [\n+                {name: \"path\", type: ValueKind.String}\n+            ],\n+            returns: ValueKind.Array // TODO: change this to roList when available","path":"src/stdlib/File.ts","position":200,"original_position":200,"commit_id":"7a67ac429b096b55b3de9dc1b988b6f343c09476","original_commit_id":"7a67ac429b096b55b3de9dc1b988b6f343c09476","user":{"login":"sjbarag","id":665775,"node_id":"MDQ6VXNlcjY2NTc3NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/665775?v=4","gravatar_id":"","url":"https://api.github.com/users/sjbarag","html_url":"https://github.com/sjbarag","followers_url":"https://api.github.com/users/sjbarag/followers","following_url":"https://api.github.com/users/sjbarag/following{/other_user}","gists_url":"https://api.github.com/users/sjbarag/gists{/gist_id}","starred_url":"https://api.github.com/users/sjbarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjbarag/subscriptions","organizations_url":"https://api.github.com/users/sjbarag/orgs","repos_url":"https://api.github.com/users/sjbarag/repos","events_url":"https://api.github.com/users/sjbarag/events{/privacy}","received_events_url":"https://api.github.com/users/sjbarag/received_events","type":"User","site_admin":false},"body":"re: your todo – this'll likely be `ValueKind.Object` for `roList`, which matches the docs pretty nicely IMO","created_at":"2018-12-07T22:45:53Z","updated_at":"2018-12-07T22:49:11Z","html_url":"https://github.com/sjbarag/brs/pull/106#discussion_r239968294","pull_request_url":"https://api.github.com/repos/sjbarag/brs/pulls/106","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/sjbarag/brs/pulls/comments/239968294"},"html":{"href":"https://github.com/sjbarag/brs/pull/106#discussion_r239968294"},"pull_request":{"href":"https://api.github.com/repos/sjbarag/brs/pulls/106"}}},"pull_request":{"url":"https://api.github.com/repos/sjbarag/brs/pulls/106","id":236628159,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM2NjI4MTU5","html_url":"https://github.com/sjbarag/brs/pull/106","diff_url":"https://github.com/sjbarag/brs/pull/106.diff","patch_url":"https://github.com/sjbarag/brs/pull/106.patch","issue_url":"https://api.github.com/repos/sjbarag/brs/issues/106","number":106,"state":"open","locked":false,"title":"implements file I/O operations for issue #87","user":{"login":"strattonbrazil","id":786471,"node_id":"MDQ6VXNlcjc4NjQ3MQ==","avatar_url":"https://avatars2.githubusercontent.com/u/786471?v=4","gravatar_id":"","url":"https://api.github.com/users/strattonbrazil","html_url":"https://github.com/strattonbrazil","followers_url":"https://api.github.com/users/strattonbrazil/followers","following_url":"https://api.github.com/users/strattonbrazil/following{/other_user}","gists_url":"https://api.github.com/users/strattonbrazil/gists{/gist_id}","starred_url":"https://api.github.com/users/strattonbrazil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strattonbrazil/subscriptions","organizations_url":"https://api.github.com/users/strattonbrazil/orgs","repos_url":"https://api.github.com/users/strattonbrazil/repos","events_url":"https://api.github.com/users/strattonbrazil/events{/privacy}","received_events_url":"https://api.github.com/users/strattonbrazil/received_events","type":"User","site_admin":false},"body":"This implements the file functions not already covered with the exception of MatchFiles, which I'll move to another issue.  Most of these functions wrap existing fs functions that have similar behavior (ex. not allowing deletion of a non-empty directory).  \r\n\r\nFunctions defined include:\r\n* ListDir\r\n* CopyFile\r\n* MoveFile\r\n* DeleteFile\r\n* DeleteDirectory\r\n* CreateDirectory\r\n* FormatDrive\r\n\r\nAlthough, _FormatDrive_ is stubbed as not implemented.  \r\n\r\nCloses #87","created_at":"2018-12-06T18:29:02Z","updated_at":"2018-12-07T22:49:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a37491bc03492900c1c29b65a967f6e69cc8e5d8","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":785909273,"node_id":"MDU6TGFiZWw3ODU5MDkyNzM=","url":"https://api.github.com/repos/sjbarag/brs/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":892783959,"node_id":"MDU6TGFiZWw4OTI3ODM5NTk=","url":"https://api.github.com/repos/sjbarag/brs/labels/stdlib","name":"stdlib","color":"72e5a6","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/sjbarag/brs/pulls/106/commits","review_comments_url":"https://api.github.com/repos/sjbarag/brs/pulls/106/comments","review_comment_url":"https://api.github.com/repos/sjbarag/brs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sjbarag/brs/issues/106/comments","statuses_url":"https://api.github.com/repos/sjbarag/brs/statuses/7a67ac429b096b55b3de9dc1b988b6f343c09476","head":{"label":"sjbarag:issue/87","ref":"issue/87","sha":"7a67ac429b096b55b3de9dc1b988b6f343c09476","user":{"login":"sjbarag","id":665775,"node_id":"MDQ6VXNlcjY2NTc3NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/665775?v=4","gravatar_id":"","url":"https://api.github.com/users/sjbarag","html_url":"https://github.com/sjbarag","followers_url":"https://api.github.com/users/sjbarag/followers","following_url":"https://api.github.com/users/sjbarag/following{/other_user}","gists_url":"https://api.github.com/users/sjbarag/gists{/gist_id}","starred_url":"https://api.github.com/users/sjbarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjbarag/subscriptions","organizations_url":"https://api.github.com/users/sjbarag/orgs","repos_url":"https://api.github.com/users/sjbarag/repos","events_url":"https://api.github.com/users/sjbarag/events{/privacy}","received_events_url":"https://api.github.com/users/sjbarag/received_events","type":"User","site_admin":false},"repo":{"id":115140058,"node_id":"MDEwOlJlcG9zaXRvcnkxMTUxNDAwNTg=","name":"brs","full_name":"sjbarag/brs","private":false,"owner":{"login":"sjbarag","id":665775,"node_id":"MDQ6VXNlcjY2NTc3NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/665775?v=4","gravatar_id":"","url":"https://api.github.com/users/sjbarag","html_url":"https://github.com/sjbarag","followers_url":"https://api.github.com/users/sjbarag/followers","following_url":"https://api.github.com/users/sjbarag/following{/other_user}","gists_url":"https://api.github.com/users/sjbarag/gists{/gist_id}","starred_url":"https://api.github.com/users/sjbarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjbarag/subscriptions","organizations_url":"https://api.github.com/users/sjbarag/orgs","repos_url":"https://api.github.com/users/sjbarag/repos","events_url":"https://api.github.com/users/sjbarag/events{/privacy}","received_events_url":"https://api.github.com/users/sjbarag/received_events","type":"User","site_admin":false},"html_url":"https://github.com/sjbarag/brs","description":"An interpreter for the BrightScript language that runs on non-Roku platforms.","fork":false,"url":"https://api.github.com/repos/sjbarag/brs","forks_url":"https://api.github.com/repos/sjbarag/brs/forks","keys_url":"https://api.github.com/repos/sjbarag/brs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sjbarag/brs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sjbarag/brs/teams","hooks_url":"https://api.github.com/repos/sjbarag/brs/hooks","issue_events_url":"https://api.github.com/repos/sjbarag/brs/issues/events{/number}","events_url":"https://api.github.com/repos/sjbarag/brs/events","assignees_url":"https://api.github.com/repos/sjbarag/brs/assignees{/user}","branches_url":"https://api.github.com/repos/sjbarag/brs/branches{/branch}","tags_url":"https://api.github.com/repos/sjbarag/brs/tags","blobs_url":"https://api.github.com/repos/sjbarag/brs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sjbarag/brs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sjbarag/brs/git/refs{/sha}","trees_url":"https://api.github.com/repos/sjbarag/brs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sjbarag/brs/statuses/{sha}","languages_url":"https://api.github.com/repos/sjbarag/brs/languages","stargazers_url":"https://api.github.com/repos/sjbarag/brs/stargazers","contributors_url":"https://api.github.com/repos/sjbarag/brs/contributors","subscribers_url":"https://api.github.com/repos/sjbarag/brs/subscribers","subscription_url":"https://api.github.com/repos/sjbarag/brs/subscription","commits_url":"https://api.github.com/repos/sjbarag/brs/commits{/sha}","git_commits_url":"https://api.github.com/repos/sjbarag/brs/git/commits{/sha}","comments_url":"https://api.github.com/repos/sjbarag/brs/comments{/number}","issue_comment_url":"https://api.github.com/repos/sjbarag/brs/issues/comments{/number}","contents_url":"https://api.github.com/repos/sjbarag/brs/contents/{+path}","compare_url":"https://api.github.com/repos/sjbarag/brs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sjbarag/brs/merges","archive_url":"https://api.github.com/repos/sjbarag/brs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sjbarag/brs/downloads","issues_url":"https://api.github.com/repos/sjbarag/brs/issues{/number}","pulls_url":"https://api.github.com/repos/sjbarag/brs/pulls{/number}","milestones_url":"https://api.github.com/repos/sjbarag/brs/milestones{/number}","notifications_url":"https://api.github.com/repos/sjbarag/brs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sjbarag/brs/labels{/name}","releases_url":"https://api.github.com/repos/sjbarag/brs/releases{/id}","deployments_url":"https://api.github.com/repos/sjbarag/brs/deployments","created_at":"2017-12-22T18:20:07Z","updated_at":"2018-12-06T19:56:18Z","pushed_at":"2018-12-07T21:04:59Z","git_url":"git://github.com/sjbarag/brs.git","ssh_url":"git@github.com:sjbarag/brs.git","clone_url":"https://github.com/sjbarag/brs.git","svn_url":"https://github.com/sjbarag/brs","homepage":null,"size":624,"stargazers_count":20,"watchers_count":20,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":11,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":7,"open_issues":11,"watchers":20,"default_branch":"master"}},"base":{"label":"sjbarag:master","ref":"master","sha":"128d5217e3d5c8592c04c7ff0d01d0c7165e14fd","user":{"login":"sjbarag","id":665775,"node_id":"MDQ6VXNlcjY2NTc3NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/665775?v=4","gravatar_id":"","url":"https://api.github.com/users/sjbarag","html_url":"https://github.com/sjbarag","followers_url":"https://api.github.com/users/sjbarag/followers","following_url":"https://api.github.com/users/sjbarag/following{/other_user}","gists_url":"https://api.github.com/users/sjbarag/gists{/gist_id}","starred_url":"https://api.github.com/users/sjbarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjbarag/subscriptions","organizations_url":"https://api.github.com/users/sjbarag/orgs","repos_url":"https://api.github.com/users/sjbarag/repos","events_url":"https://api.github.com/users/sjbarag/events{/privacy}","received_events_url":"https://api.github.com/users/sjbarag/received_events","type":"User","site_admin":false},"repo":{"id":115140058,"node_id":"MDEwOlJlcG9zaXRvcnkxMTUxNDAwNTg=","name":"brs","full_name":"sjbarag/brs","private":false,"owner":{"login":"sjbarag","id":665775,"node_id":"MDQ6VXNlcjY2NTc3NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/665775?v=4","gravatar_id":"","url":"https://api.github.com/users/sjbarag","html_url":"https://github.com/sjbarag","followers_url":"https://api.github.com/users/sjbarag/followers","following_url":"https://api.github.com/users/sjbarag/following{/other_user}","gists_url":"https://api.github.com/users/sjbarag/gists{/gist_id}","starred_url":"https://api.github.com/users/sjbarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjbarag/subscriptions","organizations_url":"https://api.github.com/users/sjbarag/orgs","repos_url":"https://api.github.com/users/sjbarag/repos","events_url":"https://api.github.com/users/sjbarag/events{/privacy}","received_events_url":"https://api.github.com/users/sjbarag/received_events","type":"User","site_admin":false},"html_url":"https://github.com/sjbarag/brs","description":"An interpreter for the BrightScript language that runs on non-Roku platforms.","fork":false,"url":"https://api.github.com/repos/sjbarag/brs","forks_url":"https://api.github.com/repos/sjbarag/brs/forks","keys_url":"https://api.github.com/repos/sjbarag/brs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sjbarag/brs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sjbarag/brs/teams","hooks_url":"https://api.github.com/repos/sjbarag/brs/hooks","issue_events_url":"https://api.github.com/repos/sjbarag/brs/issues/events{/number}","events_url":"https://api.github.com/repos/sjbarag/brs/events","assignees_url":"https://api.github.com/repos/sjbarag/brs/assignees{/user}","branches_url":"https://api.github.com/repos/sjbarag/brs/branches{/branch}","tags_url":"https://api.github.com/repos/sjbarag/brs/tags","blobs_url":"https://api.github.com/repos/sjbarag/brs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sjbarag/brs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sjbarag/brs/git/refs{/sha}","trees_url":"https://api.github.com/repos/sjbarag/brs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sjbarag/brs/statuses/{sha}","languages_url":"https://api.github.com/repos/sjbarag/brs/languages","stargazers_url":"https://api.github.com/repos/sjbarag/brs/stargazers","contributors_url":"https://api.github.com/repos/sjbarag/brs/contributors","subscribers_url":"https://api.github.com/repos/sjbarag/brs/subscribers","subscription_url":"https://api.github.com/repos/sjbarag/brs/subscription","commits_url":"https://api.github.com/repos/sjbarag/brs/commits{/sha}","git_commits_url":"https://api.github.com/repos/sjbarag/brs/git/commits{/sha}","comments_url":"https://api.github.com/repos/sjbarag/brs/comments{/number}","issue_comment_url":"https://api.github.com/repos/sjbarag/brs/issues/comments{/number}","contents_url":"https://api.github.com/repos/sjbarag/brs/contents/{+path}","compare_url":"https://api.github.com/repos/sjbarag/brs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sjbarag/brs/merges","archive_url":"https://api.github.com/repos/sjbarag/brs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sjbarag/brs/downloads","issues_url":"https://api.github.com/repos/sjbarag/brs/issues{/number}","pulls_url":"https://api.github.com/repos/sjbarag/brs/pulls{/number}","milestones_url":"https://api.github.com/repos/sjbarag/brs/milestones{/number}","notifications_url":"https://api.github.com/repos/sjbarag/brs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sjbarag/brs/labels{/name}","releases_url":"https://api.github.com/repos/sjbarag/brs/releases{/id}","deployments_url":"https://api.github.com/repos/sjbarag/brs/deployments","created_at":"2017-12-22T18:20:07Z","updated_at":"2018-12-06T19:56:18Z","pushed_at":"2018-12-07T21:04:59Z","git_url":"git://github.com/sjbarag/brs.git","ssh_url":"git@github.com:sjbarag/brs.git","clone_url":"https://github.com/sjbarag/brs.git","svn_url":"https://github.com/sjbarag/brs","homepage":null,"size":624,"stargazers_count":20,"watchers_count":20,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":11,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":7,"open_issues":11,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/sjbarag/brs/pulls/106"},"html":{"href":"https://github.com/sjbarag/brs/pull/106"},"issue":{"href":"https://api.github.com/repos/sjbarag/brs/issues/106"},"comments":{"href":"https://api.github.com/repos/sjbarag/brs/issues/106/comments"},"review_comments":{"href":"https://api.github.com/repos/sjbarag/brs/pulls/106/comments"},"review_comment":{"href":"https://api.github.com/repos/sjbarag/brs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sjbarag/brs/pulls/106/commits"},"statuses":{"href":"https://api.github.com/repos/sjbarag/brs/statuses/7a67ac429b096b55b3de9dc1b988b6f343c09476"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"sjbarag"}}