mirror of
https://github.com/wassname/ETSformer.git
synced 2026-06-27 16:43:49 +08:00
1194 lines
63 KiB
Plaintext
1194 lines
63 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "d1559174",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:06:55.731972Z",
|
||
"start_time": "2022-11-28T08:06:55.730182Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os\n",
|
||
"os.sys.path.append('..')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "61b1369e",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:06:55.760248Z",
|
||
"start_time": "2022-11-28T08:06:55.733246Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import warnings\n",
|
||
"warnings.simplefilter(\"ignore\")\n",
|
||
"\n",
|
||
"# autoreload import your package\n",
|
||
"%load_ext autoreload\n",
|
||
"%autoreload 2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "94cb38fd",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:06:55.780884Z",
|
||
"start_time": "2022-11-28T08:06:55.762049Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from loguru import logger\n",
|
||
"logger.remove()\n",
|
||
"logger.add(os.sys.stdout, level=\"ERROR\", colorize=True, format=\"<level>{time} | {message}</level>\")\n",
|
||
"# import_dir(ta_dir, verbose=False)\n",
|
||
"warnings.simplefilter(\"ignore\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "a58d9d6f",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:06:56.489497Z",
|
||
"start_time": "2022-11-28T08:06:55.781984Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import torch\n",
|
||
"import pandas as pd\n",
|
||
"from matplotlib import pyplot as plt\n",
|
||
"%matplotlib inline"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "77f600e7",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Args"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "b46f211d",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:06:56.762126Z",
|
||
"start_time": "2022-11-28T08:06:56.490469Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from run import set_seed, get_args, Exp_Main"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "dcc0f57b",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:29.460882Z",
|
||
"start_time": "2022-11-28T08:06:56.763160Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Args in experiment:\n",
|
||
"Namespace(K=0, activation='sigmoid', batch_size=32, c_out=1, checkpoints='./checkpoints/', d_ff=2048, d_layers=3, d_model=512, damping_learning_rate=0, data='custom', data_path='OXY_2019.csv.gz', dec_in=7, des=\"'Exp'\", devices='0,1,2,3', dropout=0.2, e_layers=3, embed='timeF', enc_in=12, features='M2S', freq='h', gpu=0, itr=1, label_len=0, learning_rate=0.0003, lradj='exponential_with_warmup', min_lr=1e-30, model='ETSformer', model_id='Exchange', n_heads=8, num_workers=0, optim='adam', output_attention=False, patience=5, pred_len=48, root_path='../dataset/stocks/', seq_len=256, smoothing_learning_rate=0, std=0.2, target='RSMKs_18_144_72_2ref_2ref', train_epochs=15, use_gpu=True, use_multi_gpu=False, warmup_epochs=3)\n",
|
||
"Use GPU: cuda:0\n",
|
||
">>>>>>>start training : Exchange_ETSformer_custom_ftM2S_sl256_pl48_dm512_nh8_el3_dl3_df2048_K0_lr0.0003_'Exp'_0>>>>>>>>>>>>>>>>>>>>>>>>>>\n",
|
||
"train 37075\n",
|
||
"val 5294\n",
|
||
"test 10632\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "85f7ec0327cb49e1a18c800612f4382d",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
" 0%| | 0/15 [00:00<?, ?epoch/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 1, Steps: 1158 | Train Loss: 0.3039489 Vali Loss: 0.0921374 Test Loss: 0.1340459\n",
|
||
"Validation loss decreased (inf --> 0.092137). Saving model ...\n",
|
||
"Updating learning rate to 7.5e-05\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 2, Steps: 1158 | Train Loss: 0.2563745 Vali Loss: 0.0417388 Test Loss: 0.0712016\n",
|
||
"Validation loss decreased (0.092137 --> 0.041739). Saving model ...\n",
|
||
"Updating learning rate to 0.00015\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 3, Steps: 1158 | Train Loss: 0.2333940 Vali Loss: 0.0330352 Test Loss: 0.0573823\n",
|
||
"Validation loss decreased (0.041739 --> 0.033035). Saving model ...\n",
|
||
"Updating learning rate to 0.000225\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 4, Steps: 1158 | Train Loss: 0.2121243 Vali Loss: 0.0315717 Test Loss: 0.0495963\n",
|
||
"Validation loss decreased (0.033035 --> 0.031572). Saving model ...\n",
|
||
"Updating learning rate to 0.0003\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 5, Steps: 1158 | Train Loss: 0.2010674 Vali Loss: 0.0252529 Test Loss: 0.0422979\n",
|
||
"Validation loss decreased (0.031572 --> 0.025253). Saving model ...\n",
|
||
"Updating learning rate to 0.00015\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 6, Steps: 1158 | Train Loss: 0.1899752 Vali Loss: 0.0233886 Test Loss: 0.0374318\n",
|
||
"Validation loss decreased (0.025253 --> 0.023389). Saving model ...\n",
|
||
"Updating learning rate to 7.5e-05\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 7, Steps: 1158 | Train Loss: 0.1816380 Vali Loss: 0.0244228 Test Loss: 0.0401366\n",
|
||
"EarlyStopping counter: 1 out of 5\n",
|
||
"Updating learning rate to 3.75e-05\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 8, Steps: 1158 | Train Loss: 0.1756075 Vali Loss: 0.0271009 Test Loss: 0.0438157\n",
|
||
"EarlyStopping counter: 2 out of 5\n",
|
||
"Updating learning rate to 1.875e-05\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 9, Steps: 1158 | Train Loss: 0.1704306 Vali Loss: 0.0237322 Test Loss: 0.0405497\n",
|
||
"EarlyStopping counter: 3 out of 5\n",
|
||
"Updating learning rate to 9.375e-06\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 10, Steps: 1158 | Train Loss: 0.1624045 Vali Loss: 0.0244505 Test Loss: 0.0417811\n",
|
||
"EarlyStopping counter: 4 out of 5\n",
|
||
"Updating learning rate to 4.6875e-06\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"train: 0%| | 0/1158 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch: 11, Steps: 1158 | Train Loss: 0.1756617 Vali Loss: 0.0242605 Test Loss: 0.0415354\n",
|
||
"EarlyStopping counter: 5 out of 5\n",
|
||
"Early stopping\n",
|
||
">>>>>>>testing : Exchange_ETSformer_custom_ftM2S_sl256_pl48_dm512_nh8_el3_dl3_df2048_K0_lr0.0003_'Exp'_0<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
|
||
"val 5294\n",
|
||
"loading model\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
" 0%| | 0/165 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"test shape: (165, 32, 48, 1) (165, 32, 48, 1)\n",
|
||
"test shape: (5280, 48, 1) (5280, 48, 1)\n",
|
||
"mse:0.023374028503894806, mae:0.11202067881822586\n",
|
||
"test 10632\n",
|
||
"loading model\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
" 0%| | 0/332 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"test shape: (332, 32, 48, 1) (332, 32, 48, 1)\n",
|
||
"test shape: (10624, 48, 1) (10624, 48, 1)\n",
|
||
"mse:0.037431780248880386, mae:0.13626551628112793\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# mimic cli args to avoid code duplication\n",
|
||
"argv = \"\"\"python -u run.py \\\n",
|
||
" --root_path ../dataset/stocks/ \\\n",
|
||
" --data_path OXY_2019.csv.gz \\\n",
|
||
" --checkpoints ./checkpoints/ \\\n",
|
||
" --model_id Exchange \\\n",
|
||
" --model ETSformer \\\n",
|
||
" --data custom \\\n",
|
||
" --features M2S \\\n",
|
||
" --seq_len 256 \\\n",
|
||
" --pred_len 48 \\\n",
|
||
" --e_layers 3 \\\n",
|
||
" --d_layers 3 \\\n",
|
||
" --enc_in 12 \\\n",
|
||
" --c_out 1 \\\n",
|
||
" --num_workers 0 \\\n",
|
||
" --des 'Exp' \\\n",
|
||
" --K 0 \\\n",
|
||
" --learning_rate 3e-4 \\\n",
|
||
" --target RSMKs_18_144_72_2ref_2ref \\\n",
|
||
" --itr 1\n",
|
||
"\"\"\"\n",
|
||
"argv = argv.replace(\"\\\\n\", \"\").split()[3:]\n",
|
||
"args = get_args(argv)\n",
|
||
"args\n",
|
||
"\n",
|
||
"\n",
|
||
"Exp = Exp_Main\n",
|
||
"ii=0\n",
|
||
"set_seed(ii)\n",
|
||
"# setting record of experiments\n",
|
||
"setting = '{}_{}_{}_ft{}_sl{}_pl{}_dm{}_nh{}_el{}_dl{}_df{}_K{}_lr{}_{}_{}'.format(\n",
|
||
" args.model_id,\n",
|
||
" args.model,\n",
|
||
" args.data,\n",
|
||
" args.features,\n",
|
||
" args.seq_len,\n",
|
||
" args.pred_len,\n",
|
||
" args.d_model,\n",
|
||
" args.n_heads,\n",
|
||
" args.e_layers,\n",
|
||
" args.d_layers,\n",
|
||
" args.d_ff,\n",
|
||
" args.K,\n",
|
||
" args.learning_rate,\n",
|
||
" args.des, ii)\n",
|
||
"\n",
|
||
"# if os.path.exists(os.path.join(args.checkpoints, setting)):\n",
|
||
"# print('skipping exists')\n",
|
||
"# continue\n",
|
||
"\n",
|
||
"exp = Exp(args) # set experiments\n",
|
||
"print('>>>>>>>start training : {}>>>>>>>>>>>>>>>>>>>>>>>>>>'.format(setting))\n",
|
||
"exp.train(setting)\n",
|
||
"\n",
|
||
"print('>>>>>>>testing : {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'.format(setting))\n",
|
||
"exp.test(setting, data='val')\n",
|
||
"exp.test(setting, data='test')\n",
|
||
"\n",
|
||
"torch.cuda.empty_cache()\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f4537246",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T05:28:20.356399Z",
|
||
"start_time": "2022-11-28T05:28:20.339961Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"# Plot"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "0b01f395",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:29.476894Z",
|
||
"start_time": "2022-11-28T08:48:29.462100Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"\"Exchange_ETSformer_custom_ftM2S_sl256_pl48_dm512_nh8_el3_dl3_df2048_K0_lr0.0003_'Exp'_0\""
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"setting"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"id": "76ee8bff",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:29.627830Z",
|
||
"start_time": "2022-11-28T08:48:29.477662Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"test 10632\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"ds, dl = exp._get_data('test')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"id": "d2c5d0d4",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.513692Z",
|
||
"start_time": "2022-11-28T08:48:29.629849Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"test 10632\n",
|
||
"loading model\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
" 0%| | 0/332 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"test shape: (332, 32, 48, 1) (332, 32, 48, 1)\n",
|
||
"test shape: (10624, 48, 1) (10624, 48, 1)\n",
|
||
"mse:0.037431780248880386, mae:0.13626551628112793\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"preds, trues = exp.test(setting, data='test')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "d2bbb184",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.526965Z",
|
||
"start_time": "2022-11-28T08:48:53.514947Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"%matplotlib inline"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"id": "dc7db6a7",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.647415Z",
|
||
"start_time": "2022-11-28T08:48:53.528023Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<matplotlib.legend.Legend at 0x7fcbf8343be0>"
|
||
]
|
||
},
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGdCAYAAADaPpOnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUBUlEQVR4nO3dd3hUZf7+8fdMeg+BFAIJIbQA0mtAygoKoi6WtSCuoAhYUFHUxd8uuqu7i19X14K9gopdUSzgojRBSOid0AIBQggQ0nvm/P4YiEZaApmcKffruuYymTln5jOPk+TmOU+xGIZhICIiIuIirGYXICIiIlIXCi8iIiLiUhReRERExKUovIiIiIhLUXgRERERl6LwIiIiIi5F4UVERERcisKLiIiIuBRvswuobzabjczMTEJCQrBYLGaXIyIiIrVgGAYFBQXExsZitZ69b8XtwktmZiZxcXFmlyEiIiLnYf/+/TRv3vysx7hdeAkJCQHsbz40NNTkakRERKQ28vPziYuLq/47fjZuF15OXioKDQ1VeBEREXExtRnyoQG7IiIi4lIUXkRERMSlKLyIiIiIS1F4EREREZei8CIiIiIuReFFREREXIrCi4iIiLgUhRcRERFxKQovIiIi4lIUXkRERMSlKLyIiIiIS1F4EREREZfidhszioiIuKLKSsjIgD17YP9+OHIECgrgvvsgMtJ+zLx5sHQpNGkCF10E3brZH6vFXoYYBths9mOtLt51ofAiIiJiouefh9dfh927oaLi1MdvueXX8LJ8OTz1VM3HIyKgZUto0QKeecb+NcD8+fDFF/bn3bMHDh2C8nJ7eGnWDObOtYcfV6TwIiIi0gCOH4dXXoEPP4QffoDmze33FxXB9u32r/38IDER4uMhOhpCQyE8/NfnGDDA3hOTlQXr1sGuXZCTY7+tWWMPQictWABvvXVqHYYBBw5AQsKv9z3/PKxYAWPGwLBh4OVVv++9vim8iIiIOJDNBi+/DI8/bg8wAEuWwOjR9q9vvBF694a2bSEu7uyXdIYNs99OKimBnTth717Ytw+aNv31sX797OGnZUto3dre2xISAmVlkJkJjRr9eux779nD0KefQqtWMG2avcfHWUOMxTAMw+wi6lN+fj5hYWHk5eURGhpqdjkiIuLBDhywh5SlS+3fd+wIDz0E11wDYWHm1vZbq1bB7Nnw/vv2XhyA7t3toatv34apoS5/v118yI6IiIhzWrzYHgCWLoXgYPslow0bYOxY5wouAL162S8dZWTA//2fvb61ayE5GZ5+2uzqTqXwIiIi4gAvv2yfMdS1qz203HWX816GOSkoCB55BNLS7ONfrFYYPNjsqk6l8CIiIuIAb78Njz4Kv/xiH4TrSqKjYeZM2LHDPh7npHfesQcxsym8iIiI1IP9++GJJ+yzecA+WPbf/4aAAHPruhCtWv369c6d9t6jnj3tX5tJs41EREQu0MqVMHIkZGfbpzbfd5/ZFdW/4GC46irw8YE2bcytReFFRETkAsyZAzffDKWl0KWLPcS4o6ZN4fPP7QvdmU2XjURERM7Tm2/Cn/5kDy5XXAHLltlXunVnvr5mV6DwIiIicl6eew4mTLAvQnfHHfDVV/ZLK+J4Ci8iIiJ1tH27fbE5gL/8Bd54A7w1EKPBqKlFRETqKCnJPpU4Pd2+lH5tdnWW+qPwIiIiUkvl5b+O+fjzn82txZPpspGIiEgtfPihfbn/gwfNrkQUXkRERM7hhx/sy+Vv2WJfOVfMpfAiIiJyFqtWwXXXQWUljBoFf/ub2RWJwouIiMgZpKXB5ZdDURFceql9kK5VfzlNp/8FIiIip3H4MAwfDseO2ffz+eIL51igTRReRERETuuuu2DvXvvmhN9/DyEhZlckJzk0vOTk5DB69GhCQ0MJDw9n3LhxFBYWnvX4e++9l3bt2hEQEEB8fDz33XcfeXl5jixTRESkms1mkFNUzowZMHQozJsHkZFmVyW/5dDwMnr0aLZs2cKCBQv49ttvWbp0KRMmTDjj8ZmZmWRmZvLMM8+wefNmZs6cyfz58xk3bpwjyxQREak2a8VeLv3vErbnH2bBAvN3UJZTWQzDMBzxxNu2baNDhw6sWrWKnj17AjB//nxGjBjBgQMHiI2NrdXzfPbZZ9xyyy0UFRXhXYu1l/Pz8wkLCyMvL4/Q0NALeg8iIuJZdhwu4KoZyyirtPHGxYVc9oehENTY7LI8Ql3+fjus52XFihWEh4dXBxeAoUOHYrVaSUlJqfXznHwTZwouZWVl5Ofn17iJiIjUVXmljckfr6es0sa4Ftlcuv4+ePtSyEk3uzT5HYeFl6ysLKKiomrc5+3tTUREBFlZWbV6jqNHj/Lkk0+e9VLT9OnTCQsLq77FxcVdUN0iIuKZ3lq2h62H8mkU6MPdl/fAEhQFObvtAebYbrPLk9+oc3iZOnUqFovlrLft27dfcGH5+flcccUVdOjQgb///e9nPO7RRx8lLy+v+rZ///4Lfm0REfEs+3OKefGnnQBMu7IDjRM6wx0LIKYTFB2B76aAY0ZZyHmo88aMU6ZMYezYsWc9JjExkZiYGLKzs2vcX1lZSU5ODjExMWc9v6CggOHDhxMSEsKcOXPw8fE547F+fn74+fnVun4REZHfMgyDx+duobTCRt/ECK7p1sz+QEgM3PAevNwX9iyC7d9C+6vMLVaA8wgvkZGRRNZizlhycjK5ubmsWbOGHj16ALBw4UJsNht9+vQ543n5+fkMGzYMPz8/5s6di7+/f11LFBERqbUfthxm4fZsfLws/PPqi7BYLL8+GJEI/e+Dpf+B7x+B+H4awOsEHDbmpX379gwfPpzx48eTmprK8uXLmTRpEjfddFP1TKODBw+SlJREamoqYA8ul112GUVFRbz99tvk5+eTlZVFVlYWVVVVjipVREQ8VHF5Jf/4ZgsAEwe2onXUaVaiu/hBaNwGCjLh67t1+cgJOHSdl9mzZ5OUlMSQIUMYMWIEF198MW+88Ub14xUVFaSlpVFcXAzA2rVrSUlJYdOmTbRu3ZqmTZtW3zSWRURE6ttbP6dzKK+U5o0CmHRJ69Mf5BsI178LXn6wYz7MewRstoYtVGpw2DovZtE6LyIiUhtHCsoY/J9FFJVX8eKobvyxyznWH1v/IXx1N2DARX+CK56FgPCGKNUjOMU6LyIiIs7sxZ92UlReRZfmYVzZqem5T+h6M1z9ClissPlzeKUvrHwNSrW+WEOr84BdERERV7f7SCEfpmYAMPXy9litlnOccULXm+2DeL+6274GzPy/wIJp0KI/xPWBqPYQ0RKCYyAwArzOPFtWzp/Ci4iIeJyn52+nymYwJCmK5FZ1nD0U3xfuWm6/jJTyGhzdYZ9KvWfRqcf6BJ64BYCXrz3MWL3tvTdWL8Bi/9pisX8Np/m6Nmp7XD0Jaw7Xvdmwr/kbCi8iIuJR1u/P5Ycth7FaYOrlSef3JD4B0Gsc9Lz9RHhZApnr4NhOyM2wL2xn2KCi2H5zN43N3a1S4UVERDzKCz/uAOCabs1pE32aqdF1YbFAZDv77bdsVVCaZ79VFENlKVSWga3yxK3KHm4Mw/5fjBNTsH8zh+aU+TRONL/GN8jUl1d4ERERj7F+fy6L0o7gZbVw75mmRtcHq5d9zEtghONew4NptpGIiHiM56t7XZqR0MTc3gM5fwovIiLiEdZlHGdxQ/S6iMMpvIiIiEd44cSu0dd2a0aLxup1cWUa8yIi4uRKK6rYkpnH/pwSOjcPIzEy2OySXM6mA3m/6XUxd6aMXDiFFxERJ1VlM/gwNYPnF+zgWFF59f3d4sOZdmUHusc3MrE61/L60t0A/LFLLPGNA02uRi6ULhuJiDih0ooq7pm9lmlfbeZYUTlNgn3pGheOt9XCuoxcrn3lF56aZ19oTc5u37Eivt90CICJgxJNrkbqg3peREScTGWVjfHvrebnnUfx9bLy6IgkbunbAh8vK9kFpTw9P43P1xzgtSW72ZVdwMuju+Pn7WV22U7rrZ/TsRkwuF0kSTHasNcdqOdFRMTJPLtgBz/vPEqgrxczb+/Fbf1b4uNl/3UdFeLPM9d34YWbuuLnbeXHbdk88vlGbOqBOa1jhWV8uno/ABMHtjK5GqkvCi8iIk5k0fZsXl1sH5/x9J86069Vk9MeN7JrM94a0xNvq4Wv12fy4sKdDVmmy5i1Yh9llTa6NA+jb6IWjHMXCi8iIk7iWGEZD3++EYCx/RK4snPsWY8f0CaS6dd2AuDFn3ayam+Ow2t0JcXllby3Yi8AEwe1wlLrTQ7F2Sm8iIg4AcMwmPrlJo4WltE2OrjWGwZe3zOO67o3x2bA5I/XU1hW6eBKXccnq/aTW1xBi8aBDOsYY3Y5Uo8UXkREnMBnqw+wYOthfLwsPH9jN/x9aj8A9x8jOxIfEcjB3BKeX7DDgVW6jooqG2/9nA7A+AGJeFnV6+JOFF5EREyWcayYf3yzBYApl7WjQ2zdZsQE+3nzxMiOALz7y162Hcqv9xpdzXcbD3Ewt4Qmwb78qUdzs8uReqbwIiJioiqbwUOfbaCovIreLSMYP+D81iEZ3C6KEZ1iqLIZ/HXOJo+efWQYBq8tsQ96HpOcUKdeLHENCi8iIiZ6Z1k6qXtzCPL14tnru1zQ5Y3HruxIkK8XazNyq6cHe6LFO46wPauAQF8v/pzcwuxyxAEUXkRETLLzcAH/+V8aAH+7sgNxERe2bH1MmD8PXNoWgKfmbyevuOKCa3RFr52Yaj6qdzzhgb4mVyOOoPAiImKCiiobD366gfJKG4PbRXJTr7h6ed6x/RJoGx1MbnEFryzeVS/P6UrWZRwnJT0Hb6uFcRe3NLsccRCFFxERE7yyaDebDuYRFuDD/13Xud7WIPH2slZPs373l70czC2pl+d1FSfHuozs2ozY8ACTqxFHUXgREWlgmw7kMePEirhPjOxIdKh/vT7/H9pF0TcxgvJKG8+euCzlCXYfKeR/Ww8DcKc2YHRrCi8iIg2otKKKKZ+tp9JmMKJTDH/scvZVdM+HxWLh0cvbAzBn3UG2ZnrG1Ok3luzBMGBo+yjaRIeYXY44kMKLiEgDem7BDnYcLqRJsC//vLqTw5as7xIXzpWdm2IYMH3eNoe8hjM5nF/KnHUHAbhzkDZgdHcKLyIiDWRtxnHe+HkPANOv7UxEkGNnwjw8rB0+XhZ+3nmUX3Yfdehrme2dZemUV9no2aIRPRO0AaO7U3gREWkAlVU2/jpnM4YB13ZrxqUdoh3+mi0aB3FTr3gAnvkhDcNwz4Xr8koqmJ2SAajXxVMovIiINID3Vuxj26F8wgJ8+OsV7Rvsde+9pDX+PlbWZuSyKC27wV63Ic1O2UdhWSVtooK5JCnK7HKkASi8iIg42OH8Uv57YsPEvwxPonGwX4O9dlSoP2OSEwD4zw873G7bgNKKKt5ZtheAiYNaYdUGjB5B4UVExMH++d02Cssq6RIXXm+L0dXFnYNaEeznzbZD+Xy36VCDv74jfbn2IEcLy2ga5u+QmVvinBReREQcaMXuY3yzIROrBf519UWm9Aw0CvKt3vDxuQU7qKyyNXgNjlBlM3hjqX1RunEXt8TXW3/SPIX+T4uIOIhhGDw1fzsAN/eJ56JmYabVMm5ASyKCfNlztIgv1x40rY769MOWLPYeKyYswIdRvePNLkcakMKLiIiDzN+cxYb9uQT6enH/kLam1hLs583dg+0zcZ7/cQdllVWm1nOhDMOo3grg1uQWBPl5m1yRNCSFFxERB6issvGfH+xL898xIJHIkIYbpHsmt/RtQXSoH5l5pXx4Ymqxq1q84wgbD+Th72NlTL8Es8uRBqbwIiLiAJ+uPsCeo0U0DvJl/ADn2N3Y38eL+4a0AeDlRbsoLq80uaLzYxgGz52YvXVrcgJNGnD2ljgHhRcRkXpWUl7F8z/a/7hOuqQ1If4+Jlf0qxt6xhEfEcjRwnLeXb7X7HLOy0/bstl4II9AXy8mDtQGjJ5I4UVEpJ7NTtlHdkEZzRsFcHMf5xpI6uNl5cFL7eNvXl+ym9zicpMrqhvDMHjux197XRpyzRxxHgovIiL1qKyyijdP7F806Q+t8fP2MrmiU13VJZakmBDySyt5dfFus8upk/9tPcyWzHyCfL2YoF4Xj6XwIiJSj75Yc5DD+fZF067t3tzsck7Ly2rhL8OTAHj3l71k5paYXFHtVNl+HetyW/+WDt/YUpyXwouISD2prLJVT98dPyDRqRdNG9wukj4tIyivtFVvXeDsPlu9n+1ZBYT4e3OHkwyCFnM470+WiIiL+WZjJhk5xUQE+Tr9omkWi4VHR9g3iPxi7QG2Z+WbXNHZFZRW8Mz/7FPPJw9tS3igel08mcKLiEg9sNkMXln061L1Ab7ON9bl97rGhTOiUwyGAf+Zn2Z2OWf17P92cLSwnMTIIG5NbmF2OWIyhRcRkXrw0/ZsdmYXEuLvzZ9d6I/rQ5e1w8tq4aft2aTsOWZ2Oae1Zt9xZq3YC8A//tgRHy/96fJ0+gSIiNSDt07MMLq5TzyhTrSuy7kkRgZX73Q9fd52DMMwuaKaSiuq+MsXGzEMuK57cwa0iTS7JHECCi8iIhdo88E8UtJz8LZaGOuCS9XfP7QNAT5erN+fyw9bsswup4Z/fbeNXdmFRIb48bcr2ptdjjgJhRcRkQv0zrJ0AEZ0akrTsACTq6m7qBD/6i0Mnp6fRmWVzeSK7OZtOsT7K/cB8Oz1XWikqdFygsKLiMgFyM4v5ZuNmYB9oK6rGj8wkYggX/YcLeKT1fvNLoetmfk8+OkGAMYPaMnAtrpcJL9SeBERuQDvrdhHRZVBzxaN6BIXbnY55y3E34d7L2kNwHMLdpBXXGFaLfuOFXH7zFWUVFQxoE2T6gX1RE5SeBEROU+lFVXMTrFf1nCHRdNG92lBq8ggjhaW89T87abUsPNwAaPeWElWfimto4J5aVR3vDW7SH5HnwgRkfP0zYZMjhdX0LxRAJd2iDG7nAvm623l39d0AuCj1AxW7G64qdM2m8Gnq/bzx5eWk5lXSqvIID4c34ewQNeZuSUNR+FFROQ8fZiaAdinR3tZLSZXUz/6JDZmVG/71OnJn6zjWGGZQ1/PMAyW7jjCn177hUe+2EhJRRX9WjXmk4nJRIX4O/S1xXV5m12AiIgr2nYon3UZuXhbLVzfI87scurV367oQGp6DruPFDH5k/W8O7ZXvV+6ySuu4Iu1B/goNYOd2YUABPh4ce+Q1kwc2MptwqA4hsKLiMh5+OhEr8tlHaOJDPEzuZr6FeTnzcuju3P1y8v5eedRHp+7hX9efREWy/kFirziCnZmF7Azu5CdhwvZmV1AanoOZZX2KdmBvl7c2CuOiQNbEROm3hY5N4UXEZE6KimvYs7agwDc3Nt1tgKoi6SYUF68qRsTP1jD7JQMmgT78cClbc95ns1msCbjOD9szmJbVj47DhdypOD0l56SYkIY3Seekd2audSqxGI+hRcRkTr6dmMmBWWVxEcE0q9VY7PLcZjLOsbw96s68vjcLbzw0068rBbuvaT1KT0whmGwNiOX7zYe4vtNh8jKLz3luWLD/GkdHUKbqGDaRAVzUbMwOsaGnndvjng2hRcRkTo6OVD3pt5xWN18bMaYfgkUlVfy9Pw0/rtgBzuzCxnbL4GwAG8ycopZvusY8zdncTC3pPqcED9vLu0YTd/ExrSNDqFVZBAh6lmReuTQ8JKTk8O9997LN998g9Vq5brrruOFF14gODj4nOcahsGIESOYP38+c+bM4eqrr3ZkqSIiteLOA3XP5O7BrQny9eaJb7fyzYZMvtmQecoxQb5eDO0QzZWdYxnQpgn+Pl4mVCqewqHhZfTo0Rw6dIgFCxZQUVHBbbfdxoQJE/jwww/Pee7zzz+v7kQRcTruPFD3bMb0S6BDbChv/byH1XuPU1FlIzLEj14JEQxuF8ngdlEKLNJgHBZetm3bxvz581m1ahU9e/YEYMaMGYwYMYJnnnmG2NjYM567fv16nn32WVavXk3Tpk0dVaKISJ14wkDds+mVEEGvhAizyxBx3CJ1K1asIDw8vDq4AAwdOhSr1UpKSsoZzysuLubmm2/m5ZdfJibm3CtWlpWVkZ+fX+MmIuII33jIQF0RZ+ew8JKVlUVUVFSN+7y9vYmIiCArK+uM5z3wwAP069ePkSNH1up1pk+fTlhYWPUtLs4zrkGLSMM7ecloVO94tx+oK+LM6hxepk6disViOett+/bz29Br7ty5LFy4kOeff77W5zz66KPk5eVV3/bvN38rdxFxP78dqPunHs3NLkfEo9V5zMuUKVMYO3bsWY9JTEwkJiaG7OzsGvdXVlaSk5NzxstBCxcuZPfu3YSHh9e4/7rrrmPAgAEsXrz4lHP8/Pzw8/OcQXMiYg5PHagr4ozqHF4iIyOJjIw853HJycnk5uayZs0aevToAdjDic1mo0+fPqc9Z+rUqdxxxx017uvUqRPPPfccV111VV1LFRGpF8XllR49UFfE2ThstlH79u0ZPnw448eP57XXXqOiooJJkyZx0003Vc80OnjwIEOGDOG9996jd+/exMTEnLZXJj4+npYtWzqqVBGRs/p24yEN1BVxIg4bsAswe/ZskpKSGDJkCCNGjODiiy/mjTfeqH68oqKCtLQ0iouLHVmGiMgF0UBdEefi0EXqIiIizrogXUJCAoZhnPU5zvW4iIgjaaCuiPNxaM+LiIirO9nrMqxjjAbqijgJhRcRkTP47UDdUb3jTa5GRE5SeBEROQMN1BVxTgovIiJn8GGKBuqKOCOFFxGR09iamc/6/RqoK+KMFF5ERE5DA3VFnJfCi4jI7xSXV/LVOg3UFXFWCi8iIr/z7Qb7QN0WjTVQV8QZKbyIiPyGYRi8t3IvADf10kBdEWek8CIi8hur9x1n88F8/Lyt3NgrzuxyROQ0FF5ERH7jnWXpAFzTrRkRQb4mVyMip6PwIiJywoHjxfywJQuA2/prJ3sRZ6XwIiJywvsr9mEzoH/rxrSLCTG7HBE5A4UXERHs06NPru1yWz/1uog4M4UXERHgi7UHyS+1T4++JCnK7HJE5CwUXkTE41XZDN7+eQ8AY/slaHq0iJNTeBERj/e/LVnsPVZMWIAPN/TU9GgRZ6fwIiIezTAMXluyG4Bbk1sQ5OdtckUici4KLyLi0VLSc9hwIA9fbytj+iWYXY6I1ILCi4h4tNdP9Lpc36M5TYK1e7SIK1B4ERGPlZZVwKK0I1gsMH5AotnliEgtKbyIiMc62ety+UUxJDQJMrkaEakthRcR8Uj7jhXx9YZMAO4a1NrkakSkLhReRMQjvbZkN1U2g8HtIunUPMzsckSkDhReRMTjZOaW8PmaAwDce4l6XURcjcKLiHicN5buoaLKIDmxMT1aRJhdjojUkcKLiHiU7ILS6g0Y1esi4poUXkTEo7z9czpllTa6x4eT3Kqx2eWIyHlQeBERj3G8qJz3V+4D4N5L2mCxaANGEVek8CIiHuPd5ekUl1fRMTaUwe0izS5HRM6TwouIeIT80gre/WUvYB/rol4XEdel8CIiHuH9FfsoKK2kTVQwl3WIMbscEbkACi8i4vaKyip56+c9AEy6pDVWq3pdRFyZwouIuL3ZKfs4XlxBQuNArujU1OxyROQCKbyIiFsrKqvk9SX2Xpe7B7fG20u/9kRcnX6KRcStzVqxl2NF5bRoHMg13ZuZXY6I1AOFFxFxWwWlFbyx1N7rcv+QNvio10XELegnWUTc1rvL95JbXEFiZBAju6rXRcRdKLyIiFvKK6ngzRMzjCYPbYuXZhiJuA2FFxFxS2//vIeC0kraRgdzpWYYibgVhRcRcTvHi8p5Z/leAB4Y2lbruoi4GYUXEXE7b/68h8KySto3DWVYR62mK+JuFF5ExK0cKyxj5ok9jB68VL0uIu5I4UVE3MrrS/dQXF5F5+ZhDG0fZXY5IuIACi8i4jayC0p5b8VeAB64tK12jhZxUwovIuI2Xl28m9IKG93iwxncNtLsckTEQRReRMQtHMorYXZKBgBTLm2nXhcRN6bwIiJu4ZVFuymvtNE7IYL+rRubXY6IOJDCi4i4vMzcEj5eZe91efAyjXURcXcKLyLi8l5fspuKKoO+iRH0TVSvi4i7U3gREZeWnV/KR6v2A3DfJW1MrkZEGoLCi4i4tNeX7qG80kaPFo1IbqVeFxFPoPAiIi7raGEZs1P2AXDfkDYa6yLiIRReRMRlvfVzOqUVNro0D2NgmyZmlyMiDUThRURc0vGi8urVdO+9RL0uIp5E4UVEXNI7y9MpLq+iQ9NQhmgPIxGPovAiIi4nr6SCmcv3AnDfkNbqdRHxMA4LLzk5OYwePZrQ0FDCw8MZN24chYWF5zxvxYoVXHLJJQQFBREaGsrAgQMpKSlxVJki4oJm/bKXgrJK2kWHcFmHGLPLEZEG5rDwMnr0aLZs2cKCBQv49ttvWbp0KRMmTDjrOStWrGD48OFcdtllpKamsmrVKiZNmoTVqg4iEbErKK3g7WXpANxzSWusVvW6iHgai2EYRn0/6bZt2+jQoQOrVq2iZ8+eAMyfP58RI0Zw4MABYmNjT3te3759ufTSS3nyySfP+7Xz8/MJCwsjLy+P0NDQ834eEXFOryzexdPz00iMDGLBA4PwUngRcQt1+fvtkC6NFStWEB4eXh1cAIYOHYrVaiUlJeW052RnZ5OSkkJUVBT9+vUjOjqaQYMGsWzZMkeUKCIuqLSiird/tve6TPpDawUXEQ/lkPCSlZVFVFTN0f/e3t5ERESQlZV12nP27NkDwN///nfGjx/P/Pnz6d69O0OGDGHnzp1nfK2ysjLy8/Nr3ETEPX225gDHispp3iiAP3Y5fQ+uiLi/OoWXqVOnYrFYznrbvn37eRVis9kAmDhxIrfddhvdunXjueeeo127drzzzjtnPG/69OmEhYVV3+Li4s7r9UXEuVXZDN762f6PnDsubom3l8bCiXgq77ocPGXKFMaOHXvWYxITE4mJiSE7O7vG/ZWVleTk5BATc/qZAU2bNgWgQ4cONe5v3749GRkZZ3y9Rx99lAcffLD6+/z8fAUYETf0w5Ys9h0rJjzQhxt66WdcxJPVKbxERkYSGRl5zuOSk5PJzc1lzZo19OjRA4CFCxdis9no06fPac9JSEggNjaWtLS0Gvfv2LGDyy+//Iyv5efnh5+fXx3ehYi4GsMweH3JbgBu7duCQN86/eoSETfjkH7X9u3bM3z4cMaPH09qairLly9n0qRJ3HTTTdUzjQ4ePEhSUhKpqakAWCwWHn74YV588UU+//xzdu3axbRp09i+fTvjxo1zRJki4iJS0nPYcCAPP28rt/ZLMLscETGZw/75Mnv2bCZNmsSQIUOwWq1cd911vPjii9WPV1RUkJaWRnFxcfV9kydPprS0lAceeICcnBy6dOnCggULaNWqlaPKFBEXcLLX5fqezWkSrJ5WEU/nkHVezKR1XkTcy75jRQz6z2IsFlg0ZTAJTYLMLklEHMD0dV5EROrLhyn2AfsD20QquIgIoPAiIk6srLKKT1fvB+CWvi1MrkZEnIXCi4g4rfmbszheXEHTMH/+0O7cMx1FxDMovIiI0/pg5T4AbuoVr0XpRKSafhuIiFNKyypg1d7jeFkt3NRbi9KJyK8UXkTEKc1Osfe6XNo+muhQf5OrERFnovAiIk6nqKySL9ceBDRQV0ROpfAiIk7nmw2ZFJZVktA4kH6tGptdjog4GYUXEXEqhmHwwYlLRjf3icdqtZhckYg4G4UXEXEqGw/ksflgPr7eVv7UQwN1ReRUCi8i4lROTo++olNTIoJ8Ta5GRJyRwouIOI284gq+2ZgJwC19402uRkSclcKLiDiNL9cdoLTCRlJMCN3jG5ldjog4KYUXEXEKhmEw+8QmjKP7xGOxaKCuiJyewouIOIWU9Bx2ZRcS6OvF1d2amV2OiDgxhRcRcQonB+qO7NqMEH8fk6sREWem8CIipjtSUMYPW7IA+yUjEZGzUXgREdN9tmY/FVUGXePCuahZmNnliIiTU3gREVNV2Qw+/M1AXRGRc1F4ERFTLd15hAPHSwj19+aqLrFmlyMiLkDhRURMNfvEQN0/9YjD38fL5GpExBUovIiIaQ7mlrBwezYAo7WirojUksKLiJjmk9QMbAYkJzamVWSw2eWIiItQeBERU1RU2fh41X5AvS4iUjcKLyJiih+3Hia7oIwmwX5c1iHG7HJExIUovIiIKT5IsQ/UvbFXc3y99atIRGpPvzFEpMHtOVLI8l3HsFhgVG9dMhKRulF4EZEG91GqfVG6P7SLonmjQJOrERFXo/AiIg2qtKKKz9YcALSiroicH4UXEWlQ3286RG5xBc3CAxjcLsrsckTEBSm8iEiD+uDEirqjesfhZbWYXI2IuCKFFxFpMFsz81mbkYu31cINveLMLkdEXJTCi4g0mA9T7b0uwzrGEBXib3I1IuKqFF5EpEEUllUyZ+1BQAN1ReTCKLyISIP4ev1BisqrSGwSRHKrxmaXIyIuTOFFRBzOMAw+WGlf2+XmPvFYLBqoKyLnT+FFRBxu3f5cth3Kx8/byp96NDe7HBFxcQovIuJws0/0ulzZOZbwQF+TqxERV6fwIiIOlVtczrcbMwEY3VcDdUXkwim8iIhDfb7mAGWVNjo0DaVbXLjZ5YiIG1B4ERGHMQyDD1Psl4xG99VAXRGpHwovIuIwK3YfY8/RIoL9vBnZtZnZ5YiIm/A2uwABm83gwPES9uUUUVFlw2qx4GW1EBbgQ0SQL42D/Ajw9TK7TJE6+yDFvqLu1d1iCfbTrxsRqR/6bWISwzBITc/h8zUHWJSWzdHC8rMe3zTMn46xofRNbMywjjHERQQ2UKUi5yczt4QfthwGYHSfFiZXIyLuROGlgR0rLOOLtQf4eNV+9hwpqr7f19tKi4hA/H28sBkGVTaDvJIKjhWWU15l41BeKYfySvlxWzb//G4byYmNmTgokUFtIzWOQJzSByv3UWUz6JsYQfumoWaXIyJuROHFwQzDYN+xYlLTc/jf1iyW7DhCRZUBQKCvF3/sEssfu8TSMyECX+9ThyAZhkF+SSU7sgtYu+84i9OOsDL9GCv22G99Wkbwr2s60ToquKHfmsgZlVZU8VGqfaDu2H4tTa5GRNyNxTAMw+wi6lN+fj5hYWHk5eURGuq4f+0dKShj08FcDh4vwQAsFgtWC3hZLBwvruBQXgkHj5ew4UAeRwvLapzbJS6cUb3iuLLL+Y0DOJhbwrvL0vkgZR+lFTZ8va08dmUHRmvZdXESn67ezyOfb6RZeABLHh6Mt5fmBojI2dXl77d6XuqgtKKKH7cd5tPVB/h55xFqG/t8vCx0ahbGgDaRjOjUlHYxIRdUR7PwAP52ZQfG9Evgr19tZumOI/ztq82s3Xec6dd1ws9bg3vFPIZhMHP5XgBuTW6h4CIi9U7hpZZS9hxjwvtryCupqL6vbXQwCY2D8PayYLNBlWFgsxmEBfgQE+ZP0zB/2sWE0rl5GP4+9R8o4iICmTm2F+8sT2f6vO18ue4gmXklvD2mF0Ga2SEmWbX3OFsP5ePvY+XGXnFmlyMibkh/4WqpXUwIJeVVNA3z57ruzflTj+YkNAkyuyysVgt3DEikbXQId89ey8o9OYybtYp3x/bW9GoxxTvL0gG4pltz7WMkIg6hMS91sDUzn3YxIXhZnXNcyYb9udzyVgoFZZVc2iGa12/pgdVJaxX3tOdIIUP+uwTDgB8mD7zgS6Qi4jnq8vdbF6ProENsqNMGF7APBH73tl74eltZsPUw/12ww+ySxMO8+fMeDAMuSYpScBERh1F4cTM9EyJ46tpOALy0aBdzN2SaXJF4iuz8Ur5YcxCAOwe1MrkaEXFnCi9u6NruzZk4MBGAhz/bwMYDueYWJB7hneV7Ka+y0T0+nF4JjcwuR0TcmMKLm3pkeBJ/aBdJWaWNie+vOWWtGZH6lF9aweyV9n2M7hzUSusNiYhDKby4KS+rhRdGdSOxSRCH8kq5e/ZaKqpsZpclburDlAwKyippHRXM0PbRZpcjIm5O4cWNhfr78MatPQj28yY1PYd/fbfN7JLEDZVWVPH2ienREwYmaoabiDicwoubax0VwnM3dgVg5i97+XLtAXMLErfz2ZoDHCkoIzbMn6u7NjO7HBHxAA4LLzk5OYwePZrQ0FDCw8MZN24chYWFZz0nKyuLP//5z8TExBAUFET37t354osvHFWix7i0QzT3DWkDwN++2szuI2f//yBSWxVVNl5fshuAiYNanXZzURGR+uaw3zSjR49my5YtLFiwgG+//ZalS5cyYcKEs55z6623kpaWxty5c9m0aRPXXnstN9xwA+vWrXNUmR7j/iFtSE5sTHF5Ffd+uI7SiiqzSxI3MHd9JgeOl9Ak2FdbAYhIg3FIeNm2bRvz58/nrbfeok+fPlx88cXMmDGDjz/+mMzMM6878ssvv3DvvffSu3dvEhMT+dvf/kZ4eDhr1qxxRJkexctq4fmbuhIR5MvWQ/k8NW+72SWJi7PZDF5ZvAuAcRcnOmT/LhGR03FIeFmxYgXh4eH07Nmz+r6hQ4ditVpJSUk543n9+vXjk08+IScnB5vNxscff0xpaSmDBw8+4zllZWXk5+fXuMnpRYf68+z1XQD7+JcFWw+bXJG4sh+2ZLH7SBGh/t7c0jfe7HJExIM4JLxkZWURFRVV4z5vb28iIiLIyso643mffvopFRUVNG7cGD8/PyZOnMicOXNo3br1Gc+ZPn06YWFh1be4OHVdn80fkqIYP6AlAH/5YiPZBaUmVySuyDAMXj7R6zK2XwIh/j4mVyQinqRO4WXq1KlYLJaz3rZvP//LEdOmTSM3N5cff/yR1atX8+CDD3LDDTewadOmM57z6KOPkpeXV33bv3//eb++p3hoWDvaNw0lp6icRz7fiJvtzSkNYMmOI2w+mE+Ajxdj+7c0uxwR8TDedTl4ypQpjB079qzHJCYmEhMTQ3Z2do37KysrycnJISYm5rTn7d69m5deeonNmzfTsWNHALp06cLPP//Myy+/zGuvvXba8/z8/PDz86vL2/B4ft5evHBTV66csYzFaUf4YOU+/pycYHZZ4kJeWWSfYTS6TzwRQb4mVyMinqZO4SUyMpLIyMhzHpecnExubi5r1qyhR48eACxcuBCbzUafPn1Oe05xcTEAVmvNziAvLy9sNq0MW9/aRofw6OVJ/OObrfzzu20kt2pM6yjtAiznlpqeQ+reHHy9rIw/sYeWiEhDcsiYl/bt2zN8+HDGjx9Pamoqy5cvZ9KkSdx0003ExsYCcPDgQZKSkkhNTQUgKSmJ1q1bM3HiRFJTU9m9ezfPPvssCxYs4Oqrr3ZEmR5vTHICA9o0oazSxuRP1lNeqZAo5/byIvtYlz/1bE50qL/J1YiIJ3LYOi+zZ88mKSmJIUOGMGLECC6++GLeeOON6scrKipIS0ur7nHx8fHh+++/JzIykquuuorOnTvz3nvvMWvWLEaMGOGoMj2a1Wrhmeu7EB7ow+aD+Tz34w6zSxInt+lAHkt2HMHLauHOga3MLkdEPJTFcLPRmvn5+YSFhZGXl0doaKjZ5biEeZsOcdfstVgsMOu23gxse+5Lg+KZ7vpgDfM2Z3FNt2bV206IiNSHuvz91lrewuWdmjKqdzyGAZM/Wc+hvBKzSxIntPtIIfO32Jc6uGuwel1ExDwKLwLA41d1oGOsffr0pA/XUVGl8S9S05tL92AYMLR9FG2jNbhbRMyj8CIA+Pt48cro7oT4e7Nm33H+T9sHyG9k5ZXyxYkdydXrIiJmU3iRai0aB/HMie0D3lqWzvzNZ14NWTzLO8vTqagy6J0QQY8WEWaXIyIeTuFFahjWMaZ6+4CHP9vA3qNFJlckZssrrmD2yn2Ael1ExDkovMgpHhmeRM8WjSgoq+SO91ZTUFphdkliog9S9lFUXkVSTAiD22kmmoiYT+FFTuHjZeWV0d2JDvVjV3Yh93+8niqbW82ol1oqrajinWXpANw5qBUWi8XkikREFF7kDKJC/Xnz1p74eVtZuD2bp3/QAF5P9Nnq/RwrKqd5owCu7NzU7HJERACFFzmLzs3DefpPnQF4fckevjwx20Q8Q2WVjdeX7gFgwsBEvL3060JEnIN+G8lZjezajHv+YB+kOfXLTazLOG5yRdJQvtt0iAPHS4gI8uX6HnFmlyMiUk3hRc5pyqXtuLRDNOWVNia8v0Yr8HoAwzB4dfFuAG7rl0CAr5fJFYmI/ErhRc7JarXw3I1daRcdwpGCMia8t4aS8iqzyxIHWrzjCNuzCgjy9eLW5ASzyxERqUHhRWol2M+bt8b0JCLIl00H83jki4242Z6e8hsne11u7hNPWKCPydWIiNSk8CK1FhcRyCuju+NttfDNhkxeXrTL7JLEAdbsO05qeg4+XhbGXZxodjkiIqdQeJE66ZvYmCdGXgTAM//bwQ9btIWAu3ltib3X5ZpuzYgJ8ze5GhGRUym8SJ3d3CeeMcktAHjgk/VsO5RvckVSX3YfKWTB1sNYLDBhoLYCEBHnpPAi52XalR3o37oxxeVV3DFrNccKy8wuSerBzOV7ARiSFE3rqGBzixEROQOFFzkv3l5WXr65Oy0aB3Iwt4SJ72sGkqvLK67g8zX2hQhv759gbjEiImeh8CLnLTzQl7fH9CTE35vV+45zz4drqaiymV2WnKdPVmdQUlFFu+gQkls1NrscEZEzUniRC9I6KoR3xvbC38e+B9JDn23Apk0cXU5llY1Zv+wD4Lb+CdqAUUScmsKLXLBeCRG8OroH3lYLX6/P5LG5m7UGjIv5cdthDuaW0CjQh6u7NTO7HBGRs1J4kXrxh6Qonr2hCxYLfLAyg8fnblEPjAt558RA3VG94/H30VYAIuLcFF6k3ozs2oz/u64zFgu8t2If9360ToN4XcD2rHxS03Pwslr484kp8CIizkzhRerVDT3jePb6Lvh4Wfhu0yGuf/0XbeTo5D5KyQDgsg7RNA0LMLkaEZFzU3iRendt9+Z8MK4PEUG+bD6Yzx9fWs7qvTlmlyWnUVJexZfrDgL2S0YiIq5A4UUcok9iY76+p3/1TtQ3vbGSd5alayCvk/lu0yEKSiuJiwjg4tZNzC5HRKRWFF7EYeIiAvny7n5c2bkplTaDJ77dyqSP1lFYVml2aXLCR6n2S0Y39YrHatX0aBFxDQov4lBBft7MGNWNx6/qgLfVwncbDzHypWXsOFxgdmkeLy2rgDX7juNttXB9z+ZmlyMiUmsKL+JwFouF2/q35JOJfYkO9WP3kSKunLGMt37eo+nUJjrZ6zK0fTRRIdo9WkRch8KLNJgeLSL47r4BDGwbSXmljX9+t42b3lzJ/pxis0vzOKUVVXy51r6P0ag+GqgrIq5F4UUaVJNgP2bd1ot/XXMRgb5epKbnMPz5pXyUmqHBvA1o4fZs8ksraRYewAAN1BURF6PwIg3OYrEwuk8L5t0/gF4JjSgqr+LRLzdx28xVHM4vNbs8j/DVienRf+waq4G6IuJyFF7ENC0aB/HxhGT+OqI9vt5WFqcd4dL/LmHOugPqhXGgvOIKFqcdAWBk11iTqxERqTuFFzGVl9XC+IGJfHfvxXRqFkZ+aSUPfLKBie+v4UhBmdnluaV5mw9RXmUjKSaEpJhQs8sREakzhRdxCm2iQ/jy7n5MubQtPl4W/rf1MJc9t4RvN2aaXZrb+Xq9vU3/qF4XEXFRCi/iNHy8rNw7pA1f33Mx7ZuGcry4gkkfruPBT9ZTUFphdnluISuvlJXpxwD4YxeFFxFxTQov4nQ6xIby9T39ufeS1lgt8OW6g1zx4jLWZhw3uzSXN3fDQQwDeiU0onmjQLPLERE5Lwov4pR8va1Muawdn0xMpll4ABk5xVz/2gpeW7JbC9tdgJOXjEZ2bWZyJSIi50/hRZxar4QIvr9/AFd2bkqVzeCpedu5fdYqjhVqMG9d7couYEtmPt5WC1d0amp2OSIi503hRZxeWIAPM0Z1Y/q1nfA7MaV6xIs/k7LnmNmluZSTvS6D2kbSKMjX5GpERM6ft9kFmKWqqoqKCg0CrSsfHx+8vLwa/HUtFgujesfTLT6ce2avZfeRIka9uZLHruzA2P4tG7weV2MYxq+XjLrpkpGIuDaPCy+GYZCVlUVubq7Zpbis8PBwYmJisFgafmXWpJhQvrn3YqZ9tYUv1h7g799spbTSxp2DWjV4La5kbUYuGTnFBPp6MbR9lNnliIhcEI8LLyeDS1RUFIGBgab8AXZVhmFQXFxMdnY2AE2bmjNuItDXm2eu70yzRgG8+NNOnpq3nYhAX27oFWdKPa5g7nr7dgDDOsYQ6OtxP/Yi4mY86rdYVVVVdXBp3Lix2eW4pICAAACys7OJiooy5RIS2C8jPXhpW6psNl5etJv/N2cTzRsF0E+bDJ6iosrGtxsPAdoOQETcg0cN2D05xiUwUOtbXIiT7ecMY4YeuqwdI7vGUmkzuO/j9dpS4DSW7zrKsaJyGgf5crHCnYi4AY8KLyfpUtGFcab2s1gs/N91nWkXHcLRwjIe/HS91oH5nZMDda/s3BRvL4/8kRcRN6PfZOLy/H28mHFzN/x9rPy88yhv/rzH7JKcRnF5JT9syQLgj1qYTkTchMKLuIW20SE8dmVHAP7zQxob9ueaW5CT+HFbNsXlVcRHBNI9PtzsckRE6oXCi7B3714sFgvr1683u5QLMqp3HFd0akqlzeCRzzdSUWUzuyTTfb3OPstoZNdYp7rcJyJyIRRexG1YLBb+efVFRAT5kna4gLd+Tje7JFMdLypnyY4jgGYZiYh7UXhxEYMHD2bSpElMmjSJsLAwmjRpwrRp0zAM++DU999/n549exISEkJMTAw333xz9XosAMePH2f06NFERkYSEBBAmzZtePfddwFo2dK+Qm23bt2wWCwMHjy4wd9ffWkU5Mv/G9EegBd+2uHRs4++23SISptBx9hQWkeFmF2OiEi98ah1Xk7HMAxKKqpMee0AH686deXPmjWLcePGkZqayurVq5kwYQLx8fGMHz+eiooKnnzySdq1a0d2djYPPvggY8eO5fvvvwdg2rRpbN26lXnz5tGkSRN27dpFSUkJAKmpqfTu3Zsff/yRjh074uvr2vveXNe9Ge+v2MuGA3m8t2IvUy5rZ3ZJpvh6/a+XjERE3InHh5eSiio6PPaDKa+99YlhdVrtNC4ujueeew6LxUK7du3YtGkTzz33HOPHj+f222+vPi4xMZEXX3yRXr16UVhYSHBwMBkZGXTr1o2ePXsCkJCQUH18ZGQkAI0bNyYmJqZ+3pyJLBYLdw1uxZ0frOW9Ffu4c1Argvw866N+4Hgxq/Yex2KBq7oovIiIe9FlIxfSt2/fGj01ycnJ7Ny5k6qqKtasWcNVV11FfHw8ISEhDBo0CICMjAwA7rrrLj7++GO6du3KI488wi+//GLKe2gol3aIoWWTIPJKKvh41X6zy2lwczfY13bp0zKCpmEBJlcjIlK/POufo6cR4OPF1ieGmfba9aG0tJRhw4YxbNgwZs+eTWRkJBkZGQwbNozy8nIALr/8cvbt28f333/PggULGDJkCPfccw/PPPNMvdTgbLysFsYPSOT/zdnE2z/v4dbkFvh40AJtc08sTHe11nYRETfk8eHFYrG4zEZ1KSkpNb5fuXIlbdq0Yfv27Rw7doynnnqKuDj75oSrV68+5fzIyEjGjBnDmDFjGDBgAA8//DDPPPNM9RiXqipzxv44yrXdm/HfBWlk5pXyzYZMru3e3OySGsT2rHy2ZxXg62Xl8ovM2TxTRMSRPOefom4gIyODBx98kLS0ND766CNmzJjB/fffT3x8PL6+vsyYMYM9e/Ywd+5cnnzyyRrnPvbYY3z99dfs2rWLLVu28O2339K+vX1WTlRUFAEBAcyfP5/Dhw+Tl5dnxturd/4+XtzW3z6T6vUle6pnZrm7k9sBDG4XSVigj8nViIjUP4UXF3LrrbdSUlJC7969ueeee7j//vuZMGECkZGRzJw5k88++4wOHTrw1FNPnXI5yNfXl0cffZTOnTszcOBAvLy8+PjjjwHw9vbmxRdf5PXXXyc2NpaRI0ea8fYc4pY+LQjy9SLtcEH1mifuzGYzfr1k1E2XjETEPVkMB/1z9F//+hffffcd69evx9fXl9zc3HOeYxgGjz/+OG+++Sa5ubn079+fV199lTZt2tT6dfPz8wkLCyMvL4/Q0NAaj5WWlpKenk7Lli3x9/ev61sy1eDBg+natSvPP/+82aW4XDs+8c1W3lmezsWtm/DBHX3MLsehUtNzuOH1FQT7ebP6b0Pxr6dxVSIijna2v9+/57Cel/Lycq6//nruuuuuWp/z9NNP8+KLL/Laa6+RkpJCUFAQw4YNo7S01FFlige4rX8CVgss23WULZnucUnsTE6u7TL8ohgFFxFxWw4LL//4xz944IEH6NSpU62ONwyD559/nr/97W+MHDmSzp07895775GZmclXX33lqDLFA8RFBDKik33g6ttuvGVAeaWN7zYdAjTLSETcm9OMeUlPTycrK4uhQ4dW3xcWFkafPn1YsWLFGc8rKysjPz+/xs0dLV682CkuGbmqCQMTAfv6J4fySkyuxjF+3nmE3OIKIkP8SG7V2OxyREQcxmnCS1ZWFgDR0dE17o+Ojq5+7HSmT59OWFhY9e3kVGGR3+rcPJw+LSOotBnMXL7X7HIc4qsTA3Wv6hyLl1U7SIuI+6pTeJk6dSoWi+Wst+3btzuq1tN69NFHycvLq77t3+95q6lK7YwfYO99+TAlg4LSCpOrqV+FZZUs2GoP+drLSETcXZ1WZ5syZQpjx4496zGJiYnnVcjJPXUOHz5M06a/Lqx1+PBhunbtesbz/Pz88PPzO6/XFM9ySVIUiZFB7DlSxCer9nPHgPP7rDqjeZsOUVphIzEyiM7Nw8wuR0TEoeoUXiIjI6s38atvLVu2JCYmhp9++qk6rOTn55OSklKnGUsiZ2I9sWXAo19u4t3lexnbLwFvN9ky4Mu19llG13VvXqedykVEXJHDfnNnZGSwfv16MjIyqKqqYv369axfv57CwsLqY5KSkpgzZw5gX6Z/8uTJ/POf/2Tu3Lls2rSJW2+9ldjYWK6++mpHlSke5ppuzWgc5MvB3BK+33zmsVSu5MDxYlbsOQZoYToR8QwO29TnscceY9asWdXfd+vWDYBFixYxePBgANLS0mosRf/II49QVFTEhAkTyM3N5eKLL2b+/PkusRCauAZ/Hy9uTU7guR938MbS3VzVuanL91Sc3A6gb2IEzcK1g7SIuD+HrbBrFnddYdeZuHo75hSVkzz9J8oqbXw0vq9LTys2DIOh/13C7iNFPP2nztzQU7PtRMQ1OcUKu1K/Bg8ezOTJk80uwy1EBPlyfU/7DtNv/rzH5GouzMYDeew+UoS/j5XLL4oxuxwRkQah8OImDMOgsrLS7DJcxriLE7FYYOH2bDYfdN0tA75cewCAYR1jCPHXDtIi4hkUXlzA2LFjWbJkCS+88EL1ejozZ87EYrEwb948evTogZ+fH8uWLWPs2LGnDHCePHly9TgjAJvNxvTp02nZsiUBAQF06dKFzz//vGHflMlaNgliZBf7eijP/C/N5GrOT2lFFXM32Me7XNu9ucnViIg0HIcN2HU1RUVnfszLC347tONsx1qtEBBw7mODgmpf2wsvvMCOHTu46KKLeOKJJwDYsmULYF848JlnniExMZFGjRrV6vmmT5/OBx98wGuvvUabNm1YunQpt9xyC5GRkQwaNKj2hbm4yUPb8s3GQyxOO8KqvTn0Sogwu6Q6mbf5EMeLK4gN86e/C4/bERGpK4WXE4KDz/zYiBHw3Xe/fh8VBcXFpz920CBYvPjX7xMS4OjRU4+ryzDpsLAwfH19CQwMrF7M7+RKxk888QSXXnpprZ+rrKyMf//73/z4448kJycD9oUFly1bxuuvv+5R4SWhSRA39Izjo9QMnvx2K1/d3R+rCy2r/8HKDABG9Y53m/VqRERqQ+HFxfXs2bNOx+/atYvi4uJTAk95eXn1dHZP8uClbfl2QyYbD+Tx6er93NQ73uySamVrZj5r9h3H22rhxt6aYSQinkXh5YTfrJ13Ci+vmt9nZ5/5WOvv/gG8d+95l1QrQb+7/mS1Wvn97PeKil/38Tm5SOB3331Hs2Y1FzTzxG0WIkP8mHxpW578ditPzd/OJUlRRIU6//TvD1L2ATDsohiiQpy/XhGR+qTwckJdxqA46tiz8fX1paqq6pzHRUZGsnnz5hr3rV+/Hh8f+0yUDh064OfnR0ZGhkddIjqbW5Nb8OXaA2zJzOeRLzby7theTr1wXUFpBV+ts28HcEufFiZXIyLS8HSh3EUkJCSQkpLC3r17OXr0KDab7bTHXXLJJaxevZr33nuPnTt38vjjj9cIMyEhITz00EM88MADzJo1i927d7N27VpmzJhRY0VkT+LjZeX5G7vi621lcdoR3l2+1+ySzmrOuoMUl1fROiqYvomuNchYRKQ+KLy4iIceeggvLy86dOhAZGQkGRkZpz1u2LBhTJs2jUceeYRevXpRUFDArbfeWuOYJ598kmnTpjF9+nTat2/P8OHD+e6772jZsmVDvBWn1CY6hL+OaA/Av7/fxpp9OSZXdHo2m8EHK+2XjEb3iXfqHiIREUfR9gBSZ+7ajoZhMOmjdXy38RCRIX58cWc/4hsHml1WDQu2Hmb8e6sJ9vNm+dRLCAvQwnQi4h60PYDIebBYLPzfdZ1JignhSEEZf34nheyCUrPLqmYYBi8t2gXALX1bKLiIiMdSeBH5jWA/b2bd3pu4iAD2HStmzDuryCupOPeJDWD5rmNs2J+Lv4+VOwZ47iU+ERGFF5HfiQ715/3b+9Ak2I9th/IZN3MVRWXm7xv10qKdANzUK54mwZ43rV1E5CSFF5HTSGgSxKzbexHi783qfccZ+26qqQFm9d4cVu7JwcfLwsRBiabVISLiDBReRM6gY2wY74/rQ4i/N6v2mhtgZiy0j3W5rntzmoYFnONoERH3pvAichZd48L54DcB5pa3UzhaWNagNazYfYwlO47gZbVw56BWDfraIiLOSOFF5By6nAgwof7erMvI5eqXl5OWVdAgr22zGfz7+20A3Nw7noQm9bRks4iIC1N4EamFLnHhzLmnPwmNAzlwvIRrX1nOwu2HHf66X647yKaDeQT7eXP/0DYOfz0REVeg8CJSS60ig5lzd3/6JkZQVF7FuFmreX3J7lM2wqwvx4vKq3td7vlDa80wEhE5QeFFTpGQkMDzzz9vdhlOqVGQL+/d3odRveMxDJg+bztTPt1AacW5N82sq+nztpFTVE7b6GCt6yIi8hsKLyJ15Ott5d/XXMQ//tgRL6uFL9cd5KY3VpKdX3+r8f5vSxafrj4AwL+u6YSPl35URURO0m9EN1VeXm52CW7NYrEwpl8C793em7AAH9bvz+WPLy1n44HcC37uw/ml/OWLjQBMGJhIrwTtHC0i8lsKLy5i8ODBTJo0iUmTJhEWFkaTJk2YNm1a9XiLhIQEnnzySW699VZCQ0OZMGECAMuWLWPAgAEEBAQQFxfHfffdR1FRUfXzZmdnc9VVVxEQEEDLli2ZPXu2Ke/PVfVv3YSv7+lPq8ggsvJLuf61FcxZd+C8n6+ssoo7P1jD8eIKOjQNZcplbeuxWhER96DwYhhQXmTOrY4DPWfNmoW3tzepqam88MIL/Pe//+Wtt96qfvyZZ56hS5curFu3jmnTprF7926GDx/Oddddx8aNG/nkk09YtmwZkyZNqj5n7Nix7N+/n0WLFvH555/zyiuvkJ2dXW/N6wkSmgTx1T39GZIURVmljQc+2cC/v99Gla1u/39tNoO/ztnMuoxcQv29eWV0d/y8vRxUtYiI67IYjpoqYZKzbaldWlpKeno6LVu2xN/f335neRH8O9aESoH/lwm+tVu3Y/DgwWRnZ7NlyxYsFgsAU6dOZe7cuWzdupWEhAS6devGnDlzqs+544478PLy4vXXX6++b9myZQwaNIiioiIyMjJo164dqamp9OrVC4Dt27fTvn17nnvuOSZPnnzaWk7bjoLNZvDfBTuqd34e0KYJL43qTljguXd/NgyDx77ewvsr92GxwLtjezG4XZSjSxYRcRpn+/v9e+p5cSF9+/atDi4AycnJ7Ny5k6oq+0yXnj171jh+w4YNzJw5k+Dg4OrbsGHDsNlspKens23bNry9venRo0f1OUlJSYSHhzfI+3E3VquFh4a146WbuxHg48XPO48y/IWlLNp+9p6svJIKJr6/pjq4/OdPXRRcRETOwtvsAkznE2jvATHrtetRUFDNXpzCwkImTpzIfffdd8qx8fHx7Nixo15fX+yu7BxLYpNg7pq9hn3Hirlt5iqu6daMv17RvsZaLVU2g+83HeJf320jK78UXy8r06/txHU9mptYvYiI81N4sVhqfenGbCkpKTW+X7lyJW3atMHL6/TjIrp3787WrVtp3br1aR9PSkqisrKSNWvWVF82SktLIzc3t17r9kQdYkOZf/9Anv1fGm8vT2fOuoN8uzGT/q2b0DTMn/ySSlL35nCkwL5PUovGgcwY1Y3OzcPNLVxExAUovLiQjIwMHnzwQSZOnMjatWuZMWMGzz777BmP/8tf/kLfvn2ZNGkSd9xxB0FBQWzdupUFCxbw0ksv0a5dO4YPH87EiRN59dVX8fb2ZvLkyQQEaNfi+hDg68XfruzAiM5N+cc3W9mwP5fFaUdqHNMo0Icx/RK4c1Ar/H00OFdEpDYUXlzIrbfeSklJCb1798bLy4v777+/ekr06XTu3JklS5bw17/+lQEDBmAYBq1ateLGG2+sPubdd9/ljjvuYNCgQURHR/PPf/6TadOmNcTb8Rjd4xvx9T392XYon9V7czhWVE6ovw+tooJJTmyMr7eGnomI1IVmG7mIwYMH07VrV6dYtt+V21FERJyTZhuJiIiI21J4EREREZeiMS8uYvHixWaXICIi4hTU8yIiIiIuReFFREREXIpHhhebzWZ2CS5N7SciImbyqDEvvr6+WK1WMjMziYyMxNfXt8ZeQXJ2hmFQXl7OkSNHsFqt+Pr6ml2SiIh4II8KL1arlZYtW3Lo0CEyM03az8gNBAYGEh8fj9XqkR13IiJiMo8KL2DvfYmPj6eysrJ6N2apPS8vL7y9vdVjJSIipvG48AJgsVjw8fHBx8fH7FJERESkjtTvLyIiIi5F4UVERERcisKLiIiIuBS3G/NycpPs/Px8kysRERGR2jr5d/vk3/GzcbvwUlBQAEBcXJzJlYiIiEhdFRQUEBYWdtZjLEZtIo4LsdlsZGZmEhISUu/TefPz84mLi2P//v2EhobW63O7E7VT7amtakftVHtqq9pRO9VOQ7aTYRgUFBQQGxt7znXE3K7nxWq10rx5c4e+RmhoqD7staB2qj21Ve2onWpPbVU7aqfaaah2OlePy0kasCsiIiIuReFFREREXIrCSx34+fnx+OOP4+fnZ3YpTk3tVHtqq9pRO9We2qp21E6146zt5HYDdkVERMS9qedFREREXIrCi4iIiLgUhRcRERFxKQovIiIi4lIUXmrp5ZdfJiEhAX9/f/r06UNqaqrZJZnu73//OxaLpcYtKSmp+vHS0lLuueceGjduTHBwMNdddx2HDx82seKGsXTpUq666ipiY2OxWCx89dVXNR43DIPHHnuMpk2bEhAQwNChQ9m5c2eNY3Jychg9ejShoaGEh4czbtw4CgsLG/BdON652mns2LGnfL6GDx9e4xhPaKfp06fTq1cvQkJCiIqK4uqrryYtLa3GMbX5WcvIyOCKK64gMDCQqKgoHn74YSorKxvyrThcbdpq8ODBp3yu7rzzzhrHuHtbvfrqq3Tu3Ll64bnk5GTmzZtX/bgrfJ4UXmrhk08+4cEHH+Txxx9n7dq1dOnShWHDhpGdnW12aabr2LEjhw4dqr4tW7as+rEHHniAb775hs8++4wlS5aQmZnJtddea2K1DaOoqIguXbrw8ssvn/bxp59+mhdffJHXXnuNlJQUgoKCGDZsGKWlpdXHjB49mi1btrBgwQK+/fZbli5dyoQJExrqLTSIc7UTwPDhw2t8vj766KMaj3tCOy1ZsoR77rmHlStXsmDBAioqKrjssssoKiqqPuZcP2tVVVVcccUVlJeX88svvzBr1ixmzpzJY489ZsZbcpjatBXA+PHja3yunn766erHPKGtmjdvzlNPPcWaNWtYvXo1l1xyCSNHjmTLli2Ai3yeDDmn3r17G/fcc0/191VVVUZsbKwxffp0E6sy3+OPP2506dLltI/l5uYaPj4+xmeffVZ937Zt2wzAWLFiRQNVaD7AmDNnTvX3NpvNiImJMf7zn/9U35ebm2v4+fkZH330kWEYhrF161YDMFatWlV9zLx58wyLxWIcPHiwwWpvSL9vJ8MwjDFjxhgjR4484zme2E6GYRjZ2dkGYCxZssQwjNr9rH3//feG1Wo1srKyqo959dVXjdDQUKOsrKxh30AD+n1bGYZhDBo0yLj//vvPeI6ntlWjRo2Mt956y2U+T+p5OYfy8nLWrFnD0KFDq++zWq0MHTqUFStWmFiZc9i5cyexsbEkJiYyevRoMjIyAFizZg0VFRU12i0pKYn4+HiPbrf09HSysrJqtEtYWBh9+vSpbpcVK1YQHh5Oz549q48ZOnQoVquVlJSUBq/ZTIsXLyYqKop27dpx1113cezYserHPLWd8vLyAIiIiABq97O2YsUKOnXqRHR0dPUxw4YNIz8/v/pf2+7o92110uzZs2nSpAkXXXQRjz76KMXFxdWPeVpbVVVV8fHHH1NUVERycrLLfJ7cbmPG+nb06FGqqqpq/E8CiI6OZvv27SZV5Rz69OnDzJkzadeuHYcOHeIf//gHAwYMYPPmzWRlZeHr60t4eHiNc6Kjo8nKyjKnYCdw8r2f7vN08rGsrCyioqJqPO7t7U1ERIRHtd3w4cO59tpradmyJbt37+b//b//x+WXX86KFSvw8vLyyHay2WxMnjyZ/v37c9FFFwHU6mctKyvrtJ+5k4+5o9O1FcDNN99MixYtiI2NZePGjfzlL38hLS2NL7/8EvCcttq0aRPJycmUlpYSHBzMnDlz6NChA+vXr3eJz5PCi5y3yy+/vPrrzp0706dPH1q0aMGnn35KQECAiZWJO7jpppuqv+7UqROdO3emVatWLF68mCFDhphYmXnuueceNm/eXGNsmZzemdrqt2OiOnXqRNOmTRkyZAi7d++mVatWDV2madq1a8f69evJy8vj888/Z8yYMSxZssTssmpNl43OoUmTJnh5eZ0y0vrw4cPExMSYVJVzCg8Pp23btuzatYuYmBjKy8vJzc2tcYynt9vJ9362z1NMTMwpg8ErKyvJycnx6LZLTEykSZMm7Nq1C/C8dpo0aRLffvstixYtonnz5tX31+ZnLSYm5rSfuZOPuZsztdXp9OnTB6DG58oT2srX15fWrVvTo0cPpk+fTpcuXXjhhRdc5vOk8HIOvr6+9OjRg59++qn6PpvNxk8//URycrKJlTmfwsJCdu/eTdOmTenRowc+Pj412i0tLY2MjAyPbreWLVsSExNTo13y8/NJSUmpbpfk5GRyc3NZs2ZN9TELFy7EZrNV/6L1RAcOHODYsWM0bdoU8Jx2MgyDSZMmMWfOHBYuXEjLli1rPF6bn7Xk5GQ2bdpUI+wtWLCA0NBQOnTo0DBvpAGcq61OZ/369QA1Plee0Fa/Z7PZKCsrc53PU4MMC3ZxH3/8seHn52fMnDnT2Lp1qzFhwgQjPDy8xkhrTzRlyhRj8eLFRnp6urF8+XJj6NChRpMmTYzs7GzDMAzjzjvvNOLj442FCxcaq1evNpKTk43k5GSTq3a8goICY926dca6desMwPjvf/9rrFu3zti3b59hGIbx1FNPGeHh4cbXX39tbNy40Rg5cqTRsmVLo6SkpPo5hg8fbnTr1s1ISUkxli1bZrRp08YYNWqUWW/JIc7WTgUFBcZDDz1krFixwkhPTzd+/PFHo3v37kabNm2M0tLS6ufwhHa66667jLCwMGPx4sXGoUOHqm/FxcXVx5zrZ62ystK46KKLjMsuu8xYv369MX/+fCMyMtJ49NFHzXhLDnOuttq1a5fxxBNPGKtXrzbS09ONr7/+2khMTDQGDhxY/Rye0FZTp041lixZYqSnpxsbN240pk6dalgsFuN///ufYRiu8XlSeKmlGTNmGPHx8Yavr6/Ru3dvY+XKlWaXZLobb7zRaNq0qeHr62s0a9bMuPHGG41du3ZVP15SUmLcfffdRqNGjYzAwEDjmmuuMQ4dOmRixQ1j0aJFBnDKbcyYMYZh2KdLT5s2zYiOjjb8/PyMIUOGGGlpaTWe49ixY8aoUaOM4OBgIzQ01LjtttuMgoICE96N45ytnYqLi43LLrvMiIyMNHx8fIwWLVoY48ePP+UfDJ7QTqdrI8B49913q4+pzc/a3r17jcsvv9wICAgwmjRpYkyZMsWoqKho4HfjWOdqq4yMDGPgwIFGRESE4efnZ7Ru3dp4+OGHjby8vBrP4+5tdfvttxstWrQwfH19jcjISGPIkCHVwcUwXOPzZDEMw2iYPh4RERGRC6cxLyIiIuJSFF5ERETEpSi8iIiIiEtReBERERGXovAiIiIiLkXhRURERFyKwouIiIi4FIUXERERcSkKLyIiIuJSFF5ERETEpSi8iIiIiEtReBERERGX8v8BWhKwzqe5KwQAAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"i=990\n",
|
||
"(batch_x, batch_y, batch_x_mark, batch_y_mark) = ds[i]\n",
|
||
"l1 = batch_x.shape[0]\n",
|
||
"l2 = batch_y.shape[0]\n",
|
||
"plt.plot(range(l1), batch_x[:, -1], label='past')\n",
|
||
"plt.plot(range(l1, l1+l2), batch_y[:, -1], color='blue', ls='--', label='true')\n",
|
||
"plt.plot(range(l1, l1+l2), preds[i], label='pred');\n",
|
||
"plt.legend(loc='lower left')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "fff9cb48",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T07:33:57.703528Z",
|
||
"start_time": "2022-11-28T07:33:57.689258Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a2555d9b",
|
||
"metadata": {},
|
||
"source": [
|
||
"# TODO check index"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "815cdbe5",
|
||
"metadata": {},
|
||
"source": [
|
||
"- s_end = index + self.seq_len\n",
|
||
"- r_begin = index + self.seq_len - self.label_len\n",
|
||
"- r_end = index + self.seq_len + self.pred_len"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"id": "abc903ba",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.789777Z",
|
||
"start_time": "2022-11-28T08:48:53.648714Z"
|
||
},
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>close</th>\n",
|
||
" <th>ref_close</th>\n",
|
||
" <th>sec_close</th>\n",
|
||
" <th>RVOLs_50_12_2ref_2ref</th>\n",
|
||
" <th>MACDVs_3_10_9_2ref_2ref</th>\n",
|
||
" <th>MACDVs_8_24_9_2ref_2ref</th>\n",
|
||
" <th>RRVOLs_50_12_2ref_2ref</th>\n",
|
||
" <th>RSMKs_3_24_12_2ref_2ref</th>\n",
|
||
" <th>RSMKs_128_8_4_2ref_2ref</th>\n",
|
||
" <th>RRSs_12_12_12_2ref_2ref</th>\n",
|
||
" <th>VRRSs_5_21_12_2ref_2ref</th>\n",
|
||
" <th>RSMKs_18_144_72_2ref_2ref</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2019-01-02 07:00:00</th>\n",
|
||
" <td>60.7500</td>\n",
|
||
" <td>246.3900</td>\n",
|
||
" <td>56.70</td>\n",
|
||
" <td>0.634561</td>\n",
|
||
" <td>0.228822</td>\n",
|
||
" <td>0.749770</td>\n",
|
||
" <td>-0.081572</td>\n",
|
||
" <td>0.754948</td>\n",
|
||
" <td>0.041974</td>\n",
|
||
" <td>0.452882</td>\n",
|
||
" <td>0.094300</td>\n",
|
||
" <td>-0.141763</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2019-01-02 09:30:00</th>\n",
|
||
" <td>60.2000</td>\n",
|
||
" <td>246.3000</td>\n",
|
||
" <td>56.30</td>\n",
|
||
" <td>0.619485</td>\n",
|
||
" <td>-0.138271</td>\n",
|
||
" <td>0.516611</td>\n",
|
||
" <td>-0.159545</td>\n",
|
||
" <td>0.690752</td>\n",
|
||
" <td>0.037310</td>\n",
|
||
" <td>0.201226</td>\n",
|
||
" <td>-0.050731</td>\n",
|
||
" <td>-0.127774</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2019-01-02 09:35:00</th>\n",
|
||
" <td>59.8500</td>\n",
|
||
" <td>246.5200</td>\n",
|
||
" <td>56.36</td>\n",
|
||
" <td>0.689500</td>\n",
|
||
" <td>-0.535564</td>\n",
|
||
" <td>0.191501</td>\n",
|
||
" <td>-0.104752</td>\n",
|
||
" <td>0.553376</td>\n",
|
||
" <td>0.027199</td>\n",
|
||
" <td>-0.217425</td>\n",
|
||
" <td>-0.069932</td>\n",
|
||
" <td>-0.117113</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2019-01-02 09:40:00</th>\n",
|
||
" <td>60.0600</td>\n",
|
||
" <td>246.9001</td>\n",
|
||
" <td>56.70</td>\n",
|
||
" <td>0.746596</td>\n",
|
||
" <td>-0.803242</td>\n",
|
||
" <td>-0.130051</td>\n",
|
||
" <td>-0.070761</td>\n",
|
||
" <td>0.402911</td>\n",
|
||
" <td>0.015511</td>\n",
|
||
" <td>-0.473000</td>\n",
|
||
" <td>-0.089949</td>\n",
|
||
" <td>-0.109966</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2019-01-02 09:45:00</th>\n",
|
||
" <td>60.2350</td>\n",
|
||
" <td>247.1400</td>\n",
|
||
" <td>56.69</td>\n",
|
||
" <td>0.701637</td>\n",
|
||
" <td>-0.936439</td>\n",
|
||
" <td>-0.409001</td>\n",
|
||
" <td>-0.130581</td>\n",
|
||
" <td>0.263664</td>\n",
|
||
" <td>0.003868</td>\n",
|
||
" <td>-0.679096</td>\n",
|
||
" <td>-0.096488</td>\n",
|
||
" <td>-0.105561</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2020-12-31 17:35:00</th>\n",
|
||
" <td>17.3300</td>\n",
|
||
" <td>374.2100</td>\n",
|
||
" <td>37.90</td>\n",
|
||
" <td>0.706492</td>\n",
|
||
" <td>-0.129955</td>\n",
|
||
" <td>-0.551704</td>\n",
|
||
" <td>0.197178</td>\n",
|
||
" <td>-0.842459</td>\n",
|
||
" <td>-0.216290</td>\n",
|
||
" <td>-3.579407</td>\n",
|
||
" <td>-0.088556</td>\n",
|
||
" <td>-1.118991</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2020-12-31 18:30:00</th>\n",
|
||
" <td>17.3200</td>\n",
|
||
" <td>374.4000</td>\n",
|
||
" <td>37.96</td>\n",
|
||
" <td>0.615936</td>\n",
|
||
" <td>-0.147461</td>\n",
|
||
" <td>-0.538942</td>\n",
|
||
" <td>0.174563</td>\n",
|
||
" <td>-0.803874</td>\n",
|
||
" <td>-0.213881</td>\n",
|
||
" <td>-3.258388</td>\n",
|
||
" <td>-0.075389</td>\n",
|
||
" <td>-1.179880</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2020-12-31 19:15:00</th>\n",
|
||
" <td>17.3600</td>\n",
|
||
" <td>374.3900</td>\n",
|
||
" <td>37.95</td>\n",
|
||
" <td>0.605291</td>\n",
|
||
" <td>-0.105155</td>\n",
|
||
" <td>-0.508192</td>\n",
|
||
" <td>0.226633</td>\n",
|
||
" <td>-0.756699</td>\n",
|
||
" <td>-0.210656</td>\n",
|
||
" <td>-2.735903</td>\n",
|
||
" <td>-0.063731</td>\n",
|
||
" <td>-1.239256</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2020-12-31 19:20:00</th>\n",
|
||
" <td>17.3501</td>\n",
|
||
" <td>374.3900</td>\n",
|
||
" <td>37.95</td>\n",
|
||
" <td>0.592393</td>\n",
|
||
" <td>-0.065321</td>\n",
|
||
" <td>-0.475375</td>\n",
|
||
" <td>0.268617</td>\n",
|
||
" <td>-0.720279</td>\n",
|
||
" <td>-0.207647</td>\n",
|
||
" <td>-2.416748</td>\n",
|
||
" <td>-0.053941</td>\n",
|
||
" <td>-1.297199</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2020-12-31 19:55:00</th>\n",
|
||
" <td>17.4000</td>\n",
|
||
" <td>374.3900</td>\n",
|
||
" <td>37.95</td>\n",
|
||
" <td>0.504877</td>\n",
|
||
" <td>0.054870</td>\n",
|
||
" <td>-0.408612</td>\n",
|
||
" <td>0.198019</td>\n",
|
||
" <td>-0.664792</td>\n",
|
||
" <td>-0.201618</td>\n",
|
||
" <td>-2.009522</td>\n",
|
||
" <td>-0.045287</td>\n",
|
||
" <td>-1.352772</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>53398 rows × 12 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" close ref_close sec_close RVOLs_50_12_2ref_2ref \\\n",
|
||
"date \n",
|
||
"2019-01-02 07:00:00 60.7500 246.3900 56.70 0.634561 \n",
|
||
"2019-01-02 09:30:00 60.2000 246.3000 56.30 0.619485 \n",
|
||
"2019-01-02 09:35:00 59.8500 246.5200 56.36 0.689500 \n",
|
||
"2019-01-02 09:40:00 60.0600 246.9001 56.70 0.746596 \n",
|
||
"2019-01-02 09:45:00 60.2350 247.1400 56.69 0.701637 \n",
|
||
"... ... ... ... ... \n",
|
||
"2020-12-31 17:35:00 17.3300 374.2100 37.90 0.706492 \n",
|
||
"2020-12-31 18:30:00 17.3200 374.4000 37.96 0.615936 \n",
|
||
"2020-12-31 19:15:00 17.3600 374.3900 37.95 0.605291 \n",
|
||
"2020-12-31 19:20:00 17.3501 374.3900 37.95 0.592393 \n",
|
||
"2020-12-31 19:55:00 17.4000 374.3900 37.95 0.504877 \n",
|
||
"\n",
|
||
" MACDVs_3_10_9_2ref_2ref MACDVs_8_24_9_2ref_2ref \\\n",
|
||
"date \n",
|
||
"2019-01-02 07:00:00 0.228822 0.749770 \n",
|
||
"2019-01-02 09:30:00 -0.138271 0.516611 \n",
|
||
"2019-01-02 09:35:00 -0.535564 0.191501 \n",
|
||
"2019-01-02 09:40:00 -0.803242 -0.130051 \n",
|
||
"2019-01-02 09:45:00 -0.936439 -0.409001 \n",
|
||
"... ... ... \n",
|
||
"2020-12-31 17:35:00 -0.129955 -0.551704 \n",
|
||
"2020-12-31 18:30:00 -0.147461 -0.538942 \n",
|
||
"2020-12-31 19:15:00 -0.105155 -0.508192 \n",
|
||
"2020-12-31 19:20:00 -0.065321 -0.475375 \n",
|
||
"2020-12-31 19:55:00 0.054870 -0.408612 \n",
|
||
"\n",
|
||
" RRVOLs_50_12_2ref_2ref RSMKs_3_24_12_2ref_2ref \\\n",
|
||
"date \n",
|
||
"2019-01-02 07:00:00 -0.081572 0.754948 \n",
|
||
"2019-01-02 09:30:00 -0.159545 0.690752 \n",
|
||
"2019-01-02 09:35:00 -0.104752 0.553376 \n",
|
||
"2019-01-02 09:40:00 -0.070761 0.402911 \n",
|
||
"2019-01-02 09:45:00 -0.130581 0.263664 \n",
|
||
"... ... ... \n",
|
||
"2020-12-31 17:35:00 0.197178 -0.842459 \n",
|
||
"2020-12-31 18:30:00 0.174563 -0.803874 \n",
|
||
"2020-12-31 19:15:00 0.226633 -0.756699 \n",
|
||
"2020-12-31 19:20:00 0.268617 -0.720279 \n",
|
||
"2020-12-31 19:55:00 0.198019 -0.664792 \n",
|
||
"\n",
|
||
" RSMKs_128_8_4_2ref_2ref RRSs_12_12_12_2ref_2ref \\\n",
|
||
"date \n",
|
||
"2019-01-02 07:00:00 0.041974 0.452882 \n",
|
||
"2019-01-02 09:30:00 0.037310 0.201226 \n",
|
||
"2019-01-02 09:35:00 0.027199 -0.217425 \n",
|
||
"2019-01-02 09:40:00 0.015511 -0.473000 \n",
|
||
"2019-01-02 09:45:00 0.003868 -0.679096 \n",
|
||
"... ... ... \n",
|
||
"2020-12-31 17:35:00 -0.216290 -3.579407 \n",
|
||
"2020-12-31 18:30:00 -0.213881 -3.258388 \n",
|
||
"2020-12-31 19:15:00 -0.210656 -2.735903 \n",
|
||
"2020-12-31 19:20:00 -0.207647 -2.416748 \n",
|
||
"2020-12-31 19:55:00 -0.201618 -2.009522 \n",
|
||
"\n",
|
||
" VRRSs_5_21_12_2ref_2ref RSMKs_18_144_72_2ref_2ref \n",
|
||
"date \n",
|
||
"2019-01-02 07:00:00 0.094300 -0.141763 \n",
|
||
"2019-01-02 09:30:00 -0.050731 -0.127774 \n",
|
||
"2019-01-02 09:35:00 -0.069932 -0.117113 \n",
|
||
"2019-01-02 09:40:00 -0.089949 -0.109966 \n",
|
||
"2019-01-02 09:45:00 -0.096488 -0.105561 \n",
|
||
"... ... ... \n",
|
||
"2020-12-31 17:35:00 -0.088556 -1.118991 \n",
|
||
"2020-12-31 18:30:00 -0.075389 -1.179880 \n",
|
||
"2020-12-31 19:15:00 -0.063731 -1.239256 \n",
|
||
"2020-12-31 19:20:00 -0.053941 -1.297199 \n",
|
||
"2020-12-31 19:55:00 -0.045287 -1.352772 \n",
|
||
"\n",
|
||
"[53398 rows x 12 columns]"
|
||
]
|
||
},
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"f = ds.root_path + '/' + ds.data_path\n",
|
||
"df = pd.read_csv(f).set_index('date', drop=False)\n",
|
||
"df = df[ds.cols[1:]]\n",
|
||
"# df[:] = ds.scaler.transform(df.values)\n",
|
||
"df\n",
|
||
"# df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"id": "0dac417e",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.923652Z",
|
||
"start_time": "2022-11-28T08:48:53.790995Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"array([ 1.24250000e+01, 3.54330000e+02, 3.52700000e+01, 6.24194744e-01,\n",
|
||
" -1.20630267e-01, 4.64484086e-01, -3.96678363e-01, 1.04169477e+00,\n",
|
||
" -2.88024043e-02, -4.61072831e-01, -9.81798622e-03, -3.57276350e+00])"
|
||
]
|
||
},
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from data_provider.data_loader import Dataset_Custom\n",
|
||
"ds2 = Dataset_Custom(\n",
|
||
" ds.root_path,\n",
|
||
" flag=\"test\",\n",
|
||
"# size=ds.size,\n",
|
||
" size=[ds.seq_len, ds.label_len, ds.pred_len],\n",
|
||
" features=ds.features,\n",
|
||
" data_path=ds.data_path,\n",
|
||
" target=ds.target,\n",
|
||
" scale=False,\n",
|
||
" timeenc=ds.timeenc,\n",
|
||
" freq=ds.freq\n",
|
||
")\n",
|
||
"\n",
|
||
"i=99\n",
|
||
"(batch_x, batch_y, batch_x_mark, batch_y_mark) = ds2[i]\n",
|
||
"batch_x[-1]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"id": "a6a5dff7",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.941224Z",
|
||
"start_time": "2022-11-28T08:48:53.924828Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"close 12.425000\n",
|
||
"ref_close 354.330000\n",
|
||
"sec_close 35.270000\n",
|
||
"RVOLs_50_12_2ref_2ref 0.624195\n",
|
||
"MACDVs_3_10_9_2ref_2ref -0.120630\n",
|
||
"MACDVs_8_24_9_2ref_2ref 0.464484\n",
|
||
"RRVOLs_50_12_2ref_2ref -0.396678\n",
|
||
"RSMKs_3_24_12_2ref_2ref 1.041695\n",
|
||
"RSMKs_128_8_4_2ref_2ref -0.028802\n",
|
||
"RRSs_12_12_12_2ref_2ref -0.461073\n",
|
||
"VRRSs_5_21_12_2ref_2ref -0.009818\n",
|
||
"RSMKs_18_144_72_2ref_2ref -3.572763\n",
|
||
"Name: 2020-09-02 11:20:00, dtype: float64"
|
||
]
|
||
},
|
||
"execution_count": 14,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dt = ds2.index.iloc[i-1]\n",
|
||
"df.loc[dt]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"id": "91a28ab0",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2022-11-28T08:48:53.977072Z",
|
||
"start_time": "2022-11-28T08:48:53.942153Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'OK'"
|
||
]
|
||
},
|
||
"execution_count": 15,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"assert df.loc[dt].close == batch_x[-1, 0], 'index should be right'\n",
|
||
"'OK'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "35053a3c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "87fdb36f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "cf203a63",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "deeptime",
|
||
"language": "python",
|
||
"name": "deeptime"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.8.13"
|
||
},
|
||
"toc": {
|
||
"base_numbering": 1,
|
||
"nav_menu": {},
|
||
"number_sections": true,
|
||
"sideBar": true,
|
||
"skip_h1_title": false,
|
||
"title_cell": "Table of Contents",
|
||
"title_sidebar": "Contents",
|
||
"toc_cell": false,
|
||
"toc_position": {},
|
||
"toc_section_display": true,
|
||
"toc_window_display": false
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|