diff --git a/lab-closure-group/.eslintignore b/lab-closure-group/.eslintignore
new file mode 100644
index 0000000..05b1cf3
--- /dev/null
+++ b/lab-closure-group/.eslintignore
@@ -0,0 +1,5 @@
+**/node_modules/*
+**/vendor/*
+**/*.min.js
+**/coverage/*
+**/build/*
diff --git a/lab-closure-group/.eslintrc.json b/lab-closure-group/.eslintrc.json
new file mode 100644
index 0000000..840d336
--- /dev/null
+++ b/lab-closure-group/.eslintrc.json
@@ -0,0 +1,26 @@
+{
+ "env": {
+ "browser": true,
+ "node": true,
+ "commonjs": true,
+ "jest": true,
+ "es6": true
+ },
+ "globals": {
+ "err": true,
+ "req": true,
+ "res": true,
+ "next": true
+ },
+ "extends": "eslint:recommended",
+ "parserOptions": {
+ "sourceType": "module"
+ },
+ "rules": {
+ "no-console": "off",
+ "indent": [ "error", 2 ],
+ "quotes": ["error", "single", { "allowTemplateLiterals": true }],
+ "comma-dangle": ["error", "always-multiline"],
+ "semi": [ "error", "always" ]
+ }
+}
diff --git a/lab-closure-group/.gitignore b/lab-closure-group/.gitignore
new file mode 100644
index 0000000..3583e8a
--- /dev/null
+++ b/lab-closure-group/.gitignore
@@ -0,0 +1,68 @@
+# Created by https://www.gitignore.io/api/osx,linux,node,vim
+
+### OSX ###
+.DS_Store
+.AppleDouble
+.LSOverride
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules
+jspm_packages
+
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
+### Vim ###
+# swap
+[._]*.s[a-w][a-z]
+[._]s[a-w][a-z]
+# session
+Session.vim
+# temporary
+.netrwhist
+*~
+
+# auto-generated tag files
+tags
+
+###### Personal
+.tern-project
diff --git a/lab-closure-group/README.md b/lab-closure-group/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/lab-closure-group/__test__/BitMapImage.test.js b/lab-closure-group/__test__/BitMapImage.test.js
new file mode 100644
index 0000000..554c10d
--- /dev/null
+++ b/lab-closure-group/__test__/BitMapImage.test.js
@@ -0,0 +1,46 @@
+'use strict';
+
+const reader = require('../lib/reader.js');
+const parser = require('../lib/parser.js');
+const BitMapImage = require('../lib/BitMapImage.js');
+
+describe('BitMapImage', () => {
+
+ test('BitMapImage should return a BitMapImage object with correct data for house.bmp.', (done) => {
+ reader(`${__dirname}/../../asset/house.bmp`, (err, data) => {
+ let parsedData = parser(data);
+ let result = new BitMapImage(parsedData);
+ expect(err).toBeNull();
+ expect(result.header).toEqual('BM');
+ expect(result.size).toEqual(66616);
+ expect(result.imageWidth).toEqual(256);
+ expect(result.imageHeight).toEqual(256);
+ expect(result.bitsPerPix).toEqual(8);
+ expect(result.sizeOfHeader).toEqual(40);
+ expect(result.pixelArrayOffset).toEqual(1078);
+ expect(result.pixelArraySize).toEqual(65536);
+ expect(result.colorTableSize).toEqual(1024);
+ expect(result.colorTableOffset).toEqual(54);
+ done();
+ });
+ });
+
+ test('BitMapImage should return a BitMapImage object with correct data for bitmap.bmp.', (done) => {
+ reader(`${__dirname}/../../asset/bitmap.bmp`, (err, data) => {
+ let parsedData = parser(data);
+ let result = new BitMapImage(parsedData);
+ expect(err).toBeNull();
+ expect(result.header).toEqual('BM');
+ expect(result.size).toEqual(11078);
+ expect(result.imageWidth).toEqual(100);
+ expect(result.imageHeight).toEqual(100);
+ expect(result.bitsPerPix).toEqual(8);
+ expect(result.sizeOfHeader).toEqual(40);
+ expect(result.pixelArrayOffset).toEqual(1078);
+ expect(result.pixelArraySize).toEqual(10000);
+ expect(result.colorTableSize).toEqual(1024);
+ expect(result.colorTableOffset).toEqual(54);
+ done();
+ });
+ });
+});
diff --git a/lab-closure-group/__test__/transform.test.js b/lab-closure-group/__test__/transform.test.js
new file mode 100644
index 0000000..3ed0e0d
--- /dev/null
+++ b/lab-closure-group/__test__/transform.test.js
@@ -0,0 +1,5 @@
+'use strict';
+
+const transform = require('../lib/transform.js');
+
+// Test each transformation... either in here, or separate test.js???? IDK again... lol
diff --git a/lab-closure-group/data/fingerBlue.bmp b/lab-closure-group/data/fingerBlue.bmp
new file mode 100644
index 0000000..1bc4170
Binary files /dev/null and b/lab-closure-group/data/fingerBlue.bmp differ
diff --git a/lab-closure-group/data/fingerFlipUp.bmp b/lab-closure-group/data/fingerFlipUp.bmp
new file mode 100644
index 0000000..b7cd025
Binary files /dev/null and b/lab-closure-group/data/fingerFlipUp.bmp differ
diff --git a/lab-closure-group/data/fingerGreen.bmp b/lab-closure-group/data/fingerGreen.bmp
new file mode 100644
index 0000000..6067f38
Binary files /dev/null and b/lab-closure-group/data/fingerGreen.bmp differ
diff --git a/lab-closure-group/data/fingerMirror.bmp b/lab-closure-group/data/fingerMirror.bmp
new file mode 100644
index 0000000..5db1492
Binary files /dev/null and b/lab-closure-group/data/fingerMirror.bmp differ
diff --git a/lab-closure-group/data/fingerNoise.bmp b/lab-closure-group/data/fingerNoise.bmp
new file mode 100644
index 0000000..7d1642a
Binary files /dev/null and b/lab-closure-group/data/fingerNoise.bmp differ
diff --git a/lab-closure-group/data/fingerRainbow.bmp b/lab-closure-group/data/fingerRainbow.bmp
new file mode 100644
index 0000000..972c3a7
Binary files /dev/null and b/lab-closure-group/data/fingerRainbow.bmp differ
diff --git a/lab-closure-group/data/fingerRed.bmp b/lab-closure-group/data/fingerRed.bmp
new file mode 100644
index 0000000..c2e6596
Binary files /dev/null and b/lab-closure-group/data/fingerRed.bmp differ
diff --git a/lab-closure-group/data/newbitmap.bmp b/lab-closure-group/data/newbitmap.bmp
new file mode 100644
index 0000000..0803bd1
Binary files /dev/null and b/lab-closure-group/data/newbitmap.bmp differ
diff --git a/lab-closure-group/index.js b/lab-closure-group/index.js
new file mode 100644
index 0000000..774c5b1
--- /dev/null
+++ b/lab-closure-group/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+const fs = require('fs');
+const BitMapImage = require('./lib/BitMapImage.js');
+const transform = require('./lib/transform.js');
+
+const inputFile = process.argv[2];
+const outputFile = process.argv[3];
+const option = process.argv[4];
+
+
+fs.readFile(`${__dirname}/../asset/${inputFile}`, (err, data) => {
+ if(err)
+ throw new Error('Usage: node index.js