From 14021335d2254da8920ebcd3b326447f97aaf21a Mon Sep 17 00:00:00 2001
From: CPunisher <1343316114@qq.com>
Date: Wed, 13 May 2020 15:33:17 +0800
Subject: [PATCH] [Image upload]
---
.idea/misc.xml | 5 +-
package.json | 1 +
src/api/db.js | 2 +-
src/components/param/ParamColor.js | 61 +++++++++++++++++++----
src/components/param/ParamCorrectLevel.js | 28 +++++------
src/components/param/ParamList.js | 51 +++++++------------
src/components/param/ParamUpload.js | 32 ++++++++++++
src/components/renderer/RendererImage.js | 8 ++-
src/constant/ParamTypes.js | 5 +-
src/containers/param/ParamUploadViewer.js | 36 +++++++++++++
src/utils/util.js | 20 ++++++++
11 files changed, 185 insertions(+), 64 deletions(-)
create mode 100644 src/components/param/ParamUpload.js
create mode 100644 src/containers/param/ParamUploadViewer.js
diff --git a/.idea/misc.xml b/.idea/misc.xml
index f6addde..3668dc8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,9 +1,6 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/package.json b/package.json
index 0f35c44..a5c0897 100644
--- a/package.json
+++ b/package.json
@@ -37,6 +37,7 @@
},
"homepage": "./",
"devDependencies": {
+ "reactcss": "^1.2.3",
"redux-devtools": "^3.5.0",
"tcb-js-sdk": "^1.6.1"
}
diff --git a/src/api/db.js b/src/api/db.js
index 4eed67a..d82a585 100644
--- a/src/api/db.js
+++ b/src/api/db.js
@@ -6,7 +6,7 @@ const app = tcb.init({
const auth = app.auth();
async function login() {
- await auth.signInAnonymously();
+ // await auth.signInAnonymously();
// const loginState = await auth.getLoginState();
}
diff --git a/src/components/param/ParamColor.js b/src/components/param/ParamColor.js
index 3e62e87..b7ec898 100644
--- a/src/components/param/ParamColor.js
+++ b/src/components/param/ParamColor.js
@@ -1,16 +1,57 @@
-import React from 'react';
+import React, {useState} from 'react';
+import reactCSS from 'reactcss';
import PropTypes from 'prop-types';
-import {SliderPicker} from 'react-color';
+import {TwitterPicker} from 'react-color';
import '../Qrcode.css';
-const ParamColor = ({ rendererIndex, paramIndex, value, onChange }) => (
-
-)
+const ParamColor = ({ rendererIndex, paramIndex, value, onChange }) => {
+ const [displayColorPicker, setDisplay] = useState(false);
+ const styles = reactCSS({
+ 'default': {
+ swatch: {
+ padding: '5px',
+ background: '#fff',
+ borderRadius: '1px',
+ boxShadow: '0 0 0 1px rgba(0,0,0,.1)',
+ display: 'inline-block',
+ cursor: 'pointer',
+ },
+ popover: {
+ position: 'absolute',
+ zIndex: '2',
+ },
+ cover: {
+ position: 'fixed',
+ top: '0px',
+ right: '0px',
+ bottom: '0px',
+ left: '0px',
+ },
+ },
+ });
+
+ return (
+
+
+ {
+ displayColorPicker ?
+
+
setDisplay(false)} />
+
+
+ :
+ null
+ }
+
+ );
+}
ParamColor.propTypes = {
rendererIndex: PropTypes.number.isRequired,
diff --git a/src/components/param/ParamCorrectLevel.js b/src/components/param/ParamCorrectLevel.js
index 38bf243..aa2fd19 100644
--- a/src/components/param/ParamCorrectLevel.js
+++ b/src/components/param/ParamCorrectLevel.js
@@ -2,21 +2,21 @@ import React from 'react';
import PropTypes from 'prop-types'
import '../Qrcode.css';
-const ParamCorrectLevel = ({ value, onChange }) => (
+const ParamCorrectLevel = ({value, onChange}) => (
- 容错率 |
-
-
- |
-
+
容错率 |
+
+
+ |
+
)
ParamCorrectLevel.propTypes = {
diff --git a/src/components/param/ParamList.js b/src/components/param/ParamList.js
index fb4f334..2e0dc1c 100644
--- a/src/components/param/ParamList.js
+++ b/src/components/param/ParamList.js
@@ -4,41 +4,28 @@ import PropTypes from "prop-types"
import ParamTextViewer from "../../containers/param/ParamTextViewer";
import ParamSelectViewer from "../../containers/param/ParamSelectViewer";
import ParamColorViewer from "../../containers/param/ParamColorViewer";
+import ParamUploadViewer from "../../containers/param/ParamUploadViewer";
+
+const mapTypeToComponent = ({
+ [ParamTypes.TEXT_EDITOR]: ParamTextViewer,
+ [ParamTypes.SELECTOR]: ParamSelectViewer,
+ [ParamTypes.COLOR_EDITOR]: ParamColorViewer,
+ [ParamTypes.UPLOAD_BUTTON]: ParamUploadViewer,
+})
const ParamList = ({ rendererIndex, paramInfo }) => (
paramInfo.map((item, paramIndex) => {
- switch (item.type) {
- case ParamTypes.TEXT_EDITOR: {
- return (
-
- {item.key} |
-
-
- |
-
- )
- }
- case ParamTypes.SELECTOR: {
- return (
-
- {item.key} |
-
-
- |
-
- )
- }
- case ParamTypes.COLOR_EDITOR: {
- return (
-
- {item.key} |
-
-
- |
-
- )
- }
- }
+ return (
+
+ {item.key} |
+
+ {React.createElement(mapTypeToComponent[item.type], {
+ rendererIndex: rendererIndex,
+ paramIndex: paramIndex
+ })}
+ |
+
+ );
})
)
diff --git a/src/components/param/ParamUpload.js b/src/components/param/ParamUpload.js
new file mode 100644
index 0000000..3236c8e
--- /dev/null
+++ b/src/components/param/ParamUpload.js
@@ -0,0 +1,32 @@
+import React from 'react';
+import PropTypes from 'prop-types'
+import '../Qrcode.css';
+
+const ParamUpload = ({ rendererIndex, paramIndex, onChange }) => (
+
+
+
+
+)
+
+ParamUpload.propTypes = {
+ rendererIndex: PropTypes.number.isRequired,
+ paramIndex: PropTypes.number.isRequired,
+ onChange: PropTypes.func.isRequired
+}
+
+export default ParamUpload;
diff --git a/src/components/renderer/RendererImage.js b/src/components/renderer/RendererImage.js
index 1352f2f..b71adb6 100644
--- a/src/components/renderer/RendererImage.js
+++ b/src/components/renderer/RendererImage.js
@@ -21,7 +21,7 @@ function listPoints(qrcode, params) {
if (size <= 0) size = 1.0
- pointList.push(
);
+ pointList.push();
for (let x = 0; x < nCount; x++) {
for (let y = 0; y < nCount; y++) {
@@ -125,6 +125,11 @@ function getParamInfo() {
"行星",
]
},
+ {
+ type: ParamTypes.UPLOAD_BUTTON,
+ key: '背景图片',
+ default: data,
+ }
];
}
@@ -140,6 +145,7 @@ const RendererImage = ({ qrcode, params, setParamInfo}) => {
)
}
+
let data = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBMRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEOKADAAQAAAABAAAEOAAAAAD/wAARCAQ4BDgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9sAQwACAgICAgIDAgIDBQMDAwUGBQUFBQYIBgYGBgYICggICAgICAoKCgoKCgoKDAwMDAwMDg4ODg4PDw8PDw8PDw8P/9sAQwECAgIEBAQHBAQHEAsJCxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/90ABABE/9oADAMBAAIRAxEAPwD9IKESiigAooooAKKKKACiiigAoRKKKACiiigAooooAKKKKAChEoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKESiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Q/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//S/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//T/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//U/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//V/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//W/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//X/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Q/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//S/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK0rPSrm8f5E+T+/XVJ4YtvJ2O/7+gDg6K1b/R7mzf503p/frKoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAop6I8z7E+d66fTfDE03768+RP7lAHNw21zcvstk3122m+G4Yf31587/3K6G2tobZNlsmyrdAESQpCmxE2VLRRQBE6JMmx031yupeG4Zv31t8j/3K6+igDyC5s5rZ9kybKrV7BNbW1ynkzJvrjNS8MPD++s/nT+5QByVFPmheF9kybHplABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//U/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorSs9Nubx9lsn/A6AM2tuw0G5vPnf5IK6rTfD1tbfPc/PPXR0AZdno9nYJ+5T9//frUoooAKKKKACiiigAooooAKKKKAMi80q2v02TJ8/8AfrjNS0G5s/nT50r0qovv0AeOUV6Lf6DbXnzw/uHrjLzSrmwf98nyf36AM2iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/1f0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiijY7/IlABU1tbTTP5Nsm963tN8NzXP765/cJ/wCP13NtYW1mnkwpsoA5XTfDGz99f/P/ALFdbDbJCmyFNiVYooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmvDDMmyZN6U9Emd9iJvd67DTfDDzfvr/wCRP7n8dAHktz4MfUpv+JUnz/3K4y/sLnTrh7O/TyZk++lfXSfYNNh8m2RE/wBhK+cviFM83iR3f+4lAHDUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9b9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACirNtYXN4+yFN9dzpvhu2tv31z+/f/AMcoA5Kw0e8v33omxP7713lho9nYfcTfP/fetJPkTYlS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAN/2KdRRQAUUVdsNNvNSfZbJ8n8b/wUAUq29N8P31987/JD/feuo07w9Y6b++uf38399/uVtTX/APBD/wB90AV7PTdO0pMp9/8Avv8Afpk15NN8kP7tKrO7v87/AH6SgArwbx//AMjFN/uJXvNeEePv+Q8/+4lAHDUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqOpKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorodN8N3Nz++m/cQ/8Aj9AGDDDNcv5MKb3rsNN8Kv8A66//AO+K6ez022sE2Qp/wP8Ajq9QBFDbQ20Pk2ybEqWiigAooooAKKKKACiiigAooooAKKKKACiiigAoopvzv9ygB1SQwzTTeTCju7/wV0Om+GLm52PefuE/8feuwtobPTYfJtk/+L/4HQBgab4YRP32ov8A8AX/ANnrpBNDCnk2yJ8n937lUZrmab7/ANz+5UdACu7u++Z99JRRQAUUUUAFeDeP/wDkYpv9xK95rwLx5/yHX/3EoA4yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9D9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKmhtrm8fybZN9AENaVho95fv+5TYn9966rTfDFtD++vP37/3P4K6dERE2J8lAGVpuiWdh8+zz5/771tUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRVqzsLm/m2Wyb/8A2Su1sPDdnZp51+/nv/44lAHJ6bot/qT70Ty4P7713dtpWnaUnnfff++/3/8AgFXZr/5P9GrKd3d97vvoAuTXk03yQ/u0qt89JRQAUUUUAFFL/uUlABRRRQAV4R4+/wCQ8/8AuJXvH+/Xgnjz/kPf8AoA4miiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKeiPM+xPnd629N0G8vPnf8AcQf33rubDSrawT/Rk+f++/36AOV03wrNN++v/kg/ufx12cMMNtD5MKIif7FWKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoore07w/eXJ82b9zB/t/ff/AIBQBz8MM0zpDEju7/wJXa6b4Yd/32ovsT/nin/s9dFDbabpSbIU+f8A8fpk00033/kT+5QBMJrazg8mzjTYn937lU5neb53eo6KACiil+SgBKKKKACiiigAooooAKKX+CkoAK8C+IH/ACHX/wByvfa8F8ef8h7/AIBQBxNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0v0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqaGG5uZvJtk3vXbab4YhT99fvvf+4n3KAOSsNKvNSf/AEZPk/v/AMFdzpvh62s/3037+f8AvvW2iJCiQomxEqWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKnhtprybZbI7v/sUAQVd03Sr/Un/ANGT5P77/crrdN8Kww/vtSfe/wDc/grb+2IibLNNiJQBn2Gg2Glfvpv38/8Aff8A9kSrs15NN8kP7tKrO7zPvf56SgAopfuUlABRRRQAUUUUAFFFFABRRRQAUv8Av0lFABRRRQAV4L48/wCQ9/wCveq8F8ef8h7/AIBQBxNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGO6Im966rTfDc1zsmvH8iB/n2J996868Q/JpUm9N+x0/8AQ6oeHvGepaO/k2z+fB/z7zfc/wCAUAfRVtZ21nD5NsmxKt1zOieLdK1vZDC/kXX/ADyf/wBk/v101ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUqI7vsT53ra03Qb6/wBjbPIh/vv/AOyV2lnpum6Un7lN7/33+/QBzGm+FXuf32o/In9z+P8A+wrrIXsLBPJsESoZruab/YT+5UNAEjzO/wA8z1HRRQAUUUUAFFFFAColJRRQAvyUlFFABS/JSUUAFFFFABRRRQAUUUUAFeC+PP8AkPf8Ar3qvAvHn/IbkoA4yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//U/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/xJ/yB5v8AgH/odeZ16Z4k/wCQPN/wD/0OvL6ANC2v5ofv/P8A+h16j4e+It5Z7Ib/AP0qD+//AMtk/wDi68ipiO6fOlAH2BpWsabrFt51hMk399P40/30rXr5DsNYubOaC5hneCdP40r2PQfiQk2y21tP+3iH/wBnSgD1miq9tcw3MKXNs6TwP9x0qxQAUUUUAFFFFABRRRQAUVJDDLM/k2yO7v8AwJXYWHhjZ++1V/8AgCf+zvQBzFhpt5qL7LdN/wDt/wAFdrYeHrCwTzrx/Pf/AMc/74rWeZLZPJs0RESqG93fe776ALk1+7/InyJVKiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKX5KP46SgAooooAX56SiigArwLxz/yHH/3K99rwLxz/wAhx/8AcoA4yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/xJ/yB5v8AgH/odeX16h4k/wCQPN/wD/0OvL6ACiiigAqSGZ4fnSio6AOr0HxVf6PNvs5vI/vo/wA6PXuWg+PNN1XZbXn+i3X+39x/9x6+ZqmhvHh/20oA+zqK+cPD3jzUtK2Qo/2q1/54zfwf7j17Zo/ifStbT/Rn2T/xwv8AfoA6OiitbTdHvNS+dE2J/ff7lAGTXRab4bvLzY95+4g/8feums9K03Sk3/fm/vv9/wD+wqea8mm/2EoAlhS20qH7NZx/P/n771Xmlmm++9R0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUqUlABRS/7FJQAUUUUAFFFFABRRRQAUUUUAFFFFABXgXjz/kNyV77XgXjz/kNyUAcZRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9b9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAooooAKKKKACiiigAooooA57xL/yB5/8AgFeYV6f4l/5A8/8AwCvMKACipKjoAKKKKAJKjqSo6AJKuW1/NC6P/c/jT76VTooA+tvhNqtvqtt/xPbpJ7p/9Sj/AH9iff3/AN+vdprx/uQ/IlfJfwl/5Cul/wDbb/0B6+pKAF/36SiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKbs9qAHUUUUAFFFFABRRRQAUuykooAKKKKACvAvHn/Ibkr32vAvHn/IYegDjKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//X/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA57xL/yB5/8AgFeYV6h4k/5A83/AP/Q68voAKKKKACiiigAqSo6KAJKKjooA98+Ev/IV0v8A7bf+gPX1JXy58Iv+Qrpf+5N/6A9fUdABRRRQAUUUr0AJRS/JSUAFFFFABRRRQAUUUUAFFFFABRS/JSUAFFFK9ACUUUUAFFFFABRRRQAUUUUAFFFL8lACV4F48/5DD177XgXjz/kMPQBxlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Q/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/xJ/yB5v8AgH/odeX16f4l/wCQPP8A8ArzCgAooooAKKKKACipKKAI6KkqOgD334Rf8hXS/wDcm/8AQHr6jr5f+EX/ACEtL/3Jv/QHr6goAKKKKACiiigAooooAX/cpKKKACiiigApfno+/SUAFFFFABRRRQAUUUUAFFKlJQAUUUUAFFFFABRRRQAUUUUAFeBePP8AkMPXvteC+PP+QxQBxNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAooqOgCSiiigAooooAKKKKACio6koAKKKKACiiigAooooA57xL/yB5/8AgFeYV6f4l/5A8/8AwCvMKACpKjooAKkqOigAqSiigCOpKKKAPePhF/yEtL/7bf8AoD19SV8t/CX/AJCul/8Abb/0B6+pKACil/3KSgAooooAKKKX/boASiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKX/YpKKAF30lFFABRRRQAV4N45/5Cte814F45/wCQwKAOMooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//S/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiio6AJKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigDnvEv/IHn/wCAV5hXp/iX/kDz/wDAK8woAKKkooAKKjooAkqOpKjoAKkoooA94+Ev/IV0v/tt/wCgPX1JXy38Jf8AkK6X/wBtv/QHr6koAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApfuUlFABRRRQAUUUUAFFFFABRRRQAUUUUAFeDeOf+QrXvNeDeOf+QrQBxFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/T/SCiiigAooooAKKjqSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAooooAKKKKACiiigCOpKKKACiiigAooooAjqSiigAqOpKKACiiigDnvEv/IHn/wCAV5hXp/iX/kDz/wDAK8woAKKKKACpKKKACiiigAooooA94+Ev/IV0v/tt/wCgPX1JXy38Iv8AkJaX/wBtv/QHr6koAKKKKACiiigAooooAKKKKAF/gpKKKAClekooAKKKKACiiigBfv0fwUlL89ACUUUUAL/t0bKSigAooooAKKKKAF/3KSiigArwbxz/AMhWvZb/AFK2sEd7l68E8T6rDqt+80P3KAOeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9T9HKKKKACiiigAooooAKKKKACiiigAooooAKKKKAJKjoooAkoqOigCSio6KAJKKKKACiiigAooqOgCSiiigAooooAjqSiigAooooAKKjqSgCOpKKKACiiigAooooAjoqSigAooqOgCSiio6AJKjqSigAqOiigDC8S/8gef/gFeYV6f4l/5A8//AACvMKACpKKKACiiigAooooAKKKKAPefhF/yFdL/ANyb/wBAevqOvmH4Rf8AIV0v/cm/9Aevp6gBd9JRRQAUUUUAFFFFABRRRQAUvyUlFABRRS/7FACUv+5SUUAFFFFABRRRQAUUUUAFFFFABRRRQAv+xSUruiJveuM1jxhYaajoj73oA6qaaG2h3zPsrz3W/HkNt+5sPnnrzrWPE+paq/zvsSueoA0r/VbzUn3zPWbRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9X9HKKjqOgCxRVeigCSio6KAJKKjooAkoqOjfQBJRUe+jfQBZ30lV6N9AFiiq9SUASUVHRQBLvpKjooAkopd9JQBJRUdFAElFR0UAFSVHUlABRRRQBHUlFFABRRUdAElFFFABRUdSUAFFFR0ASVHUlFAEdFFFABRRUlABUdSVHQAUVJUdAElFR0UAYvif8A5BU//AK8tr0/xJ/yCp68woAkooooAKKKKACiiigAooooA9++EX/IV07/ALbf+gPX09Xy98JP+Qpp/wDuTf8AoD19Q0AFFL/t0lABRSpSUAFFFFABRRRQAUUUUAFFL/BSUAFFFFABRRRQAUUUUAFFFFABRRVS81K2sE33L7KALdc/qviGw0pP3z/P/crgNe8eO++203/vuvNJrm5uX86Z98lAHYa342vNSfybb5IK4x3eZ97/ADvTKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1v0Uoopm+gB9FR0UASUVHRQBJTN9Rb6N9AFimb6i30b6ALFFV99G+gCXfT6r76N9AFiiq++jfQBYoqvvp2/3oAmo31Dv96N/vQBNRvpm+jfQBPRUG+n0AWd9G+q1G+gCxRUdFAElFFLvoAfRTN9JQAVJRRQAUVHRQAVJRRQBHUlFR0ASVHRUlAEdFSVHQAUVJRQAUVHRQAUUVJQBHRRRQBheIf8AkDzV5hXp/iT/AJBU9eYUASUUUUAFFFSUAR0VJRQBHRUlFAHu/wAJP+Qpp/8AuTf+gPX1DXyz8KP+Qrp//bb/ANAevqagAooooAKKKKACiiigAooooAKKKKACiiigBfkpKKKACiiigAoopX+SgBKrzTJCm+b5Erm9Y8W6bpSbN/nz/wByvH9Y8T6lqr/PJsg/uJQB6Rrfjy2tt8Nh8715RqWq3+qvvuX/AOAVlUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//1/0Mo31V3+9TUASb6g30zf70b/egB++jfTN/vTd9ADt/vRv96bvo30AO3+9G/wB6hooAm3+9G/3qGigCbf70b/eoaKAJt/vRv96hooAm3+9G/wB6hooAm3+9P31WooAs76N9Vqk30AXN9G+qe+nb/egC5v8Aejf71T3+9G/3oAv76fVDfRvoAv76N9V99O3+9AFqpKqb6fQBZ30lV99SUASUUu+jfQAlFFFABRRRQAUUUUAFFFFABRRRQBJUdFFABUlR0UAFFFFAGF4h/wCQPNXllep+Jv8AkDz15QlAFipKjqSgAqSo6koAKKkqSgCOipKKAPb/AIU/8hXTv+23/oD19Q18w/Cj5NV07/cm/wDQHr6eoAKKKKACil/2KSgAooooAKVKSigAooooAKKKKACiiigAoqjc3ltZw+dcvsRK80174hffttK/77oA9C1XW7DTYd9y/wDwCvH9b8c3l/vhs/3EFcZc3lzeTedcvveqtAE7u8z73fe9MoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9AN9R0UzfQA+imb6N9AD6KZvpm/3oAfvo30zf70b/AHoAfvo30zf703fQBLvo31FvqDfQBc30zf71W30b6ALO/wB6N/vVbfRvoAs7/ejf71W31FvoAvb/AHp++qe+jfQBc30b6zt9S76ALm+jfVPfRvoAub6fVffTt/vQBNUm+qu/3o3+9AFrfTt/vVbfRvoAub6n31n1JvoAvb/en76ob/ejf70AaVG+qG+p99AFypd9U99G+gC5vo31W31JQBJRS76N9ACUUUUAFFFSUAR0UUUAFSVHRQAUUUUAc/4q/wCQPNXkqPXq/i35NEnrx9HoAubKspWaj1ZR6AL9SVVR6mR6ALKU+mI9PoAKKkooA9u+Ff8AyGNO/wByb/0B6+nq+XvhX/yGNO/7ea+oaAJKjoooAKX/AG6SigAopXpKACiiigAooooAKKK5nWPFWlaOjo775/7iUAdI7pCm+Z9iJXB6345s7DfDZ/v56831vxhqWqvs3+RB/cSuVoA1dV1u/wBVm865n/4BWVUdSUAFFR0UAFSVHRQAUVJRQBHUlFR0ASUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//0fvbf70b/em76g30AWd/vTd9U99G+gC5vqDfUW+o99AEzvTd9V6KALG+jfVeo99AFjfRvqvvo30ASUVHvo30ASUVU30b6ALdFVN9G+gC3RVHf70b/egC9RVHf70b/egC9RVHf70/fQBbqTzXqhvo84UAX/NepPONU/ONG+gC55xqXfVBJqPOoA1t9O86smpPNegDV30b6zvONS76AL9Sb6p+cadv96ALm/3o3+9U/tPvT0moA099O3+9Ud9O86gC/vp9Zu/3p/nCgC/vqSqe+pd9AFzfSVXo30AWKKjqXfQAlFFFABRRRQBzPjN9mgz14ak1e8eKrO5v9EntrNN718zX9zc2Ez21yjwOn9+gDp0uU61ZS5rjEv8AfV+G830AdbDNVyF65uG5rYhmoA3EqxWbC9X0egCdKkqNKkoA9n+FH/IVsv8Acmr6hr5i+F//ACGNO/4HX07QAUUUUAFFL9ykoAKKKKACiiq800NtC80zokaf36ALFZ2parZ6bC815Mif7Fee698QoYd9tpSb3/v15XeX9zfzfabl3d6AO517x/c3m+2039xB/f8A464CaZ5n3zPveoKKACiiigAooooAkqOiigAooqSgAoqOpKACo6KkoAKjqSo6AJKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//S+6N9R76jqPfQBJRUe+jfQBJUe+oN9M3+9AFrfRvqnvqDfQBc30zf71W30b6ALO/3pu+oN9RUAS76N9Vt9M30AXN9G+qe+jfQBc30b6ob/ej7T70AWvtElFU99G+gC59oko+0SVT31B5woA0/tElH2iSszzhR5woA0/tElO86srzhU++gC951P31nb6d9p96AL/nCp/ONZnnCjfQBq/afen+cKx99T/aJKANjzjTvOrH86n76ANPfVjzXrL84077T70Aa3nGpd9Z3nGnedQBqpNT/ADqykekoA1vtPvU2+svzjUqTUAavnUb/AHqgk1CTUAaW+pkes3fU++gDR30+s3zqfvoA06l31nb6ydV8Q2elQ75n3v8A3EoA6R3RE3vXnXif4kaVo++2s/8ASrr/AGPuV5X4n8Ya9rO+FP8ARbX+4ledOj/x0Adt/wALI8Tpf/b/AD/k/wCeP8Fd/Z+JPB/jyH7BrCJa3X9+vAnqq6UAeqeJPh7rGib7yw/02y/2Pv1wcN5sfY/yPXT+GPiRreg7La8/02y/uP8Afr0t9N8E/EK2+06a6Wt7/wCP0AeXW15W9bXlc3rfhXXvDE3+mQeZB/BMn3KrWepUAekW1zWwj1xNneb66S2moA3kqxVGF6tJQB7d8Kv+QxZf8Dr6er5h+FX/ACGLL/gdfT1ABRRRQAUUUUAFLv8Ak3v9yue1XxJpWlJ++fe/9xPv14/rfjbVdV3wwv5Fr/cSgD0vXvG2m6Vvhtv391/sfcrxzVfEOpaxNvuZ/k/ufwVh0UAFFFFABRRRQAUUUUAFFFFABRRRQAUVJUdABUlR0UASVHRRQBJUdSUUAR0UUUASUUVHQBJRUdSUAFFFFABRRRQAVHUlFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/T+3N9Qb6Zv96rb6ALO/3pu+oN9Qu9AE2+h3qtvooAkqPfTN9Rb6AJd9G+qe+mb/egC5v96bvqrv8Aem76AJd9M86oaZ5rUAWd/vR51U9/vRv96ALW+o99V/ONQb6AL++mecKp76N9AFzzhR5rVnecaPONAGj5rUea1Z3nGjzjQBo+a1HmtWd5xo840AaPnCjzhWd5xqXfQBf31JvrM30b6ANXzqPOqnv96N/vQBrb6d9p96x9/vT/ADhQBsecKN9ZW+npNQBs/aJKck1Y/nU/zhQBsecKs/afesdJqmR6ANhJqmSasRJqek1AG2j09JqxPOFWUmoA1vONXPONZKTVNbJNczJDbJvd/wCBKAL6TVch3zfcrpNK8GXLp52pfJ/sV1qaJDCmyFKAPK7m2vHTZD8lclc+Hnmd3f79e6vo+/8AgqnNon+xQB85XPht/wC5XN3nhj/Yr6im0H/YrKufDe/76UAfJ154bmT7iVg3Om3MP8FfWlz4V3/wVzdz4M37/koA+V5rZ0+/UMM1zZzJc2cjwOn8aV79f+Bt+/YlcTf+CblPuJQBseG/i1MkP2DxVB59r9zzf/i66TUvAGieJLb+1fB90iO/z+T/AAV4zeeHr+2/gqtpupax4euftNhM8D/+OUAdJc22paDc/Y9SgeB/9v7lbdhfo+yuq0f4kaD4ntk0rxhaojv8nnfwVW1j4e3lmn2/wxN9qtX+fZ/H/wAAoAv2cyPWqj1wFhfvDN5Nymx0/geu2tpt6UAe9/Cv/kK2P+49fT1fL3wr/wCQrZP/ALD19Q0AFFRTTQ20LzTPsRP79eda98QobbfDpSee/wDz2/goA7y/1Kz02HzrydIEryXXviFNc77bR4/IT/nt/HXB3+pXmpTedeTvO9Z9AE8001y7zTPvd/43qCiigAooooAKKKKACiiigAooooAKKKKACiiigCSo6KKACiiigAqSo6KACpKjqSgCOiipKAI6koooAKKKKACiiigAqOpKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/1PsnfUVR76KADfTN9M3+9Vt9AFnf71W3093qs70AP3+9G/3qGmO9AD6Zvqs71JvoAdv96hd6ZvqF3oAsu9M31W31X30AXPONHnGqe+o3egC5vpm+qDvTfONAF7zqPOqjvqDzhQBp+caPONZm+medQBf84UecKoedT99AFzzhR5wqh51P30AafnGnedWVvo84UAavnUedWV5wqffQBo76N9Z2+jzjQBqb6k841k7/AHp/nCgDVSan76x/OFT+caANdJqej1j+dT99AGx5rU9Jqx99SecaANpJqek1Y++no9AG8k1TI+6sRJq7bwZqtnpVz9pvIUuv/Q0oA6Tw94G1XWNlzc/6La/33++9e06V4e03RIdltB8/99/v1No+t6brEO+wn3/7H8da1AEdM2JT6KAH+UtVnhSpqKAK32aKoXsIXq/RQBlSabbPVabRIXreooA5Kbw3C/8ABWVc+D4X/gr0KmbKAPIrz4ewzfwVxOpfChJv+WFfSVFAHxLqvwcufne2Ssqw03x/4Jm32G+e1/jhf7lfdrwwv9+Oq01hZzffgR6APlGG/wDDfjNPs2q2r6dqP+38j/8AAHpk3h7UtEf/AJ+rX++lfTlz4S0G8/4+bKF/+AVfsPhr9oh8nTd8EP8Afl+5QBxXwo/5Ctj/ALj17LrfjPStH3wo/wBqn/uJXiF/pVz4c1Wazd/JmT5Pk/26of7b0Ab2seJ9V1t/9JfZB/zxT7lYFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBJUdSUUAFFFR0ASUUVHQAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9X663+9Md6h30zf70ATO9Q7/eoXemb6AH0x3pjvULvQBJUbvTHemO9AD3eoXemO9VnegCWonel31BvoAn31V3+9NqDfQBM71Dvod6ioAl31FUe+mb6AH76ZvqKigB2/3o3+9Q0UATb/AHo3+9Q0UATb/ejf71DRQBNv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FSUVHQAUUVJQAUVHRQBJRUdFAElFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0foF6iepXqJ6AIHeoqleqz0AM30b6So6ACio6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqSgCOpNlGynbPagB1Lsp+ypKAI9lPRKm2VPsoAgRKmRKeiVMiUAQ7ParWykRKsolADESpkSpkSnolADEhq/D/AKmmIlPoAKkqOpKACiiigAqSo6koAKKKKANnw9/yFYP+B19veCf+RZsv9x//AEOviHw9/wAhWD/gdfb3gn/kWbL/AHH/APQ6AOpooooAKKKKACiiigAooooA+efHH/IyT1yNdd44/wCRknrkaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAkooqOgCSiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//S+h3SqzpWk6VWdKAKDpVZ0q+6Ux0oAobKZsq5so2UAUNntTdlXKj2UAU6Ks7KZs9qAIaKk2VHQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFSU7Z7UANp2z2p+yp6AINlT1Lsp6JQAzZT0SnolTIlAEVSolTIlTIlAEKJVlEp6JVlEoAhRKmRKESrKJQAxEqZIamRKmRKABEqu/360USs2X/X0AMooooAkoqOpKACiiigCSio6KAOg8Pf8AIVT/AIHX2x4JT/imLL/cf/0Ovifw9/yFU/4HX234J/5Fux/3H/8AQ6AOpooooAKXfSUUAFFFFABS/wC3R8lJQB88+OP+Rknrka67xr/yMU9cjQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUlAEdFFFABRRRQAUUUUAFFSVHQAVJUdSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFSUAR0UUUAFFSVHQAUVJRQB//9P6ZdKhdK0nSqzpQBQ2VC6VpPDUXkmgCnsqrs9q1XSoXSgDO2VBsrT2VA6UAU9lRVedKY6UAUNlM2Vc2UbKAKGz2ptWNlM2UAVqKm2e1N2UAR0UUUAFFFFABRRRQAUVJRsoAKkpdlP2UAM2U/ZUlS7KAIUSptlTIlPRKAG7Kds9qmRKeiUAMRKeiVZRKmRKAGIlTIlPRKsolAFZEqyiU9Eq4iUAVkSrKJUyJUyJQBCiVMiVZRKmRKAIUSsS8+S5euqRK5a//wCPl6AIKKKKACpKjqSgAooooAKkqOpKANzw9/yFU/4HX234G/5FbTv9z/2eviTw9/yFU/4HX234J/5Fmy/3H/8AQ6AOppdlJRQAUUUUAFFFFABRRRQB88+Nf+Rinrka67xr/wAjFPXI0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFSVHRQAUUUUAFFSUUAR1JRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFSUAR0UUUAFSUUUAR0UVJQAUUUUAR0UVJQBHRUlFAH/9T6u2e1MdK0tlMdKAMp0pmz2rSdKrOlAFTZUDpVx0pjpQBQdKhdK09lQOlAGdsqN0rQ2VA6UAUNntTdlW3SoXSgCm6UbKmdKh2UARVBsq5sqF0oAgqPZVjZUdAFeipKKAI6koqSgBuz2p+yn1JQAVKiUlWEoAjRKeiU9Eq0lAECJUyJQiVcRKAIUSp9lWEShEoAESpkSnpDVlEoArIlWUhp6Q1cRKAIUSpkSnolWUSgCFEqykNTJDVlEoAhSGrKQ09EqyiUAQolchqX/H5JXdolcHqvyX89AFOio6koAKKKKAJKKjqSgAooooA6Dw9/yFU/4HX254G/5Fiy/wByviDw9/yFYP8Agdfb/gz/AJFmy/3KAOoooooAKKKKACiiigAooooA+efGv/Iekrka67xr/wAjFPXI0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVJQAVHUlFAEdSUUUAR1JRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUlFFAEdFFSUAFR1JUdABRUlFAEdSUUUAFFFFABUdSUUAFFFFABRRRQAUUUUAf/1fsl0qs6VpOlQulAFDZULpWk6VWdKAM3Z7VC6VpOlQulAFB0qs6VfdKhdKAItlVXSrjpULpQBn1Hsq86VWegCm9QulXHSoXoApvQ9T1HQBXqvV16rUAR0UUUAFFFFAElSJUG+n0AWUqeq9SI9AEyVaSqSPUyPQBfSrKVmo9X0egC1VhKpo9WUegC+iVMiVCj1coAESpkhp6VcRKAIUSrKQ1ZRKeiUAMRKmRKmRKsolADEhp6JUyJT0SgBledav8A8fz16iiV5dr3yalPQBmUVHUlAElFFFABUlR0UASUUUUAbvhv/kKpX2/4G/5Fiy/3K+HfD3/ISj/4HX3D4J/5Fiyf/YoA6r/co/jpKKACiiigAooooAX7lJRRQB88+M/+Q89cjXXeMP8AkPzVyNABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFSVHQAVJRRQBHRRRQAVJUdSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRUlR0AFFSUUAFFFFABRRRQAUUUUAFFFFABRRRQBHUlFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9b7c2UbKubKgdKAKDpULpWq6VWdKAMp0pjpV90qF0oAzXSqzpWk6VC6UAZrpULpWk6VWdKAKDpVZ0q+6VC6UAZb0PVt0qm6UAVnqs9WXqs9ACVXqy9VnoAjooqOgAoqOigCxTd/vUNSUAWN9PR6qb6l30AXEepkeqCPT0egDSR6mR6zUepkegDYSariTVgpNVlJqANtJquJNWIk1WUmoA6FHq/DNXNw3NX4bmgDp0erkL1zENzWlDc0AbyJVlErKhuUrShmSgC4iVNs9qhSZHq4mygARK8i17/kIz17ClePa/8A8hWegDIooooAkqSo6koAKKKKAJKKjqSgDd8N/wDIVSvt7wT/AMi1a/7lfD3h7/kJR/8AA6+4vA3/ACLFl/uUAdRRRRQAv+5SUv8ABSUAL/HSUUUAFFFFAHzz4w/5D81crXW+Nv8AkPT1yVAEdFSUUAR1JRRQBHRUlR0AFSUVHQAUVJUdABRRUlABUdSVHQBJUdSUUAFFFFAEdFFSUAR1JRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFSUAR1JRUdABUlR1JQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9f722e1VnSr9MdKAM10qF0rVdKhdKAKDpVPZWk6VC6UAZTpTHStJ0qs6UAZrpVZ0rSdKrOlAGU6VC6VqulU3SgDNdKpularpVZ0oAx3SqzpWq6VQdKAKb1WerLpVN6AEqOio6ACiiigAooooAKKKKAJN9O3+9Q0UATb/epkeqdM30AaqTUJNWVvqffQBrpNVlLmsH7T70/7TQB0iXNWUua5hLmpkuaAOwS5q+l/XBpeVZS8oA9ChvK0ob+vN0v6spqVAHp0N+laUN/XlaaxVyHWKAPV0vExXlfiF9+pO9XIdY/26568ufOuXkoAKkoShKACpKjqSgCSiiigAqSo6koA3fDf/ISSvt7wT/yLVr/uV8Q+G/8AkJJX294J/wCRatf9ygDqaKKKACiiigAooooAKKKKAPnzxt/yHp65Kut8bf8AIenrkqACiiigAooooAKKKKACiiigCOpKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACipKKAI6KkooAjqSiigAqOpKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/Q/QXZTNntWlULpQBm0x0q+6VDs9qAKbpVZ0rSdKhdKAM10qF0rVdKrOlAGU6VWdK1XSmOlAGO6VTdK1XSqzpQBlOlUHhrbdKoPDQBlOlUHSth4apvDQBiOlUHSt54apvDQBiOlQ1sPDVN4aAKdFTOlQ0AFFFFABUdSUUAR0UUUAFFFFABRRRQAUUUUAFFFFADd/vT970lFAEnmvR5r1HRQBP5z0/7Y/rVWigDQS/et62m3w7642umsH/cpQBrJVxKz0qRKALlFCUUAWKKjqSgAqSo6koA3fDf/ISSvuLwZ/yKtr/uV8O+G/8AkJJX294Mf/im7X/coA6miiigAopfnpKACm/cp1FABRRRQB8+eNv+Q9PXJV1vjn/kOT1yVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVJQBHRUlFABUdSUUAR0VJRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRUlR0AFFSVHQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUlAEdFFFABRRRQAUUVJQBHRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//R/Rio9lWKKAK7pULpVqo3SgCm6VC6VfdKi2UAUnSqzpWk6VWdKAKDpULpWk6VC6UAZTpVZ4a1XSqzw0AY7w1TdK3nhqs8NAGC8NU3hrbeGoXSgDBdKrPDW88NU3tqAMF4apvDXSPDVN7agDnnhqs8NdC9tVN7agDBeGq2yt50qs8NAGbRVx4ar7KAK9FLspKACiiigAooooAKKKKACiiigAooooAKKKKACiio6ACugtn/AHNc/W7bP+5oA0kerKPVBHqZHoA0kqeqqPUyPQBMlOqOpKAFSn0xKfQB0Phv/kJJX294M/5Fu1T/AG6+HPD3/ISjr7j8GJ/xTdr/ALlAHU0UUUAFFL9+koAKKKKACiiigD588Y/8hqeuSrrfHP8AyHJ65KgAooooAKKkqOgAooooAKKKKACiipKAI6koooAKKKKACiiigAqSiigCOipKKACiiigAooooAKKKKAI6koooAKKKKACiiigCOpKKKACiiigAooooAKKKKACiiigAooooAjoqSo6AJKKKKACiiigAqOipKAI6KkqOgCSo6kqOgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//S/SCo6kooAjpdlJRQBHUdWKXZQBQ2e1MdKs7KKAKbpVfZWjsqF0oAzXSoXhrVdKheGgDKeGoXhrVdKheGgDKdKrPDW28NVnhoAwXhqs8NdC8NQvDQBzzw1Te2rpHtqrPbUAc29tVZ4a6R4arPbUAcw9tUL21dI9tVZ7agDm3tqpvDXVPbVTe2oA557aqzw10j21QvbUAc28NVtldC8NVntqAMaitB7aoXhoAq0UuykoAKKKKACiiigAooooAKjqSo6ACtG2f5KynqZHoA3kerKPWOk1XEegDYR6so9ZSPVxHoA00pyVWR6ej0AXKKjqSgDc8Pf8hKOvubwR/yLdl/uV8M+Hv+QlHX3H4J/wCRatf9ygDrajpf46P4KAEooooAKb81OooAbv8AenUUUAfPnjb/AJDD1yVdV42f/idvXK0AFFFSUAR0VJRQAUUUUAFFFSUAR0VJRQBHUlFFABRRRQAUUUUAFFFFABRRRQAUVJUdABRRRQAUVJUdABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFR1JRQAUUUUAFFFFAEdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0/0gooqOgAoqSo6ACipKjoAKXZSUUAR1HsqxRQBU2UzZ7VaooAzNlPdKuUzZQBQ8modlaWz2puygDJeGmPDV/wAmjyaAMd4aheGtt4aheGgDE8mqz21bzw0PDQBzb21QvbV0P2b2qHZQBzbw1We2rp3hqF7agDmHs6rPbV1T2dQvZ0Ack9tVZ7aute2qF7agDj3s6pvbV2D2dQvYUAcS9tUL21dg9nVN7CgDkntn6VW2PXVPYVTezoAwKK2Xs6oPbP0oAq0Uux6SgAqOpKjoAjSqE1z9m+er71z2pI7psSgC/Z63ZzPs37HroYZq+ctYs7+F/Ohd0eptH+It5pT/AGbVU3p/foA+mYZquQzVxOieIbDVYfOs5t9dJDNQB0KPWglYEM1aSPQBfSpqr1KlAG/4e/5CUdfc3gz/AJFu1/3K+GfD3/ISjr7j8E/8i1a/7lAHW0UUUAR0UUUAFFFc/rfifStBhea8nTf/AHKAN53T771yWseLdK0eF037568W1v4l6rrcz22lR+Ra/wB+sG2s7m5+ebe70Aausaq+sX73P9+s3ZVl7N4X2PT9lAEWypKXZRsoASiil2UAJRRRQAUUuykoAKKKKACiipKAI6KkooAjqSiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKjqSigCOipKKAI6KkooAjooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACio6KAJKjqSigCOipKKACo6kqOgAoqSo6ACiiigAooooA//9T9IKKKKACo6KkoAKKKKAI6KkqOgAooooAKKKKAF2UbKSigCOo9lWKKAK9M8kVc2UbKAKH2b2puytHZRsoAx/JFM8mtao9lAGb5NN2VqbKZsoAx/JFMe2rb8kUeSKAOe+y+9Me2rofs3tUP2X3oA557aofs1dP9l96PsvvQByr21Vns66r7NTPsvvQBx72dVns67B7ah7OgDhns6pvZ13j2dVns6AOAewqg9hXor2FU3sKAPN5rCqE1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+5QB2CPV9Kx4Xq/voAsUUqUlAC76SionegAd6zZnq471QuX+TmgDnryuem+/XQ3lYT0AYc1V3q86VTegCrUdS7KSgCOiiigAooooAKKKKACipKbs9qAG1JRRQAUUuyn0AR0uyn1JsoAjoqSpKAK9SbKds9qfsoAip2z2qambKAGbPajZ7U/ZRsoAZs9qhqzspmz2oAbsqN0qxTdntQBVoqxsqB6AIqKkooAr0VJRQBXqOrFR0AR0UUUAFR1JRQBHRRRQAUUUUAFFFFAEdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVHUlFAEdSUVHQAUUVJQBHRRRQB//Q/SCiiigAooqOgCSiiigAooooAKKKKACiiigAqOipKACiiigCOipKKAI6koooAKjqSigAooooAKKKKAI6KkooAjqSio6ACiipKAI6kqOigAooqSgCOiiigAqSo6koAKKKKACpKKKACpKKKACiiigAooooAKkoqaFKANWzQ767/TfuVwtn9+u0saAOqheriPWVbPWkj0AWakqDfT99AElFR0x6AGO9UZutW3es25oAx7msKbrW7c1iT0AZTpVB6vzdKrPQBTpjpU9QbKAEpuz2qao6ACiiigAooqSgCOipKKAGbKfUlFABsop2z2p+ygCKnbPapqKAGbKfUmynbPagCGirFFAEeyjZUlFAEeynbPajZ7UbPagBuyjZUlFAFembKs7Pam7KAK9R7KlekoAr1HUlMegBKjqSo6ACo6kqOgCOo6sVHQBHRRRQAVHUlR0AFFFFABRRRQAVHUlFAEdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVHUlFABRUdFAElFR0UAf//R/SCiiigAooooAKKKKACiiigAooooAKKKKAI6koooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAoqOpKACiiigCOpKKjoAKkoooAKKjqSgAooooAKKKKAJKKKkoAKKKKACiiigAqSimJQA+rMPSoqsQ0AattXW2dcra966qzoA6S2er8L1m2z1fgoAtVJVRKnoAsVDv96dTXoArO9U3q49Ztz92gDNuax5ulbFzWVMlAGW9UnSr9z3qm9AFZ6iqw9Q7PagCGipKKAI6KkooAjoqSigCOptntTqXZQAzZ7VNRRQAzZT6m2e1OoAj2U7Z7UbPajZ7UAOpuz2p+yp9lAEGyjZVnZ7U/ZQBFRsqXZT6AK+yirGymbKAItlQbKubKSgCi9PdKm/gqs9ADXqOrFRvQBXqN6c9D0AVaKkqOgCOh6kqOgCOo6sVHQBHUdSVHQAUUUUAR0VJUdABRRRQAUUUUAFR0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVHQAUUUUAf/0v0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKjqSigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCOpKKKACiiigAooooAKkqOpKACpKjqSgAooooAKkqOpKACiiigCRKtxfdqFKspQBsW3auhtq56Ct62egDoUq+lZtt2q+j0AXEqeqqPU1AElQPU9R0AV3qrc96tPVV6AMq5rHm6VsTdKx5ulAFN6pulab1mOlAET1HVio6AINlJUlFAEOz2o2e1TUUAQ7PapqKkoAjqTZTtntRs9qAG07Z7U6l2UAJRVjZUlAEeynbPan7KfsoAjqSpKKACipdlGygCKk2f3Km2UbKAItiUVLspKAI6jqzsqF0oArPTHSpaa9AFWilekoAr1C9WXSmUAU6Y9WXqGgCOo6kooAjqOpKKAK9FSVHQBHRRRQAVHUlFAEdFFFABRRRQAUUUUAR0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUdSUUAR0VJRQB/9P9IKKKKACiiigAooooAKKKKACiiigAooooAjqSiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKkoooAKkqOpKACiiigCSiiigAqSo6koAlSriVWStBKAL0FbcPSsSCtuHpQBvpV5KyoelX0egDQSpKro9SUAS76Y9OqOgAeqb1K71E9AGZN0rNl+7WlN0rNl+7QBUqq9WX/26hegCg9OpXpKAG7Pam1JRQBHTtntTqKAG7PanU3Z7U/ZQAlN2e1P2VboAiRKfs9qfsp+ygBmyn7KkqXZQBFRUuyjZQAbKNlGypkSgCHZU+ykRKloAj2UbKds9qdQBHsqDZVuo6AI3SmbKneoNlAELpUL1PUb0AV3qq9XqqPQBE9R1M9Q0AQ7PamvUlV6AI6KkqOgCOiiigCOo6kooAr0UUUAFFFFAEdFFFABRRRQAUUUUAR0VJUdABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBHUlR1JQBHRUlFAH//1P0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKkoAKKKKAJKKKKACiipKACiiigCShKKEoAuJVxKppVxKAL0FbdtWIlbdtQBq23atZKyUq4lAF9KfUdSUASb6joooAY9U3qy9U3oArTdKoPVp6qvQBWeqz1ZeonoApvUdWKKAKmykqxsooAg2U+pKds9qAG7KkpdlPRKAGbKeiVJRQAUiJU2yjZQAIlPRKeiUqUAGyjZTkSnUANRKdRS7KAEpdlPooAjqSj/booAjoqSo6AI6jdKsVHQBA9RPUlR0AVXptSvUT0AV6jenPTXoAr016e9MegCs9JVh6r0AR0VJUdAEdFFFAEdR1JUdABRRRQAVHUlR0AFFFFABRRRQAVHUlR0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBHRRRQB/9X9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpKjqSgAooooAkooooAKkqOpKACiiigCSpUqJKkoAsJV5KopV5KALkFbaViJWtD1oA2Eq5VNKsJQBcR6sVUSrO/wB6AH76N9M3+9OoAa9UaleoqAKb1Xqw9V6AKj1E9SvUVAEdR1Yeo9lAEdFSbKKAGbKfUlFABRUuyjZQAbKNlGyp9lABsop2z2p1ADUp1Ls/gp9ABUmyo6k2UAGyipKj2UAFSVJRQBXoqSigCPZUdSbKjoAjqOpKjoAgf5KiqV6ioAjeq71YeoXoApvTXpz0PQBWeoqsPUL0AQ1HVh6r0AFRvUlR0AFR1JUdAEdR1JUdABRRRQAVHUlR0AFFFFABRRRQBHUlFR0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUdSUUAR0VJRQB//9b9IKKKKACiiigAooooAKjqSigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSo6koAKKKkoAKKKKAJKKKKACpKjqSgAqwlV0qxQBMlXEqmlXEoAuQVrQ9ayYK0kegDVR6uJWclW0egC+j09KiqSgCxvqN3pm+jfQAx6a9FQPQBE9V6sPVV6AKz0PU71A9AEVFFFABUuyoql2UAGyjZT6ZsoAfUlGypKAIkSpaKXZQAlKiU+pKAI0SpNlSUUAR7KNlSVJQAUUUUAFFFFABUdSfJRQBHUb0UPQBXopXpj/PQBWeh6HoegCJ6pvVx6qvQBVopr0PQBC9R1I9QvQA16r1JUdABUdSVHQAVHUlR0AR1HUlR0AFFFFABUdSVHQAUUUUAFFFFABUdSVHQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAR0VJUdABRUlFAH/1/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqSgAooooAKkoooAKKKKAJKKjqSgAqRKjqSgAqxVerCUATJVxKppVxKALkFayVkwVfSgC5D0q+j1QSrdAF1HqffUCPT99AElFR76N9AElQPT6rvQAPVV6e9MegBr1A9T1HQBHRUlFABRUmyigA2UVJTUoAdSolPqTZQBHUlFSUAR7KkqSigCOpNlFSUAR1JRRQAUUUUAFR1JRQBHRRRQBHVerFRvQBHUM/3Ke9JQBUeoqsUx6AInqq9Wnqm9AFV6dTXp1AFd6hepqjoAr0UUUAR1HUlR0AFR1JUdAEdR1JUdABRRRQAVHUlR0AFFFFABRRRQAUUUUAR0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFR1JRQBHRUlFAH/0P0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSiigAooooAKkqOpKACiiigAqSo6koAKkqOpKACrCVXSrCUATJVxKppVxKALiVfSqCVcSgC+j1ZR6o1cSgCwj1JvqBHp9AFiio99G+gA31G/9+pHqvQAUU16bQAUUUUAGyiiigAqSmpTqACpKKKACpKEqSgAqSihKAD/AGKKKkoAKKKKACiiigAooooAKjqSigCOmPT6KAI6jeh6HoAjqu9SVG9AED0PQ9RUAR1XerFV3oAqvQ9D06gCu9V6leoqAB6r1JUdABUdSVG9ABUdSVHQBHUdSVHQAUUUUAFR1JUdABRRRQAUUUUAFFR0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUdABRRRQB//9H9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKkoooAKKKKAJKKjqSgAooooAKkqOpKACpKjqSgCSpEqvVhKAJkq4lU0q0lAFxKlSqyVMlAGslSpVNHq4lAEyPT9/vUKPUm+gCSio6N9AElFR76KACiiigAooooAKkpqU6gAoqSigCRKEqOpKAJKkqOpKACiipKACiiigAooooAKKKKACiiigAqOpKjegAqOpKrvQAVHUj1A9ACVG9SVG9AED1FUr1E9AEb1XepXqm9ACVG9SVG9AEdR0r0x6AIajpXpKACo6kqOgCOipKjoAjqOpKjoAKKKKAI6KKKACiiigAooooAjooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiio6ACipKKAP/0v0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpKjqSgAooooAKKKKAJKKKKACiiigAqSo6koAKkqOpKAJUp6UxKelAEyVaSqqVaSgCVKt1USrdAE6PVlHqmlWEoAsVLvqKigCxRRRQBJUdSVHQBJRRRQAUUUUAFSVHUlACpT6YlPoAKsVXqxQBJRRRQAVJUdSUAFFFFABRRRQAUUUUAFFFFAEdFFFAEdR1JUdAEdR1JUdAEb0PQ9D0AU6HooegCq9Vnqy9VnoASo3qSo3oAgeoqleoqAIHpKV6SgCOh6KHoAjpj0+mPQAlR1JUdABRRRQBHRRRQAUUUUAFFFFABUdSVHQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVHUlR0AFFFFABRRRQB//2Q=="
export default RendererImage
diff --git a/src/constant/ParamTypes.js b/src/constant/ParamTypes.js
index c0b5c9b..728e766 100644
--- a/src/constant/ParamTypes.js
+++ b/src/constant/ParamTypes.js
@@ -1,6 +1,7 @@
-export const ParamTypes = {
+export const ParamTypes = ({
TEXT_EDITOR: 1,
SELECTOR: 2,
COLOR_EDITOR: 3,
MULTI_CHECK: 4,
-}
+ UPLOAD_BUTTON: 5
+});
diff --git a/src/containers/param/ParamUploadViewer.js b/src/containers/param/ParamUploadViewer.js
new file mode 100644
index 0000000..0adb560
--- /dev/null
+++ b/src/containers/param/ParamUploadViewer.js
@@ -0,0 +1,36 @@
+import { connect } from 'react-redux';
+import {changeParam} from "../../actions";
+import ParamUpload from "../../components/param/ParamUpload";
+import {toBase64} from "../../utils/util";
+
+const fileTypes =[
+ 'image/jpeg',
+ 'image/pjpeg',
+ 'image/png'
+]
+
+function validFileType(file) {
+ return fileTypes.includes(file.type);
+}
+
+const mapStateToProps = (state, ownProps) => ({
+ rendererIndex: ownProps.rendererIndex,
+ paramIndex: ownProps.paramIndex,
+ value: state.paramValue[ownProps.rendererIndex][ownProps.paramIndex],
+ info: state.paramInfo[ownProps.rendererIndex][ownProps.paramIndex],
+})
+
+const mapDispatchToProps = (dispatch, ownProps) => ({
+ onChange: (e) => {
+ if (e.target.files.length > 0) {
+ const file = e.target.files[0];
+ if (validFileType(file)) {
+ toBase64(file, 500, 500).then(res => {
+ dispatch(changeParam(ownProps.rendererIndex, ownProps.paramIndex, res))
+ })
+ }
+ }
+ }
+})
+
+export default connect(mapStateToProps, mapDispatchToProps)(ParamUpload);
diff --git a/src/utils/util.js b/src/utils/util.js
index ab717bc..d4c1873 100644
--- a/src/utils/util.js
+++ b/src/utils/util.js
@@ -41,3 +41,23 @@ export function getParamDetailedValue(item, paramValue) {
if (item.type == ParamTypes.SELECTOR) return item.choices[paramValue];
return paramValue;
}
+
+export async function toBase64(file, width, height) {
+ let canvas = document.createElement('canvas');
+ let ctx = canvas.getContext('2d');
+ let img = document.createElement('img');
+
+ canvas.setAttribute('width', width);
+ canvas.setAttribute('height', height);
+ img.setAttribute('src', URL.createObjectURL(file));
+
+ return new Promise(resolve => {
+ img.onload = () => {
+ ctx.fillStyle = 'white'
+ ctx.fillRect(0, 0, width, height)
+ ctx.drawImage(img, 0, 0, width, height);
+
+ resolve(canvas.toDataURL(file.type, 0.8));
+ };
+ })
+}