diff --git a/static/css/iconfont.css b/static/css/iconfont.css
new file mode 100644
index 0000000..4f09fdd
--- /dev/null
+++ b/static/css/iconfont.css
@@ -0,0 +1,121 @@
+@font-face {font-family: "custom-icon";
+  src: 
+  url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2');
+}
+
+.custom-icon {
+  font-family: "custom-icon" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.custom-icon-question:before {
+  content: "\e60d";
+}
+
+.custom-icon-offlineHelp:before {
+  content: "\e613";
+}
+
+.custom-icon-leaveMsg:before {
+  content: "\e630";
+}
+
+.custom-icon-phone:before {
+  content: "\e66f";
+}
+
+.custom-icon-sign:before {
+  content: "\e636";
+}
+
+.custom-icon-login:before {
+  content: "\e7c0";
+}
+
+.custom-icon-pay:before {
+  content: "\e6a1";
+}
+
+.custom-icon-finger:before {
+  content: "\e631";
+}
+
+.custom-icon-message:before {
+  content: "\e646";
+}
+
+.custom-icon-bills:before {
+  content: "\e61b";
+}
+
+.custom-icon-safe:before {
+  content: "\ec4d";
+}
+
+.custom-icon-voucher:before {
+  content: "\e62c";
+}
+
+.custom-icon-integral:before {
+  content: "\e63d";
+}
+
+.custom-icon-shouji:before {
+  content: "\e63c";
+}
+
+.custom-icon-code:before {
+  content: "\e865";
+}
+
+.custom-icon-zx:before {
+  content: "\e700";
+}
+
+.custom-icon-kefu:before {
+  content: "\e60f";
+}
+
+.custom-icon-robot:before {
+  content: "\e627";
+}
+
+.custom-icon-cardid:before {
+  content: "\e645";
+}
+
+.custom-icon-card:before {
+  content: "\e782";
+}
+
+.custom-icon-jc:before {
+  content: "\e66d";
+}
+
+.custom-icon-gs:before {
+  content: "\e611";
+}
+
+.custom-icon-id:before {
+  content: "\e674";
+}
+
+.custom-icon-money:before {
+  content: "\e602";
+}
+
+.custom-icon-reflash:before {
+  content: "\e644";
+}
+
+.custom-icon-face:before {
+  content: "\e655";
+}
+
+.custom-icon-hands:before {
+  content: "\e6a0";
+}
+
diff --git a/static/images/activateCard/photo.png b/static/images/activateCard/photo.png
new file mode 100644
index 0000000..a8cd705
--- /dev/null
+++ b/static/images/activateCard/photo.png
Binary files differ
diff --git a/static/images/activateCard/photo1.png b/static/images/activateCard/photo1.png
new file mode 100644
index 0000000..4b3809d
--- /dev/null
+++ b/static/images/activateCard/photo1.png
Binary files differ
diff --git a/static/images/activateCard/photo2.png b/static/images/activateCard/photo2.png
new file mode 100644
index 0000000..e3a7b50
--- /dev/null
+++ b/static/images/activateCard/photo2.png
Binary files differ
diff --git a/static/images/active/ccc.png b/static/images/active/ccc.png
new file mode 100644
index 0000000..227a1f0
--- /dev/null
+++ b/static/images/active/ccc.png
Binary files differ
diff --git a/static/images/active/mrlfl.png b/static/images/active/mrlfl.png
new file mode 100644
index 0000000..71a4a79
--- /dev/null
+++ b/static/images/active/mrlfl.png
Binary files differ
diff --git a/static/images/active/scdhjf.png b/static/images/active/scdhjf.png
new file mode 100644
index 0000000..6ea8cc3
--- /dev/null
+++ b/static/images/active/scdhjf.png
Binary files differ
diff --git a/static/images/active/scxfhb.png b/static/images/active/scxfhb.png
new file mode 100644
index 0000000..b211619
--- /dev/null
+++ b/static/images/active/scxfhb.png
Binary files differ
diff --git a/static/images/active/sfrzhb.png b/static/images/active/sfrzhb.png
new file mode 100644
index 0000000..03d9e0a
--- /dev/null
+++ b/static/images/active/sfrzhb.png
Binary files differ
diff --git a/static/images/busQrcode/bus.png b/static/images/busQrcode/bus.png
new file mode 100644
index 0000000..e2cd8a7
--- /dev/null
+++ b/static/images/busQrcode/bus.png
Binary files differ
diff --git a/static/images/busQrcode/ccjl.png b/static/images/busQrcode/ccjl.png
new file mode 100644
index 0000000..6bea321
--- /dev/null
+++ b/static/images/busQrcode/ccjl.png
Binary files differ
diff --git a/static/images/busQrcode/cklx.png b/static/images/busQrcode/cklx.png
new file mode 100644
index 0000000..0374fd4
--- /dev/null
+++ b/static/images/busQrcode/cklx.png
Binary files differ
diff --git a/static/images/busQrcode/laba.png b/static/images/busQrcode/laba.png
new file mode 100644
index 0000000..7fec353
--- /dev/null
+++ b/static/images/busQrcode/laba.png
Binary files differ
diff --git a/static/images/cardApply/banner.png b/static/images/cardApply/banner.png
new file mode 100644
index 0000000..b84c2f8
--- /dev/null
+++ b/static/images/cardApply/banner.png
Binary files differ
diff --git a/static/images/index/all.png b/static/images/index/all.png
new file mode 100644
index 0000000..4de6d5b
--- /dev/null
+++ b/static/images/index/all.png
Binary files differ
diff --git a/static/images/index/bannar.png b/static/images/index/bannar.png
new file mode 100644
index 0000000..7b93e96
--- /dev/null
+++ b/static/images/index/bannar.png
Binary files differ
diff --git a/static/images/index/bannar01.png b/static/images/index/bannar01.png
new file mode 100644
index 0000000..a27ae44
--- /dev/null
+++ b/static/images/index/bannar01.png
Binary files differ
diff --git a/static/images/index/bannar1.png b/static/images/index/bannar1.png
new file mode 100644
index 0000000..5460723
--- /dev/null
+++ b/static/images/index/bannar1.png
Binary files differ
diff --git a/static/images/index/bl.png b/static/images/index/bl.png
new file mode 100644
index 0000000..a63c1ff
--- /dev/null
+++ b/static/images/index/bl.png
Binary files differ
diff --git a/static/images/index/df.png b/static/images/index/df.png
new file mode 100644
index 0000000..7828a2f
--- /dev/null
+++ b/static/images/index/df.png
Binary files differ
diff --git a/static/images/index/ghcz.png b/static/images/index/ghcz.png
new file mode 100644
index 0000000..f769fbe
--- /dev/null
+++ b/static/images/index/ghcz.png
Binary files differ
diff --git a/static/images/index/jykcz.png b/static/images/index/jykcz.png
new file mode 100644
index 0000000..ab3c3bf
--- /dev/null
+++ b/static/images/index/jykcz.png
Binary files differ
diff --git a/static/images/index/kdf.png b/static/images/index/kdf.png
new file mode 100644
index 0000000..492e1f0
--- /dev/null
+++ b/static/images/index/kdf.png
Binary files differ
diff --git a/static/images/index/money.png b/static/images/index/money.png
new file mode 100644
index 0000000..ce41426
--- /dev/null
+++ b/static/images/index/money.png
Binary files differ
diff --git a/static/images/index/more.png b/static/images/index/more.png
new file mode 100644
index 0000000..c2ca100
--- /dev/null
+++ b/static/images/index/more.png
Binary files differ
diff --git a/static/images/index/mrqd.png b/static/images/index/mrqd.png
new file mode 100644
index 0000000..14df632
--- /dev/null
+++ b/static/images/index/mrqd.png
Binary files differ
diff --git a/static/images/index/scan.png b/static/images/index/scan.png
new file mode 100644
index 0000000..348eeea
--- /dev/null
+++ b/static/images/index/scan.png
Binary files differ
diff --git a/static/images/index/sjjf.png b/static/images/index/sjjf.png
new file mode 100644
index 0000000..d5f7c09
--- /dev/null
+++ b/static/images/index/sjjf.png
Binary files differ
diff --git a/static/images/index/smkhd.png b/static/images/index/smkhd.png
new file mode 100644
index 0000000..903e4e7
--- /dev/null
+++ b/static/images/index/smkhd.png
Binary files differ
diff --git a/static/images/index/smkjj.png b/static/images/index/smkjj.png
new file mode 100644
index 0000000..83761d4
--- /dev/null
+++ b/static/images/index/smkjj.png
Binary files differ
diff --git a/static/images/index/square.png b/static/images/index/square.png
new file mode 100644
index 0000000..1512658
--- /dev/null
+++ b/static/images/index/square.png
Binary files differ
diff --git a/static/images/index/wyjf.png b/static/images/index/wyjf.png
new file mode 100644
index 0000000..cf6e898
--- /dev/null
+++ b/static/images/index/wyjf.png
Binary files differ
diff --git a/static/images/index/wzcx.png b/static/images/index/wzcx.png
new file mode 100644
index 0000000..3eec4bd
--- /dev/null
+++ b/static/images/index/wzcx.png
Binary files differ
diff --git a/static/images/index/zx.png b/static/images/index/zx.png
new file mode 100644
index 0000000..a1a57e3
--- /dev/null
+++ b/static/images/index/zx.png
Binary files differ
diff --git a/static/images/integral/bannar.png b/static/images/integral/bannar.png
new file mode 100644
index 0000000..4207c21
--- /dev/null
+++ b/static/images/integral/bannar.png
Binary files differ
diff --git a/static/images/introduce/bannar1.png b/static/images/introduce/bannar1.png
new file mode 100644
index 0000000..c31d7cf
--- /dev/null
+++ b/static/images/introduce/bannar1.png
Binary files differ
diff --git a/static/images/life/erhai.jpg b/static/images/life/erhai.jpg
new file mode 100644
index 0000000..76ea9c3
--- /dev/null
+++ b/static/images/life/erhai.jpg
Binary files differ
diff --git a/static/images/life/lijiang.jpg b/static/images/life/lijiang.jpg
new file mode 100644
index 0000000..7546e30
--- /dev/null
+++ b/static/images/life/lijiang.jpg
Binary files differ
diff --git a/static/images/life/xianggelila.jpg b/static/images/life/xianggelila.jpg
new file mode 100644
index 0000000..a3877fe
--- /dev/null
+++ b/static/images/life/xianggelila.jpg
Binary files differ
diff --git a/static/images/life/yulongxueshan.jpg b/static/images/life/yulongxueshan.jpg
new file mode 100644
index 0000000..61689f5
--- /dev/null
+++ b/static/images/life/yulongxueshan.jpg
Binary files differ
diff --git a/static/images/login/face.png b/static/images/login/face.png
new file mode 100644
index 0000000..db672da
--- /dev/null
+++ b/static/images/login/face.png
Binary files differ
diff --git a/static/images/login/finge.png b/static/images/login/finge.png
new file mode 100644
index 0000000..18d5bf6
--- /dev/null
+++ b/static/images/login/finge.png
Binary files differ
diff --git a/static/images/login/hands.png b/static/images/login/hands.png
new file mode 100644
index 0000000..16a5d34
--- /dev/null
+++ b/static/images/login/hands.png
Binary files differ
diff --git a/static/images/login/logo.png b/static/images/login/logo.png
new file mode 100644
index 0000000..cab5124
--- /dev/null
+++ b/static/images/login/logo.png
Binary files differ
diff --git a/static/images/map/mark.png b/static/images/map/mark.png
new file mode 100644
index 0000000..e166ab7
--- /dev/null
+++ b/static/images/map/mark.png
Binary files differ
diff --git a/static/images/map/my.png b/static/images/map/my.png
new file mode 100644
index 0000000..9815685
--- /dev/null
+++ b/static/images/map/my.png
Binary files differ
diff --git a/static/images/qrcode/bannar.png b/static/images/qrcode/bannar.png
new file mode 100644
index 0000000..13a613b
--- /dev/null
+++ b/static/images/qrcode/bannar.png
Binary files differ
diff --git a/static/images/qrcode/id.png b/static/images/qrcode/id.png
new file mode 100644
index 0000000..775f696
--- /dev/null
+++ b/static/images/qrcode/id.png
Binary files differ
diff --git a/static/images/qrcode/money.png b/static/images/qrcode/money.png
new file mode 100644
index 0000000..702ec50
--- /dev/null
+++ b/static/images/qrcode/money.png
Binary files differ
diff --git a/static/images/tabbar/active.png b/static/images/tabbar/active.png
new file mode 100644
index 0000000..12a9ce8
--- /dev/null
+++ b/static/images/tabbar/active.png
Binary files differ
diff --git a/static/images/tabbar/active_s.png b/static/images/tabbar/active_s.png
new file mode 100644
index 0000000..720671c
--- /dev/null
+++ b/static/images/tabbar/active_s.png
Binary files differ
diff --git a/static/images/tabbar/component.png b/static/images/tabbar/component.png
new file mode 100644
index 0000000..94dd92c
--- /dev/null
+++ b/static/images/tabbar/component.png
Binary files differ
diff --git a/static/images/tabbar/component_select.png b/static/images/tabbar/component_select.png
new file mode 100644
index 0000000..cb2ca9e
--- /dev/null
+++ b/static/images/tabbar/component_select.png
Binary files differ
diff --git a/static/images/tabbar/index.png b/static/images/tabbar/index.png
new file mode 100644
index 0000000..3e4f97a
--- /dev/null
+++ b/static/images/tabbar/index.png
Binary files differ
diff --git a/static/images/tabbar/index_s.png b/static/images/tabbar/index_s.png
new file mode 100644
index 0000000..ca1b8a1
--- /dev/null
+++ b/static/images/tabbar/index_s.png
Binary files differ
diff --git a/static/images/tabbar/life.png b/static/images/tabbar/life.png
new file mode 100644
index 0000000..af6bab7
--- /dev/null
+++ b/static/images/tabbar/life.png
Binary files differ
diff --git a/static/images/tabbar/life_s.png b/static/images/tabbar/life_s.png
new file mode 100644
index 0000000..e309a8e
--- /dev/null
+++ b/static/images/tabbar/life_s.png
Binary files differ
diff --git a/static/images/tabbar/mine.png b/static/images/tabbar/mine.png
new file mode 100644
index 0000000..220b6a0
--- /dev/null
+++ b/static/images/tabbar/mine.png
Binary files differ
diff --git a/static/images/tabbar/mine_s.png b/static/images/tabbar/mine_s.png
new file mode 100644
index 0000000..616adcc
--- /dev/null
+++ b/static/images/tabbar/mine_s.png
Binary files differ
diff --git a/static/images/tabbar/qrcode.png b/static/images/tabbar/qrcode.png
new file mode 100644
index 0000000..87ddc44
--- /dev/null
+++ b/static/images/tabbar/qrcode.png
Binary files differ
diff --git a/static/js/http.api.js b/static/js/http.api.js
new file mode 100644
index 0000000..04193bb
--- /dev/null
+++ b/static/js/http.api.js
@@ -0,0 +1,59 @@
+// 如果没有通过拦截器配置域名的话，可以在这里写上完整的URL(加上域名部分)
+let bindcardcodeApi = '/v1/bindcardcode'; //绑卡验证码
+let unbindcardApi = '/v1/unbindcard'; //解绑银行卡
+let unsignbxyApi = '/v1/unsignbxy'; //解约
+let qrcodeApi = '/v1/qrcode'; //二维码
+let idtypesApi = '/v1/idtypes'; //绑卡证件类型
+let cardinforApi = '/v1/cardinfor'; //银行卡信息
+let pwdsetApi = '/v1/pwdset'; //登录密码设置
+let billdetailApi = '/v1/billdetail'; //账单详情
+let billsApi = '/v1/bills'; //获取账单列表
+let cardlostApi = '/v1/cardlost'; //市民卡挂失
+let signbxyApi = '/v1/signbxy'; //签约
+let bxyApi = '/v1/bxy'; //协议
+let paypwdApi = '/v1/paypwd'; //支付密码设置
+let codeApi = '/v1/code'; //验证码获取
+let checkcodeApi = '/v1/checkcode'; //验证码验证
+let bindcardApi = '/v1/bindcard'; //绑定银行卡
+let inforApi = '/v1/infor'; //token是否失效
+let registerApi = '/i/register'; //注册
+let checkcodeRegApi = '/i/checkcode'; //注册验证码
+let uxyApi = '/i/uxy'; //用户协议
+let codeRegApi = '/i/code'; //注册验证码
+let timeApi = '/i/time'; //注册验证码
+let loginApi = '/login'; //登录
+
+const install = (Vue, vm) => {
+
+	let bindCardCode = (params = {}) => vm.$u.post(bindcardcodeApiApi, params);
+	let unbindCard = (params = {}) => vm.$u.post(unbindcardApi, params);
+	let unSignBxy = (params = {}) => vm.$u.post(unsignbxyApi, params);
+	let qrcode = (params = {}) => vm.$u.post(qrcodeApi, params);
+	let idTypes = (params = {}) => vm.$u.post(idtypesApi, params);
+	let cardInfor = (params = {}) => vm.$u.post(cardinforApi, params);
+	let setPwd = (params = {}) => vm.$u.post(pwdsetApi, params);
+	let GetBillsDetail = (params = {}) => vm.$u.post(billdetailApi, params);
+	let getBills = (params = {}) => vm.$u.post(billsApi, params);
+	let cardLost = (params = {}) => vm.$u.post(cardlostApi, params);
+	let signBxy = (params = {}) => vm.$u.post(signbxyApi, params);
+	let getBxy = (params = {}) => vm.$u.post(bxyApi, params);
+	let setPayPwd = (params = {}) => vm.$u.post(paypwdApi, params);
+	let getCode = (params = {}) => vm.$u.post(codeApi, params);
+	let checkCode = (params = {}) => vm.$u.post(checkcodeApi, params);
+	let bindCard = (params = {}) => vm.$u.post(bindcardApi, params);
+	let infor = (params = {}) => vm.$u.post(inforApi, params);
+	let register = (params = {}) => vm.$u.post(registerApi, params);
+	let checkRegCode = (params = {}) => vm.$u.post(checkcodeRegApi, params);
+	let getRegCode = (params = {}) => vm.$u.post(codeRegApi, params);
+	let getUxy = (params = {}) => vm.$u.post(uxyApi, params);
+	let time = (params = {}) => vm.$u.post(timeApi, params);
+	let login = (params = {}) => vm.$u.post(loginApi, params);
+
+	// 将各个定义的接口名称，统一放进对象挂载到vm.$u.api(因为vm就是this，也即this.$u.api)下
+	vm.$u.api = {
+		bindCardCode,unbindCard,unSignBxy,qrcode,idTypes,cardInfor,setPwd,GetBillsDetail,getBills,cardLost,signBxy,getBxy,setPayPwd,getCode,checkCode,bindCard,infor,register,checkRegCode,getRegCode,getUxy,time,login
+	};
+}
+
+// export default install
+module.exports = install
diff --git a/static/js/http.interceptor.js b/static/js/http.interceptor.js
new file mode 100644
index 0000000..89d1562
--- /dev/null
+++ b/static/js/http.interceptor.js
@@ -0,0 +1,100 @@
+const install = (Vue, vm) => {
+	// 此为自定义配置参数，具体参数见上方说明
+	Vue.prototype.$u.http.setConfig({
+		// baseUrl: 'https://yy.dlsmk.cn/payapi/mobileapi', // 大理智警域名 
+		baseUrl:'https://yy.dlsmk.cn/portal/mobileapi', //正式地址
+		// baseUrl:'http://yy.dlsmk.cn:8080/portal/mobileapi', //测试地址
+		// baseUrl: "http://172.28.43.20:8089/portal/mobileapi",//本地地址
+		// method: 'POST',
+		// 设置为json，返回后会对数据进行一次JSON.parse()
+		dataType: 'json',
+		// sslVerify:false,
+		showLoading: true, // 是否显示请求中的loading
+		loadingText: '请求中...', // 请求loading中的文字提示
+		loadingTime: 800, // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms
+		originalData: true, // 是否在拦截器中返回服务端的原始数据
+		loadingMask: true, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透
+		// 配置请求头信息
+		header: {
+			'content-type': 'application/x-www-form-urlencoded'
+		},
+	});
+	// 请求拦截部分，如配置，每次请求前都会执行
+	Vue.prototype.$u.http.interceptor.request = (config) => {
+		const token = uni.getStorageSync('token');
+		const tenantid = uni.getStorageSync('tenantid');
+		if (token) {
+			config.header['Authorization'] = "Bearer " + token;
+		}else{
+			config.header['Authorization'] = ''
+		}
+		//console.log(config.url,config.header['Authorization'])
+		config.header["X-TENANT-ID"] = tenantid;
+		if (config.url == "/i/activity" || config.url == "/v1/feedback/release" || config.url == '/medicineapi/medicalcard/add') {
+			config.header['content-type'] = "application/json";
+		} else {
+			config.header['content-type'] = "application/x-www-form-urlencoded";
+		}
+		return config;
+	}
+	// 响应拦截，如配置，每次请求结束都会执行本方法
+	Vue.prototype.$u.http.interceptor.response = (res) => {
+		// console.log(res)
+		if (res.statusCode == 200) {
+			// res为服务端返回值，可能有code，result等字段
+			// 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
+			// 如果配置了originalData为true，请留意这里的返回值
+			if (res.data.code == 200) {
+				return res.data
+			} else if(res.data.code == 500){
+				uni.showModal({
+					title: "提示",
+					content: res.data.code + ":" + res.data.msg,
+					showCancel: false,
+				})
+				return false;
+			} else {
+				uni.showModal({
+					title: "错误",
+					content: res.data.code + ":" + res.data.msg,
+					showCancel: false,
+				})
+				return false;
+			}
+		} else if (res.statusCode == 401) {
+			uni.showToast({
+				title: "登录状态失效,请重新登录",
+				icon: "none",
+				mask:true,
+				duration: 1500,
+				complete(res) {
+					setTimeout(() => {
+						uni.reLaunch({
+							url: "/pages/sub_basic/login/index"
+						})
+					}, 1500)
+				}
+			})
+
+			return false;
+		} else {
+			// 如果返回false，则会调用Promise的reject回调，
+			// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
+			if(res.errMsg.indexOf('fail') == -1){
+				uni.showModal({
+					title: "错误",
+					content: res.data.status + ":" + res.data.message,
+					// content: `${res.data.status}:${res.data.message}`,
+					showCancel: false,
+				})
+			}
+			return false;
+		}
+	}
+
+}
+
+
+// export default install
+module.exports = install
+
diff --git a/static/js/uqrcode.js b/static/js/uqrcode.js
new file mode 100644
index 0000000..099993f
--- /dev/null
+++ b/static/js/uqrcode.js
@@ -0,0 +1,1383 @@
+//---------------------------------------------------------------------
+// github https://github.com/Sansnn/uQRCode
+//---------------------------------------------------------------------
+
+let uQRCode = {};
+
+(function() {
+	//---------------------------------------------------------------------
+	// QRCode for JavaScript
+	//
+	// Copyright (c) 2009 Kazuhiko Arase
+	//
+	// URL: http://www.d-project.com/
+	//
+	// Licensed under the MIT license:
+	//   http://www.opensource.org/licenses/mit-license.php
+	//
+	// The word "QR Code" is registered trademark of 
+	// DENSO WAVE INCORPORATED
+	//   http://www.denso-wave.com/qrcode/faqpatent-e.html
+	//
+	//---------------------------------------------------------------------
+
+	//---------------------------------------------------------------------
+	// QR8bitByte
+	//---------------------------------------------------------------------
+
+	function QR8bitByte(data) {
+		this.mode = QRMode.MODE_8BIT_BYTE;
+		this.data = data;
+	}
+
+	QR8bitByte.prototype = {
+
+		getLength: function(buffer) {
+			return this.data.length;
+		},
+
+		write: function(buffer) {
+			for (var i = 0; i < this.data.length; i++) {
+				// not JIS ...
+				buffer.put(this.data.charCodeAt(i), 8);
+			}
+		}
+	};
+
+	//---------------------------------------------------------------------
+	// QRCode
+	//---------------------------------------------------------------------
+
+	function QRCode(typeNumber, errorCorrectLevel) {
+		this.typeNumber = typeNumber;
+		this.errorCorrectLevel = errorCorrectLevel;
+		this.modules = null;
+		this.moduleCount = 0;
+		this.dataCache = null;
+		this.dataList = new Array();
+	}
+
+	QRCode.prototype = {
+
+		addData: function(data) {
+			var newData = new QR8bitByte(data);
+			this.dataList.push(newData);
+			this.dataCache = null;
+		},
+
+		isDark: function(row, col) {
+			if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+				throw new Error(row + "," + col);
+			}
+			return this.modules[row][col];
+		},
+
+		getModuleCount: function() {
+			return this.moduleCount;
+		},
+
+		make: function() {
+			// Calculate automatically typeNumber if provided is < 1
+			if (this.typeNumber < 1) {
+				var typeNumber = 1;
+				for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+					var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
+
+					var buffer = new QRBitBuffer();
+					var totalDataCount = 0;
+					for (var i = 0; i < rsBlocks.length; i++) {
+						totalDataCount += rsBlocks[i].dataCount;
+					}
+
+					for (var i = 0; i < this.dataList.length; i++) {
+						var data = this.dataList[i];
+						buffer.put(data.mode, 4);
+						buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+						data.write(buffer);
+					}
+					if (buffer.getLengthInBits() <= totalDataCount * 8)
+						break;
+				}
+				this.typeNumber = typeNumber;
+			}
+			this.makeImpl(false, this.getBestMaskPattern());
+		},
+
+		makeImpl: function(test, maskPattern) {
+
+			this.moduleCount = this.typeNumber * 4 + 17;
+			this.modules = new Array(this.moduleCount);
+
+			for (var row = 0; row < this.moduleCount; row++) {
+
+				this.modules[row] = new Array(this.moduleCount);
+
+				for (var col = 0; col < this.moduleCount; col++) {
+					this.modules[row][col] = null; //(col + row) % 3;
+				}
+			}
+
+			this.setupPositionProbePattern(0, 0);
+			this.setupPositionProbePattern(this.moduleCount - 7, 0);
+			this.setupPositionProbePattern(0, this.moduleCount - 7);
+			this.setupPositionAdjustPattern();
+			this.setupTimingPattern();
+			this.setupTypeInfo(test, maskPattern);
+
+			if (this.typeNumber >= 7) {
+				this.setupTypeNumber(test);
+			}
+
+			if (this.dataCache == null) {
+				this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+			}
+
+			this.mapData(this.dataCache, maskPattern);
+		},
+
+		setupPositionProbePattern: function(row, col) {
+
+			for (var r = -1; r <= 7; r++) {
+
+				if (row + r <= -1 || this.moduleCount <= row + r) continue;
+
+				for (var c = -1; c <= 7; c++) {
+
+					if (col + c <= -1 || this.moduleCount <= col + c) continue;
+
+					if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||
+						(0 <= c && c <= 6 && (r == 0 || r == 6)) ||
+						(2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+						this.modules[row + r][col + c] = true;
+					} else {
+						this.modules[row + r][col + c] = false;
+					}
+				}
+			}
+		},
+
+		getBestMaskPattern: function() {
+
+			var minLostPoint = 0;
+			var pattern = 0;
+
+			for (var i = 0; i < 8; i++) {
+
+				this.makeImpl(true, i);
+
+				var lostPoint = QRUtil.getLostPoint(this);
+
+				if (i == 0 || minLostPoint > lostPoint) {
+					minLostPoint = lostPoint;
+					pattern = i;
+				}
+			}
+
+			return pattern;
+		},
+
+		createMovieClip: function(target_mc, instance_name, depth) {
+
+			var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+			var cs = 1;
+
+			this.make();
+
+			for (var row = 0; row < this.modules.length; row++) {
+
+				var y = row * cs;
+
+				for (var col = 0; col < this.modules[row].length; col++) {
+
+					var x = col * cs;
+					var dark = this.modules[row][col];
+
+					if (dark) {
+						qr_mc.beginFill(0, 100);
+						qr_mc.moveTo(x, y);
+						qr_mc.lineTo(x + cs, y);
+						qr_mc.lineTo(x + cs, y + cs);
+						qr_mc.lineTo(x, y + cs);
+						qr_mc.endFill();
+					}
+				}
+			}
+
+			return qr_mc;
+		},
+
+		setupTimingPattern: function() {
+
+			for (var r = 8; r < this.moduleCount - 8; r++) {
+				if (this.modules[r][6] != null) {
+					continue;
+				}
+				this.modules[r][6] = (r % 2 == 0);
+			}
+
+			for (var c = 8; c < this.moduleCount - 8; c++) {
+				if (this.modules[6][c] != null) {
+					continue;
+				}
+				this.modules[6][c] = (c % 2 == 0);
+			}
+		},
+
+		setupPositionAdjustPattern: function() {
+
+			var pos = QRUtil.getPatternPosition(this.typeNumber);
+
+			for (var i = 0; i < pos.length; i++) {
+
+				for (var j = 0; j < pos.length; j++) {
+
+					var row = pos[i];
+					var col = pos[j];
+
+					if (this.modules[row][col] != null) {
+						continue;
+					}
+
+					for (var r = -2; r <= 2; r++) {
+
+						for (var c = -2; c <= 2; c++) {
+
+							if (r == -2 || r == 2 || c == -2 || c == 2 ||
+								(r == 0 && c == 0)) {
+								this.modules[row + r][col + c] = true;
+							} else {
+								this.modules[row + r][col + c] = false;
+							}
+						}
+					}
+				}
+			}
+		},
+
+		setupTypeNumber: function(test) {
+
+			var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+
+			for (var i = 0; i < 18; i++) {
+				var mod = (!test && ((bits >> i) & 1) == 1);
+				this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+			}
+
+			for (var i = 0; i < 18; i++) {
+				var mod = (!test && ((bits >> i) & 1) == 1);
+				this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+			}
+		},
+
+		setupTypeInfo: function(test, maskPattern) {
+
+			var data = (this.errorCorrectLevel << 3) | maskPattern;
+			var bits = QRUtil.getBCHTypeInfo(data);
+
+			// vertical		
+			for (var i = 0; i < 15; i++) {
+
+				var mod = (!test && ((bits >> i) & 1) == 1);
+
+				if (i < 6) {
+					this.modules[i][8] = mod;
+				} else if (i < 8) {
+					this.modules[i + 1][8] = mod;
+				} else {
+					this.modules[this.moduleCount - 15 + i][8] = mod;
+				}
+			}
+
+			// horizontal
+			for (var i = 0; i < 15; i++) {
+
+				var mod = (!test && ((bits >> i) & 1) == 1);
+
+				if (i < 8) {
+					this.modules[8][this.moduleCount - i - 1] = mod;
+				} else if (i < 9) {
+					this.modules[8][15 - i - 1 + 1] = mod;
+				} else {
+					this.modules[8][15 - i - 1] = mod;
+				}
+			}
+
+			// fixed module
+			this.modules[this.moduleCount - 8][8] = (!test);
+
+		},
+
+		mapData: function(data, maskPattern) {
+
+			var inc = -1;
+			var row = this.moduleCount - 1;
+			var bitIndex = 7;
+			var byteIndex = 0;
+
+			for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+
+				if (col == 6) col--;
+
+				while (true) {
+
+					for (var c = 0; c < 2; c++) {
+
+						if (this.modules[row][col - c] == null) {
+
+							var dark = false;
+
+							if (byteIndex < data.length) {
+								dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+							}
+
+							var mask = QRUtil.getMask(maskPattern, row, col - c);
+
+							if (mask) {
+								dark = !dark;
+							}
+
+							this.modules[row][col - c] = dark;
+							bitIndex--;
+
+							if (bitIndex == -1) {
+								byteIndex++;
+								bitIndex = 7;
+							}
+						}
+					}
+
+					row += inc;
+
+					if (row < 0 || this.moduleCount <= row) {
+						row -= inc;
+						inc = -inc;
+						break;
+					}
+				}
+			}
+
+		}
+
+	};
+
+	QRCode.PAD0 = 0xEC;
+	QRCode.PAD1 = 0x11;
+
+	QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {
+
+		var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+
+		var buffer = new QRBitBuffer();
+
+		for (var i = 0; i < dataList.length; i++) {
+			var data = dataList[i];
+			buffer.put(data.mode, 4);
+			buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+			data.write(buffer);
+		}
+
+		// calc num max data.
+		var totalDataCount = 0;
+		for (var i = 0; i < rsBlocks.length; i++) {
+			totalDataCount += rsBlocks[i].dataCount;
+		}
+
+		if (buffer.getLengthInBits() > totalDataCount * 8) {
+			throw new Error("code length overflow. (" +
+				buffer.getLengthInBits() +
+				">" +
+				totalDataCount * 8 +
+				")");
+		}
+
+		// end code
+		if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+			buffer.put(0, 4);
+		}
+
+		// padding
+		while (buffer.getLengthInBits() % 8 != 0) {
+			buffer.putBit(false);
+		}
+
+		// padding
+		while (true) {
+
+			if (buffer.getLengthInBits() >= totalDataCount * 8) {
+				break;
+			}
+			buffer.put(QRCode.PAD0, 8);
+
+			if (buffer.getLengthInBits() >= totalDataCount * 8) {
+				break;
+			}
+			buffer.put(QRCode.PAD1, 8);
+		}
+
+		return QRCode.createBytes(buffer, rsBlocks);
+	}
+
+	QRCode.createBytes = function(buffer, rsBlocks) {
+
+		var offset = 0;
+
+		var maxDcCount = 0;
+		var maxEcCount = 0;
+
+		var dcdata = new Array(rsBlocks.length);
+		var ecdata = new Array(rsBlocks.length);
+
+		for (var r = 0; r < rsBlocks.length; r++) {
+
+			var dcCount = rsBlocks[r].dataCount;
+			var ecCount = rsBlocks[r].totalCount - dcCount;
+
+			maxDcCount = Math.max(maxDcCount, dcCount);
+			maxEcCount = Math.max(maxEcCount, ecCount);
+
+			dcdata[r] = new Array(dcCount);
+
+			for (var i = 0; i < dcdata[r].length; i++) {
+				dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+			}
+			offset += dcCount;
+
+			var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+			var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+
+			var modPoly = rawPoly.mod(rsPoly);
+			ecdata[r] = new Array(rsPoly.getLength() - 1);
+			for (var i = 0; i < ecdata[r].length; i++) {
+				var modIndex = i + modPoly.getLength() - ecdata[r].length;
+				ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+			}
+
+		}
+
+		var totalCodeCount = 0;
+		for (var i = 0; i < rsBlocks.length; i++) {
+			totalCodeCount += rsBlocks[i].totalCount;
+		}
+
+		var data = new Array(totalCodeCount);
+		var index = 0;
+
+		for (var i = 0; i < maxDcCount; i++) {
+			for (var r = 0; r < rsBlocks.length; r++) {
+				if (i < dcdata[r].length) {
+					data[index++] = dcdata[r][i];
+				}
+			}
+		}
+
+		for (var i = 0; i < maxEcCount; i++) {
+			for (var r = 0; r < rsBlocks.length; r++) {
+				if (i < ecdata[r].length) {
+					data[index++] = ecdata[r][i];
+				}
+			}
+		}
+
+		return data;
+
+	}
+
+	//---------------------------------------------------------------------
+	// QRMode
+	//---------------------------------------------------------------------
+
+	var QRMode = {
+		MODE_NUMBER: 1 << 0,
+		MODE_ALPHA_NUM: 1 << 1,
+		MODE_8BIT_BYTE: 1 << 2,
+		MODE_KANJI: 1 << 3
+	};
+
+	//---------------------------------------------------------------------
+	// QRErrorCorrectLevel
+	//---------------------------------------------------------------------
+
+	var QRErrorCorrectLevel = {
+		L: 1,
+		M: 0,
+		Q: 3,
+		H: 2
+	};
+
+	//---------------------------------------------------------------------
+	// QRMaskPattern
+	//---------------------------------------------------------------------
+
+	var QRMaskPattern = {
+		PATTERN000: 0,
+		PATTERN001: 1,
+		PATTERN010: 2,
+		PATTERN011: 3,
+		PATTERN100: 4,
+		PATTERN101: 5,
+		PATTERN110: 6,
+		PATTERN111: 7
+	};
+
+	//---------------------------------------------------------------------
+	// QRUtil
+	//---------------------------------------------------------------------
+
+	var QRUtil = {
+
+		PATTERN_POSITION_TABLE: [
+			[],
+			[6, 18],
+			[6, 22],
+			[6, 26],
+			[6, 30],
+			[6, 34],
+			[6, 22, 38],
+			[6, 24, 42],
+			[6, 26, 46],
+			[6, 28, 50],
+			[6, 30, 54],
+			[6, 32, 58],
+			[6, 34, 62],
+			[6, 26, 46, 66],
+			[6, 26, 48, 70],
+			[6, 26, 50, 74],
+			[6, 30, 54, 78],
+			[6, 30, 56, 82],
+			[6, 30, 58, 86],
+			[6, 34, 62, 90],
+			[6, 28, 50, 72, 94],
+			[6, 26, 50, 74, 98],
+			[6, 30, 54, 78, 102],
+			[6, 28, 54, 80, 106],
+			[6, 32, 58, 84, 110],
+			[6, 30, 58, 86, 114],
+			[6, 34, 62, 90, 118],
+			[6, 26, 50, 74, 98, 122],
+			[6, 30, 54, 78, 102, 126],
+			[6, 26, 52, 78, 104, 130],
+			[6, 30, 56, 82, 108, 134],
+			[6, 34, 60, 86, 112, 138],
+			[6, 30, 58, 86, 114, 142],
+			[6, 34, 62, 90, 118, 146],
+			[6, 30, 54, 78, 102, 126, 150],
+			[6, 24, 50, 76, 102, 128, 154],
+			[6, 28, 54, 80, 106, 132, 158],
+			[6, 32, 58, 84, 110, 136, 162],
+			[6, 26, 54, 82, 110, 138, 166],
+			[6, 30, 58, 86, 114, 142, 170]
+		],
+
+		G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+		G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+		G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
+
+		getBCHTypeInfo: function(data) {
+			var d = data << 10;
+			while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+				d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+			}
+			return ((data << 10) | d) ^ QRUtil.G15_MASK;
+		},
+
+		getBCHTypeNumber: function(data) {
+			var d = data << 12;
+			while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+				d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+			}
+			return (data << 12) | d;
+		},
+
+		getBCHDigit: function(data) {
+
+			var digit = 0;
+
+			while (data != 0) {
+				digit++;
+				data >>>= 1;
+			}
+
+			return digit;
+		},
+
+		getPatternPosition: function(typeNumber) {
+			return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+		},
+
+		getMask: function(maskPattern, i, j) {
+
+			switch (maskPattern) {
+
+				case QRMaskPattern.PATTERN000:
+					return (i + j) % 2 == 0;
+				case QRMaskPattern.PATTERN001:
+					return i % 2 == 0;
+				case QRMaskPattern.PATTERN010:
+					return j % 3 == 0;
+				case QRMaskPattern.PATTERN011:
+					return (i + j) % 3 == 0;
+				case QRMaskPattern.PATTERN100:
+					return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+				case QRMaskPattern.PATTERN101:
+					return (i * j) % 2 + (i * j) % 3 == 0;
+				case QRMaskPattern.PATTERN110:
+					return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+				case QRMaskPattern.PATTERN111:
+					return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+
+				default:
+					throw new Error("bad maskPattern:" + maskPattern);
+			}
+		},
+
+		getErrorCorrectPolynomial: function(errorCorrectLength) {
+
+			var a = new QRPolynomial([1], 0);
+
+			for (var i = 0; i < errorCorrectLength; i++) {
+				a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+			}
+
+			return a;
+		},
+
+		getLengthInBits: function(mode, type) {
+
+			if (1 <= type && type < 10) {
+
+				// 1 - 9
+
+				switch (mode) {
+					case QRMode.MODE_NUMBER:
+						return 10;
+					case QRMode.MODE_ALPHA_NUM:
+						return 9;
+					case QRMode.MODE_8BIT_BYTE:
+						return 8;
+					case QRMode.MODE_KANJI:
+						return 8;
+					default:
+						throw new Error("mode:" + mode);
+				}
+
+			} else if (type < 27) {
+
+				// 10 - 26
+
+				switch (mode) {
+					case QRMode.MODE_NUMBER:
+						return 12;
+					case QRMode.MODE_ALPHA_NUM:
+						return 11;
+					case QRMode.MODE_8BIT_BYTE:
+						return 16;
+					case QRMode.MODE_KANJI:
+						return 10;
+					default:
+						throw new Error("mode:" + mode);
+				}
+
+			} else if (type < 41) {
+
+				// 27 - 40
+
+				switch (mode) {
+					case QRMode.MODE_NUMBER:
+						return 14;
+					case QRMode.MODE_ALPHA_NUM:
+						return 13;
+					case QRMode.MODE_8BIT_BYTE:
+						return 16;
+					case QRMode.MODE_KANJI:
+						return 12;
+					default:
+						throw new Error("mode:" + mode);
+				}
+
+			} else {
+				throw new Error("type:" + type);
+			}
+		},
+
+		getLostPoint: function(qrCode) {
+
+			var moduleCount = qrCode.getModuleCount();
+
+			var lostPoint = 0;
+
+			// LEVEL1
+
+			for (var row = 0; row < moduleCount; row++) {
+
+				for (var col = 0; col < moduleCount; col++) {
+
+					var sameCount = 0;
+					var dark = qrCode.isDark(row, col);
+
+					for (var r = -1; r <= 1; r++) {
+
+						if (row + r < 0 || moduleCount <= row + r) {
+							continue;
+						}
+
+						for (var c = -1; c <= 1; c++) {
+
+							if (col + c < 0 || moduleCount <= col + c) {
+								continue;
+							}
+
+							if (r == 0 && c == 0) {
+								continue;
+							}
+
+							if (dark == qrCode.isDark(row + r, col + c)) {
+								sameCount++;
+							}
+						}
+					}
+
+					if (sameCount > 5) {
+						lostPoint += (3 + sameCount - 5);
+					}
+				}
+			}
+
+			// LEVEL2
+
+			for (var row = 0; row < moduleCount - 1; row++) {
+				for (var col = 0; col < moduleCount - 1; col++) {
+					var count = 0;
+					if (qrCode.isDark(row, col)) count++;
+					if (qrCode.isDark(row + 1, col)) count++;
+					if (qrCode.isDark(row, col + 1)) count++;
+					if (qrCode.isDark(row + 1, col + 1)) count++;
+					if (count == 0 || count == 4) {
+						lostPoint += 3;
+					}
+				}
+			}
+
+			// LEVEL3
+
+			for (var row = 0; row < moduleCount; row++) {
+				for (var col = 0; col < moduleCount - 6; col++) {
+					if (qrCode.isDark(row, col) &&
+						!qrCode.isDark(row, col + 1) &&
+						qrCode.isDark(row, col + 2) &&
+						qrCode.isDark(row, col + 3) &&
+						qrCode.isDark(row, col + 4) &&
+						!qrCode.isDark(row, col + 5) &&
+						qrCode.isDark(row, col + 6)) {
+						lostPoint += 40;
+					}
+				}
+			}
+
+			for (var col = 0; col < moduleCount; col++) {
+				for (var row = 0; row < moduleCount - 6; row++) {
+					if (qrCode.isDark(row, col) &&
+						!qrCode.isDark(row + 1, col) &&
+						qrCode.isDark(row + 2, col) &&
+						qrCode.isDark(row + 3, col) &&
+						qrCode.isDark(row + 4, col) &&
+						!qrCode.isDark(row + 5, col) &&
+						qrCode.isDark(row + 6, col)) {
+						lostPoint += 40;
+					}
+				}
+			}
+
+			// LEVEL4
+
+			var darkCount = 0;
+
+			for (var col = 0; col < moduleCount; col++) {
+				for (var row = 0; row < moduleCount; row++) {
+					if (qrCode.isDark(row, col)) {
+						darkCount++;
+					}
+				}
+			}
+
+			var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+			lostPoint += ratio * 10;
+
+			return lostPoint;
+		}
+
+	};
+
+
+	//---------------------------------------------------------------------
+	// QRMath
+	//---------------------------------------------------------------------
+
+	var QRMath = {
+
+		glog: function(n) {
+
+			if (n < 1) {
+				throw new Error("glog(" + n + ")");
+			}
+
+			return QRMath.LOG_TABLE[n];
+		},
+
+		gexp: function(n) {
+
+			while (n < 0) {
+				n += 255;
+			}
+
+			while (n >= 256) {
+				n -= 255;
+			}
+
+			return QRMath.EXP_TABLE[n];
+		},
+
+		EXP_TABLE: new Array(256),
+
+		LOG_TABLE: new Array(256)
+
+	};
+
+	for (var i = 0; i < 8; i++) {
+		QRMath.EXP_TABLE[i] = 1 << i;
+	}
+	for (var i = 8; i < 256; i++) {
+		QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^
+			QRMath.EXP_TABLE[i - 5] ^
+			QRMath.EXP_TABLE[i - 6] ^
+			QRMath.EXP_TABLE[i - 8];
+	}
+	for (var i = 0; i < 255; i++) {
+		QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+	}
+
+	//---------------------------------------------------------------------
+	// QRPolynomial
+	//---------------------------------------------------------------------
+
+	function QRPolynomial(num, shift) {
+
+		if (num.length == undefined) {
+			throw new Error(num.length + "/" + shift);
+		}
+
+		var offset = 0;
+
+		while (offset < num.length && num[offset] == 0) {
+			offset++;
+		}
+
+		this.num = new Array(num.length - offset + shift);
+		for (var i = 0; i < num.length - offset; i++) {
+			this.num[i] = num[i + offset];
+		}
+	}
+
+	QRPolynomial.prototype = {
+
+		get: function(index) {
+			return this.num[index];
+		},
+
+		getLength: function() {
+			return this.num.length;
+		},
+
+		multiply: function(e) {
+
+			var num = new Array(this.getLength() + e.getLength() - 1);
+
+			for (var i = 0; i < this.getLength(); i++) {
+				for (var j = 0; j < e.getLength(); j++) {
+					num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+				}
+			}
+
+			return new QRPolynomial(num, 0);
+		},
+
+		mod: function(e) {
+
+			if (this.getLength() - e.getLength() < 0) {
+				return this;
+			}
+
+			var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+
+			var num = new Array(this.getLength());
+
+			for (var i = 0; i < this.getLength(); i++) {
+				num[i] = this.get(i);
+			}
+
+			for (var i = 0; i < e.getLength(); i++) {
+				num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+			}
+
+			// recursive call
+			return new QRPolynomial(num, 0).mod(e);
+		}
+	};
+
+	//---------------------------------------------------------------------
+	// QRRSBlock
+	//---------------------------------------------------------------------
+
+	function QRRSBlock(totalCount, dataCount) {
+		this.totalCount = totalCount;
+		this.dataCount = dataCount;
+	}
+
+	QRRSBlock.RS_BLOCK_TABLE = [
+
+		// L
+		// M
+		// Q
+		// H
+
+		// 1
+		[1, 26, 19],
+		[1, 26, 16],
+		[1, 26, 13],
+		[1, 26, 9],
+
+		// 2
+		[1, 44, 34],
+		[1, 44, 28],
+		[1, 44, 22],
+		[1, 44, 16],
+
+		// 3
+		[1, 70, 55],
+		[1, 70, 44],
+		[2, 35, 17],
+		[2, 35, 13],
+
+		// 4		
+		[1, 100, 80],
+		[2, 50, 32],
+		[2, 50, 24],
+		[4, 25, 9],
+
+		// 5
+		[1, 134, 108],
+		[2, 67, 43],
+		[2, 33, 15, 2, 34, 16],
+		[2, 33, 11, 2, 34, 12],
+
+		// 6
+		[2, 86, 68],
+		[4, 43, 27],
+		[4, 43, 19],
+		[4, 43, 15],
+
+		// 7		
+		[2, 98, 78],
+		[4, 49, 31],
+		[2, 32, 14, 4, 33, 15],
+		[4, 39, 13, 1, 40, 14],
+
+		// 8
+		[2, 121, 97],
+		[2, 60, 38, 2, 61, 39],
+		[4, 40, 18, 2, 41, 19],
+		[4, 40, 14, 2, 41, 15],
+
+		// 9
+		[2, 146, 116],
+		[3, 58, 36, 2, 59, 37],
+		[4, 36, 16, 4, 37, 17],
+		[4, 36, 12, 4, 37, 13],
+
+		// 10		
+		[2, 86, 68, 2, 87, 69],
+		[4, 69, 43, 1, 70, 44],
+		[6, 43, 19, 2, 44, 20],
+		[6, 43, 15, 2, 44, 16],
+
+		// 11
+		[4, 101, 81],
+		[1, 80, 50, 4, 81, 51],
+		[4, 50, 22, 4, 51, 23],
+		[3, 36, 12, 8, 37, 13],
+
+		// 12
+		[2, 116, 92, 2, 117, 93],
+		[6, 58, 36, 2, 59, 37],
+		[4, 46, 20, 6, 47, 21],
+		[7, 42, 14, 4, 43, 15],
+
+		// 13
+		[4, 133, 107],
+		[8, 59, 37, 1, 60, 38],
+		[8, 44, 20, 4, 45, 21],
+		[12, 33, 11, 4, 34, 12],
+
+		// 14
+		[3, 145, 115, 1, 146, 116],
+		[4, 64, 40, 5, 65, 41],
+		[11, 36, 16, 5, 37, 17],
+		[11, 36, 12, 5, 37, 13],
+
+		// 15
+		[5, 109, 87, 1, 110, 88],
+		[5, 65, 41, 5, 66, 42],
+		[5, 54, 24, 7, 55, 25],
+		[11, 36, 12],
+
+		// 16
+		[5, 122, 98, 1, 123, 99],
+		[7, 73, 45, 3, 74, 46],
+		[15, 43, 19, 2, 44, 20],
+		[3, 45, 15, 13, 46, 16],
+
+		// 17
+		[1, 135, 107, 5, 136, 108],
+		[10, 74, 46, 1, 75, 47],
+		[1, 50, 22, 15, 51, 23],
+		[2, 42, 14, 17, 43, 15],
+
+		// 18
+		[5, 150, 120, 1, 151, 121],
+		[9, 69, 43, 4, 70, 44],
+		[17, 50, 22, 1, 51, 23],
+		[2, 42, 14, 19, 43, 15],
+
+		// 19
+		[3, 141, 113, 4, 142, 114],
+		[3, 70, 44, 11, 71, 45],
+		[17, 47, 21, 4, 48, 22],
+		[9, 39, 13, 16, 40, 14],
+
+		// 20
+		[3, 135, 107, 5, 136, 108],
+		[3, 67, 41, 13, 68, 42],
+		[15, 54, 24, 5, 55, 25],
+		[15, 43, 15, 10, 44, 16],
+
+		// 21
+		[4, 144, 116, 4, 145, 117],
+		[17, 68, 42],
+		[17, 50, 22, 6, 51, 23],
+		[19, 46, 16, 6, 47, 17],
+
+		// 22
+		[2, 139, 111, 7, 140, 112],
+		[17, 74, 46],
+		[7, 54, 24, 16, 55, 25],
+		[34, 37, 13],
+
+		// 23
+		[4, 151, 121, 5, 152, 122],
+		[4, 75, 47, 14, 76, 48],
+		[11, 54, 24, 14, 55, 25],
+		[16, 45, 15, 14, 46, 16],
+
+		// 24
+		[6, 147, 117, 4, 148, 118],
+		[6, 73, 45, 14, 74, 46],
+		[11, 54, 24, 16, 55, 25],
+		[30, 46, 16, 2, 47, 17],
+
+		// 25
+		[8, 132, 106, 4, 133, 107],
+		[8, 75, 47, 13, 76, 48],
+		[7, 54, 24, 22, 55, 25],
+		[22, 45, 15, 13, 46, 16],
+
+		// 26
+		[10, 142, 114, 2, 143, 115],
+		[19, 74, 46, 4, 75, 47],
+		[28, 50, 22, 6, 51, 23],
+		[33, 46, 16, 4, 47, 17],
+
+		// 27
+		[8, 152, 122, 4, 153, 123],
+		[22, 73, 45, 3, 74, 46],
+		[8, 53, 23, 26, 54, 24],
+		[12, 45, 15, 28, 46, 16],
+
+		// 28
+		[3, 147, 117, 10, 148, 118],
+		[3, 73, 45, 23, 74, 46],
+		[4, 54, 24, 31, 55, 25],
+		[11, 45, 15, 31, 46, 16],
+
+		// 29
+		[7, 146, 116, 7, 147, 117],
+		[21, 73, 45, 7, 74, 46],
+		[1, 53, 23, 37, 54, 24],
+		[19, 45, 15, 26, 46, 16],
+
+		// 30
+		[5, 145, 115, 10, 146, 116],
+		[19, 75, 47, 10, 76, 48],
+		[15, 54, 24, 25, 55, 25],
+		[23, 45, 15, 25, 46, 16],
+
+		// 31
+		[13, 145, 115, 3, 146, 116],
+		[2, 74, 46, 29, 75, 47],
+		[42, 54, 24, 1, 55, 25],
+		[23, 45, 15, 28, 46, 16],
+
+		// 32
+		[17, 145, 115],
+		[10, 74, 46, 23, 75, 47],
+		[10, 54, 24, 35, 55, 25],
+		[19, 45, 15, 35, 46, 16],
+
+		// 33
+		[17, 145, 115, 1, 146, 116],
+		[14, 74, 46, 21, 75, 47],
+		[29, 54, 24, 19, 55, 25],
+		[11, 45, 15, 46, 46, 16],
+
+		// 34
+		[13, 145, 115, 6, 146, 116],
+		[14, 74, 46, 23, 75, 47],
+		[44, 54, 24, 7, 55, 25],
+		[59, 46, 16, 1, 47, 17],
+
+		// 35
+		[12, 151, 121, 7, 152, 122],
+		[12, 75, 47, 26, 76, 48],
+		[39, 54, 24, 14, 55, 25],
+		[22, 45, 15, 41, 46, 16],
+
+		// 36
+		[6, 151, 121, 14, 152, 122],
+		[6, 75, 47, 34, 76, 48],
+		[46, 54, 24, 10, 55, 25],
+		[2, 45, 15, 64, 46, 16],
+
+		// 37
+		[17, 152, 122, 4, 153, 123],
+		[29, 74, 46, 14, 75, 47],
+		[49, 54, 24, 10, 55, 25],
+		[24, 45, 15, 46, 46, 16],
+
+		// 38
+		[4, 152, 122, 18, 153, 123],
+		[13, 74, 46, 32, 75, 47],
+		[48, 54, 24, 14, 55, 25],
+		[42, 45, 15, 32, 46, 16],
+
+		// 39
+		[20, 147, 117, 4, 148, 118],
+		[40, 75, 47, 7, 76, 48],
+		[43, 54, 24, 22, 55, 25],
+		[10, 45, 15, 67, 46, 16],
+
+		// 40
+		[19, 148, 118, 6, 149, 119],
+		[18, 75, 47, 31, 76, 48],
+		[34, 54, 24, 34, 55, 25],
+		[20, 45, 15, 61, 46, 16]
+	];
+
+	QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
+
+		var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+
+		if (rsBlock == undefined) {
+			throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+		}
+
+		var length = rsBlock.length / 3;
+
+		var list = new Array();
+
+		for (var i = 0; i < length; i++) {
+
+			var count = rsBlock[i * 3 + 0];
+			var totalCount = rsBlock[i * 3 + 1];
+			var dataCount = rsBlock[i * 3 + 2];
+
+			for (var j = 0; j < count; j++) {
+				list.push(new QRRSBlock(totalCount, dataCount));
+			}
+		}
+
+		return list;
+	}
+
+	QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
+
+		switch (errorCorrectLevel) {
+			case QRErrorCorrectLevel.L:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+			case QRErrorCorrectLevel.M:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+			case QRErrorCorrectLevel.Q:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+			case QRErrorCorrectLevel.H:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+			default:
+				return undefined;
+		}
+	}
+
+	//---------------------------------------------------------------------
+	// QRBitBuffer
+	//---------------------------------------------------------------------
+
+	function QRBitBuffer() {
+		this.buffer = new Array();
+		this.length = 0;
+	}
+
+	QRBitBuffer.prototype = {
+
+		get: function(index) {
+			var bufIndex = Math.floor(index / 8);
+			return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;
+		},
+
+		put: function(num, length) {
+			for (var i = 0; i < length; i++) {
+				this.putBit(((num >>> (length - i - 1)) & 1) == 1);
+			}
+		},
+
+		getLengthInBits: function() {
+			return this.length;
+		},
+
+		putBit: function(bit) {
+
+			var bufIndex = Math.floor(this.length / 8);
+			if (this.buffer.length <= bufIndex) {
+				this.buffer.push(0);
+			}
+
+			if (bit) {
+				this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+			}
+
+			this.length++;
+		}
+	};
+
+	//---------------------------------------------------------------------
+	// Support Chinese
+	//---------------------------------------------------------------------
+	function utf16To8(text) {
+		var result = '';
+		var c;
+		for (var i = 0; i < text.length; i++) {
+			c = text.charCodeAt(i);
+			if (c >= 0x0001 && c <= 0x007F) {
+				result += text.charAt(i);
+			} else if (c > 0x07FF) {
+				result += String.fromCharCode(0xE0 | c >> 12 & 0x0F);
+				result += String.fromCharCode(0x80 | c >> 6 & 0x3F);
+				result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+			} else {
+				result += String.fromCharCode(0xC0 | c >> 6 & 0x1F);
+				result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+			}
+		}
+		return result;
+	}
+
+	uQRCode = {
+		
+		errorCorrectLevel: QRErrorCorrectLevel,
+		
+		defaults: {
+			size: 354,
+			margin: 0,
+			backgroundColor: '#ffffff',
+			foregroundColor: '#000000',
+			fileType: 'png', // 'jpg', 'png'
+			errorCorrectLevel: QRErrorCorrectLevel.H,
+			typeNumber: -1
+		},
+
+		make: function(options) {
+			var defaultOptions = {
+				canvasId: options.canvasId,
+				componentInstance: options.componentInstance,
+				text: options.text,
+				size: this.defaults.size,
+				margin: this.defaults.margin,
+				backgroundColor: this.defaults.backgroundColor,
+				foregroundColor: this.defaults.foregroundColor,
+				fileType: this.defaults.fileType,
+				errorCorrectLevel: this.defaults.errorCorrectLevel,
+				typeNumber: this.defaults.typeNumber
+			};
+			if (options) {
+				for (var i in options) {
+					defaultOptions[i] = options[i];
+				}
+			}
+			options = defaultOptions;
+			if (!options.canvasId) {
+				console.error('uQRCode: Please set canvasId!');
+				return;
+			}
+
+			function createCanvas() {
+				var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel);
+				qrcode.addData(utf16To8(options.text));
+				qrcode.make();
+
+				var ctx = uni.createCanvasContext(options.canvasId, options.componentInstance);
+				ctx.setFillStyle(options.backgroundColor);
+				ctx.fillRect(0, 0, options.size, options.size);
+
+				var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount();
+				var tileH = tileW;
+
+				for (var row = 0; row < qrcode.getModuleCount(); row++) {
+					for (var col = 0; col < qrcode.getModuleCount(); col++) {
+						var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor;
+						ctx.setFillStyle(style);
+						var x = Math.round(col * tileW) + options.margin;
+						var y = Math.round(row * tileH) + options.margin;
+						var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW);
+						var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW);
+						ctx.fillRect(x, y, w, h);
+					}
+				}
+
+				setTimeout(function() {
+					ctx.draw(false, (function() {
+						setTimeout(function() {
+							uni.canvasToTempFilePath({
+								canvasId: options.canvasId,
+								fileType: options.fileType,
+								width: options.size,
+								height: options.size,
+								destWidth: options.size,
+								destHeight: options.size,
+								success: function(res) {
+									options.success && options.success(res.tempFilePath);
+								},
+								fail: function(error) {
+									options.fail && options.fail(error);
+								},
+								complete: function(res) {
+									options.complete && options.complete(res);
+								}
+							}, options.componentInstance);
+						}, options.text.length + 100);
+					})());
+				}, 150);
+			}
+			
+			createCanvas();
+		}
+
+	}
+
+})()
+
+// export default uQRCode
+module.exports = uQRCode
