{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "d697ff2c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n", "c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n", " warn(msg)\n" ] } ], "source": [ "import os\n", "import glob\n", "import pandas as pd\n", "\n", "folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\AcerteSeuPedido\"\n", "\n", "file_paths = glob.glob(os.path.join(folder_path, \"*.xls\")) + glob.glob(os.path.join(folder_path, \"*.xlsx\"))\n", "\n", "dfs = []\n", "\n", "for file_path in file_paths:\n", " try:\n", " excel_file = pd.ExcelFile(file_path)\n", " # Procura aba que comece com 'BOT_Itens_Críticos'\n", " for i in excel_file.sheet_names:\n", " if i.startswith('BOT_Itens Críticos'):\n", " target_sheet = i\n", " \n", " if target_sheet:\n", " df = pd.read_excel(excel_file, sheet_name=target_sheet, skiprows=5, usecols=lambda col: col != 'A')\n", " df[\"source_file\"] = os.path.basename(file_path)\n", " dfs.append(df)\n", " else:\n", " print(f\"[AVISO] Nenhuma aba correspondente encontrada em: {file_path}\")\n", " \n", " except Exception as e:\n", " print(f\"[ERRO] Falha ao ler {file_path}: {e}\")\n", "\n", "if dfs:\n", " combined_df = pd.concat(dfs, ignore_index=True)\n", " combined_df\n", "else:\n", " print(\"Nenhum dado foi carregado.\")\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "bad3ffb6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(131702, 21)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "combined_df.shape" ] }, { "cell_type": "code", "execution_count": 3, "id": "f7a54c0d", "metadata": {}, "outputs": [], "source": [ "#combined_df.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\compiladoAcertePedido.xlsx\",index=False)" ] }, { "cell_type": "code", "execution_count": 4, "id": "eecd60ee", "metadata": {}, "outputs": [], "source": [ "df = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\compiladoAcertePedido.xlsx\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "5a671aca", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Unnamed: 0', 'CENTRO DE DISTRIBUIÇÃO', 'MATERIAL', 'DESCRIÇÃO',\n", " 'CATEGORIA', 'DATA PREVISTA\\nREGULARIZAÇÃO',\n", " 'Carteira Bloqueada Para Novos Pedidos?',\n", " 'Incluir pedido?\\n(Orientação industria)', 'source_file', 'SEMANA',\n", " 'CURVA', 'MATERIAL SUBSTITUTO', 'DESCRIÇÃO SUBSTITUTO',\n", " 'Previsão de Atendimento\\n', 'Data de regularização ', 'Unnamed: 8',\n", " 'Unnamed: 9', 'Unnamed: 10', 'GRID', 'Unnamed: 12',\n", " 'Previsão de Atendimento', 'Coluna1', 'Coluna2'],\n", " dtype='object')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "code", "execution_count": 6, "id": "7bd2075c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0CENTRO DE DISTRIBUIÇÃOMATERIALDESCRIÇÃOCATEGORIADATA PREVISTA\\nREGULARIZAÇÃOCarteira Bloqueada Para Novos Pedidos?Incluir pedido?\\n(Orientação industria)source_fileSEMANA...Previsão de Atendimento\\nData de regularizaçãoUnnamed: 8Unnamed: 9Unnamed: 10GRIDUnnamed: 12Previsão de AtendimentoColuna1Coluna2
0NaNCD BAHIA53460.0DR BOTICA COL POC/AMIZ V2 120mlPERFUMARIAACIMA DE 60NãoNãoAcerte-seu-pedido-Boticario-S01-1735856932687....S01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1NaNCD BAHIA59176.0BOTIK GEL CONC LIMP FAC AC/GLIC V2 150gLIMPEZAACIMA DE 60NãoNãoAcerte-seu-pedido-Boticario-S01-1735856932687....S01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2NaNCD BAHIA50931.0ESTJ NSPA 3 AMEIXAS REG/22ESTOJO REGULARACIMA DE 60NãoNãoAcerte-seu-pedido-Boticario-S01-1735856932687....S01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3NaNCD BAHIA48620.0DEM FLORATTA EDP FLEUR D ECLIPSE 4mlDEMONSTRADORACIMA DE 60NãoNãoAcerte-seu-pedido-Boticario-S01-1735856932687....S01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
4NaNCD BAHIA75478.0DEM LILY EDP LOVE 4mlDEMONSTRADORACIMA DE 60NãoNãoAcerte-seu-pedido-Boticario-S01-1735856932687....S01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

5 rows × 23 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 CENTRO DE DISTRIBUIÇÃO MATERIAL \\\n", "0 NaN CD BAHIA 53460.0 \n", "1 NaN CD BAHIA 59176.0 \n", "2 NaN CD BAHIA 50931.0 \n", "3 NaN CD BAHIA 48620.0 \n", "4 NaN CD BAHIA 75478.0 \n", "\n", " DESCRIÇÃO CATEGORIA \\\n", "0 DR BOTICA COL POC/AMIZ V2 120ml PERFUMARIA \n", "1 BOTIK GEL CONC LIMP FAC AC/GLIC V2 150g LIMPEZA \n", "2 ESTJ NSPA 3 AMEIXAS REG/22 ESTOJO REGULAR \n", "3 DEM FLORATTA EDP FLEUR D ECLIPSE 4ml DEMONSTRADOR \n", "4 DEM LILY EDP LOVE 4ml DEMONSTRADOR \n", "\n", " DATA PREVISTA\\nREGULARIZAÇÃO Carteira Bloqueada Para Novos Pedidos? \\\n", "0 ACIMA DE 60 Não \n", "1 ACIMA DE 60 Não \n", "2 ACIMA DE 60 Não \n", "3 ACIMA DE 60 Não \n", "4 ACIMA DE 60 Não \n", "\n", " Incluir pedido?\\n(Orientação industria) \\\n", "0 Não \n", "1 Não \n", "2 Não \n", "3 Não \n", "4 Não \n", "\n", " source_file SEMANA ... \\\n", "0 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n", "1 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n", "2 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n", "3 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n", "4 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n", "\n", " Previsão de Atendimento\\n Data de regularização Unnamed: 8 Unnamed: 9 \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "\n", " Unnamed: 10 GRID Unnamed: 12 Previsão de Atendimento Coluna1 Coluna2 \n", "0 NaN NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN NaN NaN \n", "\n", "[5 rows x 23 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 7, "id": "ca8dedc2", "metadata": {}, "outputs": [], "source": [ "# Carrega o arquivo\n", "\n", "df = df[['MATERIAL','SEMANA','CURVA']]\n", "df['semana_num'] = df['SEMANA'].str.extract(r'S(\\d+)').astype(int)\n", "\n", "# Supondo df com colunas: MATERIAL e semana ('S01', 'S02', ...)\n", "df['semana_num'] = df['SEMANA'].str.extract(r'S(\\d+)').astype(int)\n", "\n", "# Ordenar os dados\n", "df = df.sort_values(['MATERIAL', 'semana_num'])\n", "\n", "# Identificar rupturas de sequência para cada MATERIAL\n", "df['grupo'] = df.groupby('MATERIAL')['semana_num'].diff().ne(1).cumsum()\n", "\n", "# Para cada MATERIAL + grupo, contar duração do período crítico\n", "grupos = df.groupby(['MATERIAL', 'CURVA', 'grupo']).size().reset_index(name='duracao')\n", "\n", "# Agora calcular métricas por SKU\n", "resultado = grupos.groupby('MATERIAL')['duracao'].agg(media_duracao='mean', max_duracao='max').reset_index()" ] }, { "cell_type": "code", "execution_count": 8, "id": "4b24bad4", "metadata": {}, "outputs": [], "source": [ "resultado = grupos.groupby('MATERIAL')['duracao'].agg(media_duracao='mean', max_duracao='max',cont='count').reset_index()\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "ed6d7fd7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MATERIALmedia_duracaomax_duracaocont
01004.01.456522846
11005.02.00000021
21006.01.250000216
31078.01.428571314
41080.01.00000015
...............
354688585.01.545455211
354788646.01.200000210
354888893.01.00000013
354988997.01.16666726
355089256.01.00000014
\n", "

3551 rows × 4 columns

\n", "
" ], "text/plain": [ " MATERIAL media_duracao max_duracao cont\n", "0 1004.0 1.456522 8 46\n", "1 1005.0 2.000000 2 1\n", "2 1006.0 1.250000 2 16\n", "3 1078.0 1.428571 3 14\n", "4 1080.0 1.000000 1 5\n", "... ... ... ... ...\n", "3546 88585.0 1.545455 2 11\n", "3547 88646.0 1.200000 2 10\n", "3548 88893.0 1.000000 1 3\n", "3549 88997.0 1.166667 2 6\n", "3550 89256.0 1.000000 1 4\n", "\n", "[3551 rows x 4 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resultado" ] }, { "cell_type": "code", "execution_count": 10, "id": "b555fdc8", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MATERIALCURVAgrupoduracao
01004.0A12
11004.0A28
21004.0A31
31004.0A41
41004.0A52
...............
6335288997.0E633531
6335389256.0C633541
6335489256.0C633551
6335589256.0C633561
6335689256.0C633571
\n", "

63357 rows × 4 columns

\n", "
" ], "text/plain": [ " MATERIAL CURVA grupo duracao\n", "0 1004.0 A 1 2\n", "1 1004.0 A 2 8\n", "2 1004.0 A 3 1\n", "3 1004.0 A 4 1\n", "4 1004.0 A 5 2\n", "... ... ... ... ...\n", "63352 88997.0 E 63353 1\n", "63353 89256.0 C 63354 1\n", "63354 89256.0 C 63355 1\n", "63355 89256.0 C 63356 1\n", "63356 89256.0 C 63357 1\n", "\n", "[63357 rows x 4 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grupos" ] }, { "cell_type": "code", "execution_count": 11, "id": "35f6424b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(17)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resultado['max_duracao'].max()" ] }, { "cell_type": "code", "execution_count": 12, "id": "5e491a0d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Média geral de semanas em estado crítico: 1.40 ou 10 dias.\n" ] } ], "source": [ "media_geral = grupos['duracao'].mean()\n", "print(f\"Média geral de semanas em estado crítico: {media_geral:.2f} ou {round(media_geral*7)} dias.\")\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "7ee00755", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(17)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grupos['duracao'].max()" ] }, { "cell_type": "code", "execution_count": 14, "id": "c1795cb9", "metadata": {}, "outputs": [], "source": [ "#resultado.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\EstudoItensCriticos.xlsx\",index=False)" ] }, { "cell_type": "code", "execution_count": 15, "id": "8899d109", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CURVAmedia_duracao_criticomedia_entradas_critico
0A1035.852535
1B1029.591413
2C1017.367594
3E1011.119888
\n", "
" ], "text/plain": [ " CURVA media_duracao_critico media_entradas_critico\n", "0 A 10 35.852535\n", "1 B 10 29.591413\n", "2 C 10 17.367594\n", "3 E 10 11.119888" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Corrige o agrupamento incluindo CURVA\n", "grupos = df.groupby(['MATERIAL', 'CURVA', 'grupo']).size().reset_index(name='duracao')\n", "\n", "# Duração média dos períodos críticos por CURVA\n", "media_duracao_por_curva = grupos.groupby('CURVA')['duracao'].mean().reset_index(name='media_duracao_critico')\n", "media_duracao_por_curva['media_duracao_critico'] = round(media_duracao_por_curva['media_duracao_critico']*7).astype('Int64') #transforma de semanas em dias\n", "\n", "# Quantas vezes cada SKU entrou em estado crítico\n", "entradas_por_sku = grupos.groupby(['MATERIAL', 'CURVA']).size().reset_index(name='qtd_entradas')\n", "\n", "# Média de entradas por SKU da mesma CURVA\n", "media_entradas_por_curva = entradas_por_sku.groupby('CURVA')['qtd_entradas'].mean().reset_index(name='media_entradas_critico')\n", "\n", "# Consolidar resultado\n", "curva_analise = pd.merge(media_duracao_por_curva, media_entradas_por_curva, on='CURVA')\n", "\n", "# Exibir resultado\n", "curva_analise\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "e3bd820a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MATERIALCURVAgrupoduracao
01004.0A12
11004.0A28
21004.0A31
31004.0A41
41004.0A52
...............
6335288997.0E633531
6335389256.0C633541
6335489256.0C633551
6335589256.0C633561
6335689256.0C633571
\n", "

63357 rows × 4 columns

\n", "
" ], "text/plain": [ " MATERIAL CURVA grupo duracao\n", "0 1004.0 A 1 2\n", "1 1004.0 A 2 8\n", "2 1004.0 A 3 1\n", "3 1004.0 A 4 1\n", "4 1004.0 A 5 2\n", "... ... ... ... ...\n", "63352 88997.0 E 63353 1\n", "63353 89256.0 C 63354 1\n", "63354 89256.0 C 63355 1\n", "63355 89256.0 C 63356 1\n", "63356 89256.0 C 63357 1\n", "\n", "[63357 rows x 4 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grupos" ] }, { "cell_type": "code", "execution_count": 17, "id": "e83b92d0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MATERIALqtd_entradas
01004.046
11005.01
21006.016
31078.014
41080.05
.........
354688585.011
354788646.010
354888893.03
354988997.06
355089256.04
\n", "

3551 rows × 2 columns

\n", "
" ], "text/plain": [ " MATERIAL qtd_entradas\n", "0 1004.0 46\n", "1 1005.0 1\n", "2 1006.0 16\n", "3 1078.0 14\n", "4 1080.0 5\n", "... ... ...\n", "3546 88585.0 11\n", "3547 88646.0 10\n", "3548 88893.0 3\n", "3549 88997.0 6\n", "3550 89256.0 4\n", "\n", "[3551 rows x 2 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "entradas_por_sku2 = grupos.groupby(['MATERIAL']).size().reset_index(name='qtd_entradas')\n", "\n", "entradas_por_sku2" ] }, { "cell_type": "code", "execution_count": 18, "id": "7086d840", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Média geral de semanas em estado crítico: 1.40 ou 10 dias.\n", "\n", "Arquivo Excel salvo com sucesso em:\n", "C:/Users/joao.herculano/GRUPO GINSENG/Assistência Suprimentos - 2025/CRITICOS INDUSTRIA/analise_curva_resultado20250604.xlsx\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMu5JREFUeJzt3QmcVWX9P/CHRcEFcEdNVEyKFJfcSi2D0pSQwiyXXLHUFDHTMtHEcAn3yDQtN7QUcZef/bIUCzU1F9S0XCI1+eeWoqCoqHD/r+/zep353Rlmhotn4M7A+/16XZi5c5fnnnPuvc/n2U6nSqVSSQAAACV0LnNnAACAIFgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAXRYkyZNSmeccUb64IMP6l0UaFemTZuWfvKTn6Snn3663kUBliKCBZDef//9NHDgwLTyyiunM888M02fPj2ttNJKqT176KGH0l577ZU23HDDtMwyy9R0n06dOuXKVmH8+PH5uueff75NyxbbsH///mnevHmt3i6eN54/ylGI8sV1i8Lrr7+eVlhhhfS///u/i+Txl1ZNj6t6q1Qqafjw4enee+9N/fr1a/W266+/fjrwwAMXW9mAJZtgASUUFdPi0r1797T22munnXfeOZ133nnprbfeSh3BHXfckV5++eV03HHHpXHjxqX11lsvfec730nt1Ztvvpn22GOPdPrpp6fdd989tSezZs3KvSg/+tGPUufO7esjdtVVV8379cQTT0xLmwhT7anyvyhdcMEF6dlnn01XXXVVPgYjYMRrj/cN/+e9995LP/vZz9JnPvOZ1KtXr/z5/YlPfCIdccQR6Zlnnmm4XQSvFVdcscXHib9Vh7M///nPjb4XunTpktZYY430jW98Iz355JMNt9t0003Tuuuum4NgS7bffvvUu3fv9OGHHzZcF49RfN/Yp7Q37etbDzqok08+Of3mN79JF154YRo5cmS+7qijjkqbbLJJ+tvf/pbau89//vPprrvuypXhf//73+nFF19MZ599dmqvHn300fTjH/84HXnkkaUeZ7/99kvvvvtuDlJt5bLLLsuVgL333vsj3T9eV5RpUfnud7+bpk6dmu688860tAWLMWPGpCXdCy+8kIPjNddck1ZfffV8XQSLeO3NVUJjqNTFF1+cljavvfZa+tznPpeOPvroXOmPz/AIZMOGDctDLAcMGFD6OeLzKb4XLrnkkrTPPvuk3/3ud/mzNhpxQlwXvcN33313iz2a9913X9pzzz1T165dG67/7W9/m9Zcc8388/XXX1+6nNCW/u9IBT6ywYMHp6222qrh91GjRuWK26677pq++tWv5ham5ZZbrvTzRIU1htcsu+yyqS316NEjX0IMKyq+tNqrGLYVl7KiJTEubenyyy/P+zxaEz+KqEBUVyLa2qc+9alcaYreti9+8YuL7HlYvOJzIYY0Rgv4G2+8UfP9unXrlpbU3oj4nGyp1zB6GB555JFcMW/a63nKKaekE044oXQZIkREL0Xhk5/8ZDrssMPSlVdemY499tj0rW99K39XXH311WmHHXaY7/4TJkzIvRkRQArxe9w+7vvcc8/lXqn23LvM0kePBSwiUWmLlsPoAYgWpgVViuOLLsY7Nx1/Hz0HMTzp4x//eK4E/OMf/8gViNGjR6ctt9wyd+HHuPn4EvvTn/7UbIXj5z//ee49icputGLusssueY5C4dJLL83ljZa7eI6NNtoo974055e//GXaeOON8+1i2NeIESNq6o4v5g7EEIN99903lzvKEtsoviyj5e5rX/ta6tmzZw4255xzznyPMWfOnHTSSSfleRXx/H369Mlf0HF909t9//vfz48fgSkq+v/v//2/+R6vuTkWt9xySxoyZEh+bfEcsd2jojF37twFvsb4oo8eqh133HG+v8U2in0crzvmrxxwwAHNbrfm5lhEWKll/8Q+jWF4q622Wg6yffv2TQcddNB8t9tpp53S//zP/7Q6BKO63NH7Fts6nju2fQz1qp4/Un2sRqvvBhtskJZffvn05S9/Oe/XeJ7Yhuuss04uV+znGTNmpFo89dRTuXK2yiqr5OM3Any0KFeLyfvRIh/zCeI2MeQrWqNvv/32/PfY7lGuUD1EpRDl3m677fL9onzxvmquJbjW4ypEpTUaHOJ4jqEyX/rSl9L9999f02uu5T0b5Y8hO1GxLN6Pt912W8PfimFf8f8Pf/jD/HMcD8VrL4755uZYxD6P1xl/i8eN/bb//vvnVv7Cq6++mr797W/nYTpRxs022yxdccUVNb2+eNxodPnjH/+YNt9883z/OKZvvPHG+W4bQ7q++c1v5v0fx9RnP/vZ3PJfrRh6FL000eP3sY99LN82hiU2569//Wt+jCh/c0Mp4zUvih7b+IwO//rXv/L/8Z6KQBHHWnMLUESAiM+fGKpV+Mtf/pL3Xcwvi0v0NLd0DEI96LGARSiG2hx//PH5C/Tggw/+SI8RlcpofTvkkEPyF158wcYXZnSvx3CbeNyYyxHhICqVDzzwQP6yLsSXZ1Sgo5ITLVvR6xFd71HJKXpZIixExSAqStFaHpXOww8/PFdwIjgUopISFbioOEfLWwyjiArugw8+mL/waplEHd360Woe8yPiy/3UU0/Nr+lXv/pVrjxHpTUqSz/4wQ/S1ltv3dCSF2WJ8t1zzz15W8RjPP7443mMdISVm2++ueE54nVGmItWvagwRu9RhIVaxLaKimAMkYj/474R4mKbn3XWWa3eN4achC222KLR9VGxjsp0lD2GIkXZb7rpphwuahHbOCqPre2fqOhFRT4qoTFXJsJLVECaq6xFxTm229///vdWh3y888476Qtf+EL6z3/+kw499NDcGh6vMVpZX3rppRx4q8V+i9AbwwEjOMQk9pgLE/s1Kn8x1C5WK/rFL36R928MG2tNlC/GmEdFMV5TBOhrr702D1e54YYb0m677dZwXI4dOzbv92222Sbvq6iEx5CvCFFR9hjeF0EjhqY0FZX42LbRMhzljwpqVGZvvfXWRsdNrcdVlDsqkREqIvjG+yKO72hQmDJlSqOKYnNqec+GeP7YHhEwIkxWN0wUvv71r+f3R7R+xz6P24VimFRTb7/9di579LJGKI1jOQJFhLmowMb9Y6hevJbYl/HcEViuu+66HFAilHzve99LC/LPf/4zfxbE+yHeB/E5F9s8wlHss/DKK6/k7RzHYQwriuAX4SX2VVTGi/1fiPAavRRxbEUIbKlntwim8fm8OBVhLhbJKMQxF59nf/jDH3LYKsRn2xNPPJE/e5q+xyJsxGdjvHcjQMW+LcIj1F0F+Mguv/zyaPKtPPjggy3eplevXpVPf/rTDb9/4QtfyJemDjjggMp6663X8Ptzzz2XH7tnz56VV199tdFtP/zww8qcOXMaXffGG29UevfuXTnooIMarrvzzjvzYxx55JHzPd+8efMafp49e/Z8f995550rG2ywQcPvUYZll1228uUvf7kyd+7chuvPP//8/ByXXXZZpTUnnXRSvt0hhxzS6HWss846lU6dOlVOP/30Rq9lueWWy9uk8Jvf/KbSuXPnyt13393ocS+66KL8uH/5y1/y748++mj+/fDDD290u29961v5+ihH0/0X27rwzjvvzFf2Qw89tLL88stX3nvvvVZf449//OP8eG+99Vaj62+++eZ8/ZlnntnotX/+85/P10c5mm6nas2Vqen+uemmmxZ4LBbuvffefNuJEye2ertTTjmlssIKK1SeeeaZRtcfd9xxlS5dulReeOGFRsfq6quvXnnzzTcbbjdq1Kh8/WabbVb54IMPGq7fe++987G0oO35pS99qbLJJps0ul0ct9ttt12lX79+DdfF4w8ZMqTVxxoxYsR827Wl7fv+++9XBgwYUPniF7/YcN3CHFfDhg3Lr+9f//pXw3UvvvhipUePHpUddtih1XLW+p6N28T74e9///t8t2tanrPOOmu+47wQnznV77PRo0fn2954440tPv+4cePybX7729822mbbbrttZcUVV6zMmjWr1dcYzxn3v+GGGxqumzlzZmWttdZq9Fl51FFH5dtVv+fjvdW3b9/K+uuv3/A59Kc//SnfLt4Pzb1Xmtptt93y7eNzphaxfeJ90JL4W/U2LMoTn4n//e9/876/7bbbKhtuuGH+rHvggQcabjtjxoxKt27d8nui6XssHuPpp59utI1XXXXVygknnNDo+IvjH9oLQ6FgEYtW7zKrQ0VXfdPWxZgXULTGRat1tA5Hq2a0ZkYrbSFadWOIQAwfaqp6KEi0ehVmzpyZWyijpTqGIcTvxcpR0Zobw2Kqxy1Hj0m0zDYdntCS6vHA8TqizFEXilbaQrS2x3jkeP5CtIhGS38s4xrlKy7FPIFiGFixlGrTid1R7lpUz4WJ/RbPES240Woaw3IWtJxr9Cg0XUEmyhTXRy9P9WsvJvovTJla2j/F8sDRyr6g83oULabVQ1uaE9s8XnvcvnqbR49VDA2LYRjVosU5hnoVipb5GPpWPW8kro9jKXpCWhLHdLTIR49HsR/iEts4euaixbu4f7z26CWI6z6K6u0b8xNim8brrn4v1XpcxXaJHsroVYkhYYW11lor93REr1VLQ3QW5j0b4hiIIURtKZ4/ei+b9gZUP39sixiuWL1AQfTKxLaJHo/olVmQGGpY/RzxGRLDrWIIWTG5OZ4neqBiWFsh3lvRwh+t/zEstFr0fNQyl63Y/sW8skUlenziszteawxli+Mqesyi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t9xyy0JtA2hrneKfRRdbgPYklrqMScgLM+yKhROt2dGyHi3T1UvothexPGosExstzSZ6Ug/RwxE9e7EaF7BkMccCliIxNCPOqNvc5HHaRsxdiFWU4izdbb2iVlkxFyHGlcdQHaECgLZmjgUsBWIyYIxhLlrUq+dh0PaiVygu7U0sh2vfA7CoCBawFIhJzjGpL1YOiknW1UuhAgC0BXMsAACA0syxAAAAShMsAACA0gQLAACgtCV+8nYs9xhnrYwzgVpeEQAAahfTsd9666209tprL/CM90t8sIhQ0adPn3oXAwAAOqzp06enddZZZ+kOFtFTUWyMnj171rs4AADQYcyaNSs30hd16qU6WBTDnyJUCBYAALDwaplSYPI2AABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAB07WNx1111p6NCh+RThsTbuzTffPN8pxEePHp3WWmuttNxyy6Udd9wx/fOf/6xbeQEAgHYYLGbPnp0222yzdMEFFzT79zPPPDOdd9556aKLLkp//etf0worrJB23nnn9N577y32sgIAAO30zNuDBw/Ol+ZEb8W4cePSj3/84/S1r30tX3fllVem3r17556NvfbaazGXFgAA6HBzLJ577rn08ssv5+FPhV69eqXPfOYz6b777mvxfnPmzEmzZs1qdAEAAJbgHovWRKgI0UNRLX4v/tacsWPHpjFjxqT2Zv3jflfvItABPH/6kNReOGaphWOWjsYxS0fzfDs6Zjtsj8VHNWrUqDRz5syGy/Tp0+tdJAAAWOK122Cx5ppr5v9feeWVRtfH78XfmtOtW7fUs2fPRhcAAGApDRZ9+/bNAWLy5MkN18V8iVgdatttt61r2QAAgHY0x+Ltt99O06ZNazRh+9FHH02rrLJKWnfdddNRRx2VTj311NSvX78cNE488cR8zothw4bVs9gAAEB7ChYPPfRQGjRoUMPvRx99dP7/gAMOSOPHj0/HHntsPtfFIYcckt588830uc99Lt12222pe/fudSw1AADQroLFwIED8/kqWhJn4z755JPzBQAAaL/a7RwLAACg4xAsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAYMkOFnPnzk0nnnhi6tu3b1puueXSxz/+8XTKKaekSqVS76IBAABVuqZ27IwzzkgXXnhhuuKKK9LGG2+cHnrooTR8+PDUq1evdOSRR9a7eAAAQEcIFvfee2/62te+loYMGZJ/X3/99dOECRPSAw88UO+iAQAAHWUo1HbbbZcmT56cnnnmmfz7Y489lu655540ePDgFu8zZ86cNGvWrEYXAABgKe6xOO6443Iw6N+/f+rSpUuec3HaaaelffbZp8X7jB07No0ZM2axlhMAAJZ27brH4tprr01XXXVVuvrqq9PUqVPzXIuzzz47/9+SUaNGpZkzZzZcpk+fvljLDAAAS6N23WPxwx/+MPda7LXXXvn3TTbZJP373//OvRIHHHBAs/fp1q1bvgAAAItPu+6xeOedd1Lnzo2LGEOi5s2bV7cyAQAAHazHYujQoXlOxbrrrpuXm33kkUfSueeemw466KB6Fw0AAOgoweIXv/hFPkHe4Ycfnl599dW09tprp0MPPTSNHj263kUDAAA6SrDo0aNHGjduXL4AAADtV7ueYwEAAHQMggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAAAs+cHiP//5T9p3333TqquumpZbbrm0ySabpIceeqjexQIAAKp0Te3YG2+8kbbffvs0aNCg9Pvf/z6tvvrq6Z///GdaeeWV6100AACgowSLM844I/Xp0yddfvnlDdf17du3rmUCAAA62FCoSZMmpa222ip985vfTGussUb69Kc/nS6++OJW7zNnzpw0a9asRhcAAGApDhbPPvtsuvDCC1O/fv3SH/7wh3TYYYelI488Ml1xxRUt3mfs2LGpV69eDZfo8QAAAJbiYDFv3ry0xRZbpJ/+9Ke5t+KQQw5JBx98cLroootavM+oUaPSzJkzGy7Tp09frGUGAIClUbsOFmuttVbaaKONGl33qU99Kr3wwgst3qdbt26pZ8+ejS4AAMBSHCxiRainn3660XXPPPNMWm+99epWJgAAoIMFi+9///vp/vvvz0Ohpk2blq6++ur061//Oo0YMaLeRQMAADpKsNh6663TTTfdlCZMmJAGDBiQTjnllDRu3Li0zz771LtoAABARzmPRdh1113zBQAAaL/adY8FAADQMQgWAABAaYIFAABQn2AxderU9Pjjjzf8fsstt6Rhw4al448/Pr3//vvlSwUAACz5weLQQw/N55MIzz77bNprr73S8ssvn6677rp07LHHtnUZAQCAJTFYRKjYfPPN888RJnbYYYd8jonx48enG264oa3LCAAALInBolKppHnz5uWf77jjjvSVr3wl/9ynT5/02muvtW0JAQCAJTNYbLXVVunUU09Nv/nNb9KUKVPSkCFD8vXPPfdc6t27d1uXEQAAWBKDRZz9OiZwH3HEEemEE05IG264Yb7++uuvT9ttt11blxEAAFgSz7y96aabNloVqnDWWWelLl26tEW5AACAJT1YtKR79+5t+XAAAMCSHCzmzp2bfvazn6Vrr702vfDCC/Odu2LGjBltVT4AAGBJnWMxZsyYdO6556Y999wzzZw5Mx199NHp61//eurcuXP6yU9+0valBAAAlrxgcdVVV6WLL744HXPMMalr165p7733TpdcckkaPXp0uv/++9u+lAAAwJIXLF5++eW0ySab5J9XXHHF3GsRdt111/S73/2ubUsIAAAsmcFinXXWSS+99FL++eMf/3j64x//mH9+8MEHU7du3dq2hAAAwJIZLHbbbbc0efLk/PPIkSPTiSeemPr165f233//dNBBB7V1GQEAgCVxVajTTz+94eeYwL3uuuum++67L4eLoUOHtmX5AACApeU8Fttuu22+AAAAS6eag8WkSZPS4MGD0zLLLJN/bs1Xv/rVtigbAACwpAWLYcOG5dWg1lhjjfxzSzp16pRPoAcAACw9ag4W8+bNa/ZnAACAhZ5jEaFi/Pjx6cYbb0zPP/987qHYYIMN0u67757222+//DsAALB0WajlZiuVSp4/8Z3vfCf95z//ySfJ23jjjXPAOPDAA/MytAAAwNJnoXosoqfirrvuyuewGDRoUKO/3XnnnXnuxZVXXpnPZwEAACw9FqrHYsKECen444+fL1SEL37xi+m4445LV111VVuWDwAAWNKCxd/+9re0yy67tPj3WI72sccea4tyAQAAS2qwmDFjRurdu3eLf4+/vfHGG21RLgAAYEkNFnF+iq5dW56W0aVLl/Thhx+2RbkAAIAldfJ2rAoVqz9169at2b/PmTOnrcoFAAAsqcHigAMOWOBtrAgFAABLn4UKFpdffvmiKwkAALB0zLEAAABojmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAAAsXcHi9NNPT506dUpHHXVUvYsCAAB0xGDx4IMPpl/96ldp0003rXdRAACAjhgs3n777bTPPvukiy++OK288sr1Lg4AANARg8WIESPSkCFD0o477ljvogAAAM3omtq5a665Jk2dOjUPharFnDlz8qUwa9asRVg6AACg3fdYTJ8+PX3ve99LV111VerevXtN9xk7dmzq1atXw6VPnz6LvJwAALC0a9fB4uGHH06vvvpq2mKLLVLXrl3zZcqUKem8887LP8+dO3e++4waNSrNnDmz4RLhBAAAWIqHQn3pS19Kjz/+eKPrhg8fnvr3759+9KMfpS5dusx3n27duuULAACw+LTrYNGjR480YMCARtetsMIKadVVV53vegAAoH7a9VAoAACgY2jXPRbN+fOf/1zvIgAAAE3osQAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAGDJDhZjx45NW2+9derRo0daY4010rBhw9LTTz9d72IBAAAdKVhMmTIljRgxIt1///3p9ttvTx988EH68pe/nGbPnl3vogEAAFW6pnbstttua/T7+PHjc8/Fww8/nHbYYYe6lQsAAOhAPRZNzZw5M/+/yiqr1LsoAABAR+mxqDZv3rx01FFHpe233z4NGDCgxdvNmTMnXwqzZs1aTCUEAIClV4fpsYi5Fk888US65pprFjjhu1evXg2XPn36LLYyAgDA0qpDBIsjjjgi3XrrrelPf/pTWmeddVq97ahRo/KQqeIyffr0xVZOAABYWrXroVCVSiWNHDky3XTTTenPf/5z6tu37wLv061bt3wBAAAWn67tffjT1VdfnW655ZZ8LouXX345Xx9DnJZbbrl6Fw8AAOgIQ6EuvPDCPJxp4MCBaa211mq4TJw4sd5FAwAAOtJQKAAAoP1r1z0WAABAxyBYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAwNIRLC644IK0/vrrp+7du6fPfOYz6YEHHqh3kQAAgI4ULCZOnJiOPvrodNJJJ6WpU6emzTbbLO28887p1VdfrXfRAACAjhIszj333HTwwQen4cOHp4022ihddNFFafnll0+XXXZZvYsGAAB0hGDx/vvvp4cffjjtuOOODdd17tw5/37ffffVtWwAAMD/6Zrasddeey3NnTs39e7du9H18ftTTz3V7H3mzJmTL4WZM2fm/2fNmpXqad6cd+r6/HQM9T5OqzlmqYVjlo7GMUtHM6vOx2zx/JVKpWMHi49i7NixacyYMfNd36dPn7qUBxZGr3H1LgEsHMcsHY1jlo6mVzs5Zt96663Uq1evjhssVltttdSlS5f0yiuvNLo+fl9zzTWbvc+oUaPyZO/CvHnz0owZM9Kqq66aOnXqtMjLTO3pN8Le9OnTU8+ePetdHFggxywdjWOWjsYx2z5FT0WEirXXXnuBt23XwWLZZZdNW265ZZo8eXIaNmxYQ1CI34844ohm79OtW7d8qbbSSistlvKy8OKDw4cHHYljlo7GMUtH45htfxbUU9EhgkWI3ocDDjggbbXVVmmbbbZJ48aNS7Nnz86rRAEAAO1Duw8We+65Z/rvf/+bRo8enV5++eW0+eabp9tuu22+Cd0AAED9tPtgEWLYU0tDn+iYYrhanPSw6bA1aK8cs3Q0jlk6Gsdsx9epUsvaUQAAAB31BHkAAEDHIFgAAAClCRYAAEBpggWL3X333ZdPfDhkyJB6FwUW6MADD8wn1ywucbLNXXbZJf3tb3+rd9GgRbGK4siRI9MGG2yQJ8LGSceGDh2azwMF7f1ztrjEZy0di2DBYnfppZfmL7y77rorvfjii/UuDixQfLm99NJL+RIVs65du6Zdd9213sWCZj3//PP55LJ33nlnOuuss9Ljjz+el2kfNGhQGjFiRL2LBwv8nC0uEyZMqHexWBKXm2XJ8fbbb6eJEyemhx56KLeojR8/Ph1//PH1Lha0Klp811xzzfxz/H/cccelz3/+8/kcO6uvvnq9iweNHH744bm194EHHkgrrLBCw/Ubb7xxOuigg+paNqjlc5aOS48Fi9W1116b+vfvnz75yU+mfffdN1122WXJisd0tHD829/+Nm244YZ5WBS0JzNmzMi9E9EzUR0qCiuttFJdygUsHQQLFvswqAgURbfnzJkz05QpU+pdLGjVrbfemlZcccV86dGjR5o0aVLueevc2Uco7cu0adNyY0004EBH/ZwtLj/96U/rXSwWkqFQLDZPP/107pq/6aab8u8xTn3PPffMYWPgwIH1Lh60KMamX3jhhfnnN954I/3yl79MgwcPzsfzeuutV+/iQQM9wCwJn7OFVVZZpW7l4aMRLFhsIkB8+OGHae211270JRjjKs8///zUq1evupYPWhJDSmLoU+GSSy7Jx+vFF1+cTj311LqWDar169cvz6946qmn6l0UKPU5S8ekH5/FIgLFlVdemc4555z06KOPNlwee+yxHDSs/EBHEhW3GAb17rvv1rsoMF8L784775wuuOCCNHv27Pn+/uabb9alXMDSQY8Fi23sZAwh+fa3vz1fz8Tuu++eezO++93v1q180Jo5c+bkVcxCHMfRwxaTuOO8ANDeRKjYfvvt0zbbbJNOPvnktOmmm+bGndtvvz0PNXnyySfrXURo9XO2EEOmV1tttbqViYUnWLBYRHDYcccdmx3uFMHizDPPzCcciy9AaG9ilZ211lor/xyTt2Ni7HXXXWduEO1SnBRv6tSp6bTTTkvHHHNMPh9ALIsc57ZoOoYd2uPnbCFWkDSsr2PpVDHTCwAAKMkcCwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQKAhfLyyy+nkSNHpg022CB169Yt9enTJw0dOjRNnjw5/71Tp07p5ptvnu9+Bx54YBo2bFjD7wMHDsy3jUv37t3TJz7xiTR27NhUqVTS+++/n1ZbbbV0+umnN1uGU045JfXu3Tt98MEHDdf1798/lyfKB8DiJ1gAULPnn38+bbnllunOO+9MZ511Vnr88cfTbbfdlgYNGpRGjBix0I938MEHp5deeik9/fTTadSoUWn06NHpoosuSssuu2zad9990+WXXz7ffSJ4jB8/Pu2///5pmWWWydfdc8896d13303f+MY30hVXXNEmrxWAhSNYAFCzww8/PPcwPPDAA2n33XfPvQwbb7xxOvroo9P999+/0I+3/PLLpzXXXDOtt956afjw4WnTTTdNt99+e/7bt7/97fTMM8/k0FBtypQp6dlnn81/L1x66aXpW9/6Vtpvv/3SZZdd1gavFICFJVgAUJMZM2bk3onomVhhhRXm+/tKK630kR87eiHuvvvu9NRTT+XeirDJJpukrbfeer6gEL0Y2223XR76FN5666103XXX5R6OnXbaKc2cOTM/FgCLl2ABQE2mTZuWA0BRoW8Lv/zlL9OKK66Y50bssMMOad68eenII49s+Hv0SkRoePvttxtCxPXXX58OOuighttcc801qV+/frnnpEuXLmmvvfbKPRgALF6CBQA1iVDR1vbZZ5/06KOPpr/85S9p8ODB6YQTTsi9EYW99947zZ07N1177bX594kTJ6bOnTunPffcs+E20aMRvRWF+DnCSIQQABYfwQKAmkSvQMyviOFKrenRo0cejtTUm2++mXr16tXouvh9ww03zEOeIjycf/756Y477mj4e8+ePfOE7GISd/y/xx575F6O8I9//CPP7Tj22GNT165d8+Wzn/1seuedd3JPBgCLj2ABQE1WWWWVtPPOO6cLLrggzZ49u9ngED75yU+mhx9+uNHfotfhsccey5O9WxJh4Xvf+176wQ9+0Kh3JIZDxQTuW2+9Nd17773zTdqOIVTx2NHzUVxiMrnhUACLV6fKoujbBmCJFKsxbb/99jlknHzyyXkVpw8//DCv5HThhRemJ598Mk2YMCFX/s8+++w8mTpCyC9+8Yt0ww035GVl4/wTxXksNt988zRu3LhGE8TXWWeddOWVV+aeihBfUxFIXn/99XzfeI4Q57D42Mc+lsvx3e9+t1E54zYbbbRReuKJJ/LcCwAWPT0WANQsToo3derUfN6KY445Jg0YMCCHhzg5XgSLYl7EJZdckuc+xDkvdtlll3zSurvuuqshVLQkAkucn+InP/lJnsgdYvhVTNZ+4403Gk3anjRpUg4bu+2223yP86lPfSpf9FoALD56LAAAgNL0WAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAKSy/j91tvbGc5klHwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPY5JREFUeJzt3QucTfXex/HfuIfMhIRMcit3Pakkl4hIKpXuCiUdJR2XLnROF1KkjkslCqXO6UKFSkVRkaJCRC4hDhUpzIz7dT+v7/95rf3s2XMx25qZvWfm8369FrPXWnut/1p7rb3/v/9txQUCgYABAAAAgA+F/LwZAAAAAITAAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAxatGiRTZ48GD766+/op2UmLd582Z7/PHHbcWKFdFOCpCr3n33XXv22Wft2LFj0U4KABBYALFo27ZtdvXVV1uhQoWsfPny0U5OTDt8+LDdcMMN9uOPP1q9evWy9J7u3bvbmWeemWpeXFycC05y0qZNm9x+Jk+enKP7yYv0eehzQdb99NNP1qVLFzvttNPcd0VGvvzyS3fd6X8AyEkEFkAOUMZRP+QlSpSw3377Lc3yVq1aWf369dN979GjR+3mm2+2q666yh555JFcSG3e9uCDD1rhwoXtjTfeyDRzhaxZtWqVC7AUBCF2qYaiR48e1rVrV7vtttvcvBdffJGgNR0bNmywv/3tb1a9enX3nVymTBlr1qyZjRkzxvbv3x9cT9/Z9957b4Y1Q+HBmQJhzfOm4sWL21lnnWWPPvqoHThwwK2zdOlSt+yf//xnhulbt26dW6d///5pvts0/8Ybb8yGswDkjiK5tB+gQDp48KANHz7cnn/++Sy/Z+3atdaxY0fr169fjqYtP0hKSrJTTjnFPvjgAzvppJN8bUsZjCJF+EpUYKEmeAp+w2t1EDuUKVbmNfS7RYGFajjDa35atmzpru9ixYpZQfPRRx/Z9ddf7zL9CsJUoHPo0CFbsGCBPfDAA67W5+WXXz7h7Wu7EydOdH8nJyfb+++/b0888YQLZlTYce6551rt2rXtrbfesqFDh6a7jTfffNP9f+uttwbnBQIB9x7dgx9++KHt3r3bTj755BNOJ5BbKN4DctA555xjEyZMsN9//z3L76lbt67df//9rhQ+FktJvZK4WJCQkOBKB8uVK+d7WyrJJLCIjDI/oSW+yHl79+51/6vgYdmyZe66PR7V5Gm9/Fij552P9GzcuNFuuukmq1q1qguYFYz17NnTevfu7TLtmpfV5pMZ0XeGAgJN2u7s2bPtwgsvdNv/448/3DpqrvbLL7+4fnPp0boKPhSEeFQz8uuvv9orr7xiR44csWnTpvlKJ5Bb8t+3DBBDHn74Yde0SbUWJ9r2Prztv/7WvJ9//tn9mMXHx9upp57qmk0po7dlyxbr1KmTq+6vWLGi/etf/0q3JuWxxx6zmjVruhK3xMREV+2u+eH7VtMAlbzpB1jrzpo1yy374YcfrEOHDm4/pUuXtjZt2mT4w5nesarD6dixY13zhJIlS1q7du1c2nUMKvGrUqWKq4XQsezcuTPNdj755BNr0aKFlSpVypXkqZZHpY/hZsyY4UoplbHS/9OnT083Xen1sTjRY/RqU1RyrM9HAVC3bt3cvPSsWbPGrrvuOitbtqxL53nnnedqYbIa7I0ePdp9Pnqv2tur2ceuXbtSraeSzyuuuMKV1F5wwQVuXZ37119/PbiOrj+V7krr1q2DTTy85h/eNpR5Uhr1+bz00ktu2auvvmqXXHKJVahQwV0nCpDHjRuXJr36fFVyq89Xn7v2k97nps9cAXaDBg3cuddnoM9i+fLladZVqb2OX9tTDZbS5pUCZybS++Cdd95xx6Xjbtq0aXCwAJ0DbUPnVDU9WW1GpmaSas5UuXJlt/9q1arZ3Xff7UrUvc9D+543b57dc8897tzqvIUu8/alz0bnUet6n5vSklkfi2+//dYuv/xyd850HzVs2NBlvkN9/vnnwftM17Hux9WrVx/32Lx9TpkyxX0P6rtI21ATT93n4XRuGzdu7M6tal303RbejFT3k64F1QYo3brvlWnPyIgRI2zPnj02adIkq1SpUprl+sz+/ve/W3bSMTdv3txd5womxEtjetfkkiVLXC11+HHoO1fXmu6Ptm3butdAXkDxHJCDlFFQ9btqLQYOHOgyENlF7W7r1KnjghZV9yuzpoypMjnK4D399NPux0iZs/PPP981h/AyovpxVwbzrrvucttQBmnUqFEuWFFGPDxjMXXqVJex0g++l4FRZkOZPWXEihYt6varjIwyNk2aNDlu+pU2ZaD69OnjMpHKBKgTttKuTMlDDz1k69evd5lGHYNK7jz//ve/XUa9ffv27jj37dvnMrH6QVcw4DXh+fTTT61z587uB3rYsGG2Y8cOu/3224OZs8z4OUZlKpQB0znu1auXO8cKaJTm9Paj9t6nn366u0aU+dL5Vuf99957z6655ppM06kgQplMHdd9993nSmlfeOEFdx6+/vprl26PzqcCGGVmlRadU2XWlKFTxlzXiLbx3HPPucyg0i3e/6JMkPoAab8q/T377LPdfJ1/bUPXlkpx1XxDmWFdbyrJ9aiGSdeqMoaa1AZdQaWXmfYoU6ZrUYGO7iOV/ur8X3zxxa6k2buXdG8pzTouZRJVo6aO/Mo033LLLRmet0jvg6+++soFe96x6HpSkKVrQ02QdKwK5nQd33HHHe6+yYxqMRXgKdjU/lVirYy02vLreg5ttqRtq/BA5y6jEnoFl7qXlPH+xz/+4eYpyMzIZ5995tKvDLfOmzL+ChhmzpwZzGzPmTPHBXMKQBV0q3ZK96OuV31uWWkq9+STT7rMtu7n7du3u3Qqo6zaFq/5onf96ntK51WftQIcXb+6jhXQeFR6r/te97oKJxRMZkTXoNJ+0UUXWW7ygj0FbKLrV2nQfa3rK7Q22gs2Qq9VBba69wcMGOBe637T+dGgHvqcgJgWAJDtXn311YBur++//z6wYcOGQJEiRQL33XdfcPnFF18cqFevXvD1xo0b3fp6XzjNf+yxx4Kv9bfm3XXXXcF5R44cCVSpUiUQFxcXGD58eHD+rl27AieddFKgW7duwXn//ve/A4UKFQp89dVXqfYzfvx4t92vv/461b617k8//ZRq3auvvjpQrFgxd2ye33//PXDyyScHWrZsmem58Y711FNPDSQlJQXnDxo0yM1v1KhR4PDhw8H5N998s9vXgQMH3Ovdu3cHEhISAj179ky13W3btgXi4+NTzT/nnHMClSpVSrWfTz/91O2natWqmZ5nP8c4Y8YMt70RI0ak+oxatGiR5nNu06ZNoEGDBsHjk2PHjgUuuuiiQK1atTLdjz5Dbe+NN95INX/WrFlp5ut4NW/+/PnBedu3bw8UL148MGDAgOC8d955x633xRdfpNmftw1tP9y+ffvSzGvfvn2gevXqqfanc9qxY0d3jJ6HH37YbTf0OtX5OHr0aJprR+kdMmRIcF6nTp1S3UtZFel9oP1q/56XXnrJza9YsWIgJSUlzXUcum56unbt6vav74hw3rnxvkeaN2/urp9Q3rLQ/eg86LslnD7L0M9U26pWrZr7PPUdkd6+vfunQoUKgR07dgTnLV++3KVb6c+Mt8/TTz891fmZOnWqmz9mzBj3+tChQ24f9evXD+zfvz+43syZM916jz76aHCerg/NGzhwYOB4kpOT3bq6PrJK6/fu3TvdZendF0pPqVKlAn/++aeb1q9fH3j22Wfd97COJ/Rcjh071r1/9uzZwXm6vnV+mjZtmmpf7777rlt33bp17rXOX4kSJQKjRo3K8rEA0UJTKCCHqcRMo7aog+DWrVuzbbt33nln8G+VgKn5h34bVRrtUUmfSpS9KnmvyYFKZ1VCqmdkeJNqCuSLL75ItR+VEKvE36OmXaoJUIm6js2jkk+VuqkEOCUl5bjpV0m0mgl5vBoANYEI7eug+SrN9ppFqKRVpbwqxQtNv86B1vXSr3OtUlGVzIfu59JLL011POnxe4wff/yxOwY1a/EofSpRDqWaGpVsq6ZGnTO9Y1HNikplNVpMeqOKhX6WOjYdU+i5UA2ESq7DP0sdt2phPCoFD78+jkelr0pbuNDO8+rEqnTo2tG29dorAfdqqVSK7enbt2+a7alpkNcnQJ+HzomOSelVaXnoNa626N9//71FItL7QM3gQkvovetVNWKhnWq9+ZmdU9WWqEbkyiuvdPdtuNBzI6oZys4+V6oFUM2WzntobUDovr37RzVaqgn1qLmUrjdd41mhGtvQ86OaJd1H3vsXL17sajJUKxPaX0RNG/XZqDY2XOh9lRHv/szpDs+qQdJ9pElNq1S7qhoddeIO/RxVw6zaw9DmUKr51P2dXjMoXRfanncMOh80h0JeQGAB5AINNagq/OP1tYjEGWeckeq1Mpj6YQ5/7oXmh7a3V2ZVzW+8H0Nv0jCJoh/58IxkqD///NM11fCawIRSRk2ZpvTaUGcl/aJ27unN945B6RdlAMOPQcGAl/7//ve/7v9atWql2Xd6ac/OY9S+lXlSRjiz/appkoJB9Y8JPxa1/U/v8wilc6FMu9reh79fbcvD3xt+zr3mGuH9MTITfj141GxFTVy8tvhKg5pTiRdYZPSZaF2v2YhH51jNRrSuggxd11pPzZy87Yma2Og8q1mR1lVTJaXleCK9D070es3o+lLGN6Mhp7N6zk+U+ihIZvv3PquM7gEFYZl1nPaEf9bKbCvD7DUXymw/Ciy85R4F7FlpyqgmjKKAPTuFB336zlVhhyb1M9K50bUTPkqdBphQQK4mkd4AGAoydDwqWPCo0ERBl4JyfT94k4IVBWFqpgfEMvpYALlApd4qiVethdrRH+/HyqOS2oykV4KZUanm/9Xy/3+GTR1iR44cme664Rklv8O4ZiSjtB7vGLwnDKufRXrtjfPSyE7esaiUM71aAPFKLTN6v4KKjEoylVGO9Po4nvSuB2VUVaKvjKCuK11D6iOgDJKCgxN5KvRTTz3lAi71V1BnfpWaqwZDpeyh21NGTv0+1DdAAwuobbr6PKg/gobNzUik98GJXq/ZIafuwbwotCbreIGF+uGsXLkyom1nNMqZChokfBQuff4KqD26j3UfqA9S+AAM+g3QdapJ/Xt0rap/Ueh9qpo09bHQoBvpDbyhez2z6xqItrzzCwzkg1qL//znP66zcTivtDZ81KDw0rrsUKNGDTeyjjKCGQU0mdGPoDpMKjOX3uhG+tEPz5Rld/pFGerQH/RwGmIytIYjVHppz85j1L7nzp3rag1Cay3Ct+c1s1ITicyOJbNzoeZFKs3MrszniVwT6iSrzJAyUqEl++HNiUI/k9AmZirBDy/hVydmjYijEX1C6R4Jr5VTLYmammhSU6trr73WdRoeNGhQhsOx+r0P/ND1pYxvJJnerMjqcXj3kPaf0XXnfVYZ3QP6DHTejyf8/lPApRJ4NakK34/XDM2jed7yE6HO6SrMWbhwoRvF63i0r4y+G7z5x0uPaio1FLAy/xpBTkPPehRMqFmTaip0z+uaT68ZlGqSvBrLUBq8QO8lsEAsoykUkEv0Y64SK/04aHSPUMpk6Id6/vz5qear5DW7qdpd7Xo1mk44ldYdr3mDSuhUyqY2xKHDamokF/3oabQWrxlCTlCJoLavEu3Dhw+nWa5MqvcDr+eIvPbaa6mazqjJgkYVyslj1GhHavoWOtyqap/CH5So4EijTOmaSK//jXcsmX2W2q5K9MNp/xkNb5sZL7MYyXu9UvvQUnqdczUNCaVMrDJUOg+h62qkoPS2GV7qr9Lc8D4n6nsRSjUl6kui96Z3fWTXfeCHAlP131FApuYt2VXboc8uK5+bnpeg5lU67+Hre/sOvX9C11EwoiaHusazQsMZhzZHUsCoa12jTYn6Eug+GD9+fKphfjWctEapUt+CE6URu3RO1B/Ne6ZEeE1b6PC6OiYFAxoCNpSOXxl+nY+sjMqkPkQqmAhv+qrgX6O8qSZP3w1Km0aP86h5pX4DdG2qL0r4pJGhFJRpxDMgVlFjAeQiDQOpJjwq/Qp/MJN+/PRDpP/1Y6sfmJxoT6uO5Br2UMOgqkRZpd3KnKoUUvO9ZxRkRsOFKoOuDLY6Xar5kTLHyhhouM2cpAy9fpR1HMog6QFYKgHevHmz6+ip49Fwq6KhK5UxUTrVpEadpb1nHqg2IaeOUZ1ylQ41e1NgooyuHnAVGuB49CwP7UPNctRJVyX5ygSplFWdktN7boNH7bDV5ELHqY62CoaUcVcpsTLhyjQpQxIJZZ6UqVfNmtKr5iHe8ykyov0qQ6/jVnp0bpVh13tCAyZ9Tmr25Q3VqoycOhIrExleC6HlQ4YMcZkpDdWpoWCVuQut6fD2rcyezreGV1VmVJ+/PvfMOu5mx33ghwJjZdD1GXrD3epc6XPT4ADhnaqzQp32dW/o2lUTOp3/8FoAL7DRevq89HnrHCuQ0LGr34mOXZ555hkXAKi0X4NCeMPNqh9J+DNfMqImbLq+tQ9d1wpmlDZd66LrVdealutcaFAGb7hZdZZX6b+fwhwVBHhDc4c+efubb75x5zr0KeW6XzVPwy7rOlaTJg0LrOFw9dmEB8oZUX8KHY8KhnQ9hg7XrMIlBVs6x6qtCK31UVoV2KlmIz26X/Q9pPsgK0N6A1ERtfGogAIy3Gw4b8jE8CEyNVxnjx493JCpGtL0hhtucMNzZjTcrIY3DN+uhj4MFz60rTfE49NPP+3maxjNU045JdC4cePA4MGD3TCNWRl+cenSpW440dKlSwdKliwZaN26deCbb7457rnxhpt95pln0h2eUsM6ZuVcan3tX+dLQzHWqFEj0L1798DixYtTrffee+8F6tSp446zbt26gWnTprlzdbzhZv0co2iIzttuuy1QpkwZl0b9/cMPP6Q7rLCGtNXwnRq6tGjRom4IyiuuuMINO5kVL7/8svv8NLSwrh0NX/vggw+64XE9Ol4N85re9RE+ROmECRPcMLGFCxdONcRmRtuQDz74INCwYUP3WZx55pnu+nrllVfSDImqITZ1nWkYYKW3VatWgZUrV7pthw83q2FwvfWaNWsWWLhwYZr0athXDf9brlw59xnrOnjggQdSXccZ8XMfRHodp+e///2v+9w19LL2r3Ou/Rw8ePC43yPpDTerIZf1+ega0DLvPIUPN+tZsGBB4NJLL3Xr67tDn9/zzz+fap05c+a4c6/PQNfylVdeGVi1atVxj83b51tvveWG4NWQstqG0qfjDjdlypTA//zP/7jzULZs2UCXLl0Cv/76a5a+447n559/dsNQ67rUcMc6Xh2TjjV0mGfRPu+88053D2qYcKVF9+KiRYvSbDez9Oie1v0Tek17Q/3qmta5+fjjj1Mt0317xhlnZHosul90LkOH5AZiSZz+iU5IAwAA8iM95FJ9ZFQDEGmtGYC8iz4WAAAAAHwjsAAAAADgG4EFAAAAAN/oYwEAAADAN2osAAAAAPhGYAEAAADANwILAAAAAL7l+ydvHzt2zD05U09gjYuLi3ZyAAAAgDxD3bF3795tlStXtkKFChXswEJBRWJiYrSTAQAAAORZW7ZssSpVqhTswEI1Fd7JKFOmTLSTAwAAAOQZKSkprpDey1MX6MDCa/6koILAAgAAAIhcVroU0HkbAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMA3AgsAAAAAvhFYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAADgWxH/m0BWnDnwo2gnAXnApuEdo50EAACAE0KNBQAAAADfCCwAAAAA5O3AYty4cdawYUMrU6aMm5o2bWqffPJJcHmrVq0sLi4u1dSrV69oJhkAAABArPWxqFKlig0fPtxq1aplgUDAXnvtNevUqZP98MMPVq9ePbdOz549bciQIcH3lCxZMoopBgAAABBzgcWVV16Z6vWTTz7pajEWLVoUDCwUSFSsWDFKKQQAAACQp/pYHD161N5++23bu3evaxLleeONN6x8+fJWv359GzRokO3bty/T7Rw8eNBSUlJSTQAAAADy+XCzK1ascIHEgQMHrHTp0jZ9+nSrW7euW3bLLbdY1apVrXLlyvbjjz/aQw89ZGvXrrVp06ZluL1hw4bZ4MGDc/EIAAAAAMQF1Lkhig4dOmSbN2+25ORke/fdd23ixIk2b968YHAR6vPPP7c2bdrY+vXrrUaNGhnWWGjyqMYiMTHRbV8dxKOF51ggK3iOBQAAiCXKS8fHx2cpLx31GotixYpZzZo13d+NGze277//3saMGWMvvfRSmnWbNGni/s8ssChevLibAAAAABTAPhaeY8eOpapxCLVs2TL3f6VKlXI5VQAAAABitsZCnbE7dOhgZ5xxhu3evdvefPNN+/LLL2327Nm2YcMG9/ryyy+3cuXKuT4W/fr1s5YtW7pnXwAAAACIHVENLLZv325du3a1rVu3urZbChgUVFx66aW2ZcsWmzNnjo0ePdqNFKV+Ep07d7Z//vOf0UwyAAAAgFgLLCZNmpThMgUS6sQNAAAAIPbFXB8LAAAAAHkPgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMA3AgsAAAAAvhFYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAADgG4EFAAAAAN8ILAAAAAD4RmABAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAHk7sBg3bpw1bNjQypQp46amTZvaJ598Elx+4MAB6927t5UrV85Kly5tnTt3tj/++COaSQYAAAAQa4FFlSpVbPjw4bZkyRJbvHixXXLJJdapUyf76aef3PJ+/frZhx9+aO+8847NmzfPfv/9d7v22mujmWQAAAAA6YgLBAIBiyFly5a1Z555xq677jo79dRT7c0333R/y5o1a6xOnTq2cOFCu/DCC7O0vZSUFIuPj7fk5GRXKxItZw78KGr7Rt6xaXjHaCcBAADghPLSMdPH4ujRo/b222/b3r17XZMo1WIcPnzY2rZtG1yndu3adsYZZ7jAAgAAAEDsKBLtBKxYscIFEupPoX4U06dPt7p169qyZcusWLFilpCQkGr90047zbZt25bh9g4ePOim0CgLAAAAQM6Keo3F2Wef7YKIb7/91u6++27r1q2brVq16oS3N2zYMFdd402JiYnZml4AAAAAMRhYqFaiZs2a1rhxYxcUNGrUyMaMGWMVK1a0Q4cOWVJSUqr1NSqUlmVk0KBBrg2YN23ZsiUXjgIAAAAo2KIeWIQ7duyYa8qkQKNo0aI2d+7c4LK1a9fa5s2bXdOpjBQvXjw4fK03AQAAAMjHfSxUu9ChQwfXIXv37t1uBKgvv/zSZs+e7Zox9ejRw/r37+9GilKA0KdPHxdUZHVEKAAnjpHMkBWMZAYAiInAYvv27da1a1fbunWrCyT0sDwFFZdeeqlbPmrUKCtUqJB7MJ5qMdq3b28vvvhiNJMMAAAAINYCi0mTJmW6vESJEjZ27Fg3AQAAAIhdMdfHAgAAAEDeQ2ABAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMC3IifypqSkJJs0aZKtXr3ava5Xr57dcccdFh8f7z9FAAAAAPJ/jcXixYutRo0aNmrUKNu5c6ebRo4c6eYtXbo0Z1IJAAAAIH/VWPTr18+uuuoqmzBhghUp8n9vP3LkiN15553Wt29fmz9/fk6kEwAAAEB+CixUYxEaVLiNFCliDz74oJ133nnZnT4AAAAA+bEpVJkyZWzz5s1p5m/ZssVOPvnk7EoXAAAAgPwcWNx4443Wo0cPmzJligsmNL399tuuKdTNN9+cM6kEAAAAkL+aQj377LMWFxdnXbt2dX0rpGjRonb33Xfb8OHDcyKNAAAAAPJbYFGsWDEbM2aMDRs2zDZs2ODmaUSokiVL5kT6AAAAAOTHwCI5OdmOHj1qZcuWtQYNGgTna9hZdeJWHwwAAAAABUvEfSxuuukm16ci3NSpU90yAAAAAAVPxIHFt99+a61bt04zv1WrVm4ZAAAAgIIn4sDi4MGDwU7boQ4fPmz79++PaFvqp3H++ee7YWorVKhgV199ta1duzZNwKLO4qFTr169Ik02AAAAgFgKLC644AJ7+eWX08wfP368NW7cOKJtzZs3z3r37m2LFi2yzz77zAUn7dq1s71796Zar2fPnrZ169bgNGLEiEiTDQAAACCWOm8PHTrU2rZta8uXL7c2bdq4eXPnzrXvv//ePv3004i2NWvWrFSvJ0+e7GoulixZYi1btgzO14hTFStWjDSpAAAAAGK1xqJZs2a2cOFCS0xMdB22P/zwQ6tZs6b9+OOP1qJFC1+J0YhTohGnQr3xxhtWvnx5q1+/vg0aNMj27dvnaz8AAAAAolxjIeecc47L7GenY8eOWd++fV3gogDCc8stt1jVqlWtcuXKLnh56KGHXD+MadOmZdgHRJMnJSUlW9MJAAAA4AQDC2XOvedTHC+jfqLPsVBfi5UrV9qCBQtSzb/rrruCf+u5GZUqVXJNsPRwPj2YL70O4YMHDz6hNAAAAADIwaZQp5xyim3fvt39nZCQ4F6HT978E3HvvffazJkz7YsvvrAqVapkum6TJk3c/+vXr093uZpKqUmVN23ZsuWE0gQAAAAgm2ssPv/882C/B2X+s0sgELA+ffrY9OnT7csvv7Rq1aod9z3Lli1z/6vmIj3Fixd3EwAAAIAYCywuvvji4N/K/Kvjtp4nER4kRFo7oOZPb775pr3//vvuWRbbtm1z8+Pj4+2kk05yzZ20/PLLL7dy5cq5Phb9+vVzI0Y1bNgwon0BAAAAiKFRoRRY/Pnnn2nm79y5M0s1DqHGjRvnmivpIXiqgfCmKVOmuOXFihWzOXPmuGdb1K5d2wYMGGCdO3d2I1EBAAAAyMOjQqlmIry2Qvbs2WMlSpSIeFuZUc2IHqIHAAAAIJ8EFv3793f/K6h45JFH3EPrPEePHrVvv/3WDUMLAAAAoODJcmDxww8/BGsZVqxY4ZopefR3o0aN7P7778+ZVAIAAADI24FFUlKSG0rWGw3q9ttvtzFjxpzw8yoAAAAAFMDA4vnnn3cjNHm1Ea+++mpupAsAAABAfgos/va3v9kNN9xgv/32m40aNcquvfbaTNefNm1adqYPAAAAQH4YbrZChQo2d+7c4EhQagKl50xkNAEAAAAoeLLUebtw4cI2cuRI13F7yJAhduqpp7rmUQAAAAAQ8QPyFFjUrFnTfv31V84eAAAAgBMLLAoVKmS1atWyHTt2RPI2AAAAAPlcRIGFDB8+3B544AFbuXJlzqQIAAAAQP59QJ6na9eutm/fPvdAPD0YL7yvxc6dO7MzfQAAAADyY2AxevTonEkJAAAAgIITWHTr1i1nUgIAAACg4PSx+Pjjj2327Nlp5n/66af2ySefZFe6AAAAAOTnwGLgwIF29OjRNPOPHTvmlgEAAAAoeCIOLNatW2d169ZNM7927dq2fv367EoXAAAAgPwcWMTHx9svv/ySZr6CilKlSmVXugAAAADk58CiU6dO1rdvX9uwYUOqoGLAgAF21VVXZXf6AAAAAOTHwGLEiBGuZkJNn6pVq+amOnXqWLly5ezZZ5/NmVQCAAAAyF/Dzaop1DfffGOfffaZLV++3D0gr2HDhtayZcucSSEAAACA/BdYSFxcnLVr185NAAAAABBxUygAAAAACEdgAQAAAMA3AgsAAAAAvhFYAAAAAIhO523Zvn27m44dO5ZqvkaIAgAAAFCwRBxYLFmyxLp162arV6+2QCAQHCVKf+v/o0eP5kQ6AQAAAOSnwOKOO+6ws846yyZNmmSnnXaaCyYAAAAAFGwRBxa//PKLvffee1azZs2cSREAAACA/N95u02bNu6J2wAAAABwwjUWEydOdH0sVq5cafXr17eiRYumWn7VVVdleVvDhg2zadOm2Zo1a+ykk06yiy66yJ5++mk7++yzg+scOHDABgwYYG+//bYdPHjQ2rdvby+++KJrhgUAAAAgjwYWCxcutK+//to++eSTNMsi7bw9b9486927t51//vl25MgRe/jhh61du3a2atUqK1WqlFunX79+9tFHH9k777xj8fHxdu+999q1117r0gAAAAAgjwYWffr0sVtvvdUeeeQR37UGs2bNSvV68uTJVqFCBTfyVMuWLS05Odl1En/zzTftkksuceu8+uqrVqdOHVu0aJFdeOGFvvYPAAAAIEp9LHbs2OFqEXKiKZICCSlbtqz7XwHG4cOHrW3btsF1ateubWeccYarOUmPmkulpKSkmgAAAADEWGChZkhffPFFtidED9rr27evNWvWzPXdkG3btlmxYsUsISEh1boKarQso34bajLlTYmJidmeVgAAAAA+m0LpGRaDBg2yBQsWWIMGDdJ03r7vvvvsRKivhTqEa7t+KG39+/cPvlaNBcEFAAAAEIOjQpUuXdp1vNYU3nn7RAILdcieOXOmzZ8/36pUqRKcX7FiRTt06JAlJSWlqrX4448/3LL0FC9e3E0AAAAAYjiw2LhxY7btPBAIuM7g06dPty+//NKqVauWannjxo1djcjcuXOtc+fObt7atWtt8+bN1rRp02xLBwAAAIBcDiw8qklQkFGjRg0rUqTICTd/0ohP77//vp188snBfhPqG6HnWuj/Hj16uKZN6tBdpkwZF4goqGBEKAAAACAPd97et2+fy+yXLFnS6tWr52oPRBn+4cOHR7StcePGuZGgWrVqZZUqVQpOU6ZMCa4zatQou+KKK1yNhYagVRMoPVQPAAAAQB4OLNQ5evny5a7pUokSJYLzNSRsaECQ1aZQ6U3du3cPrqN9jB071nbu3Gl79+51QUVG/SsAAAAAREfEbZhmzJjhAgg1RVJnbY9qLzZs2JDd6QMAAACQH2ss/vzzT/d07HCqTQgNNAAAAAAUHBEHFuedd5599NFHwddeMKFhaBmpCQAAACiYIm4K9dRTT1mHDh1s1apVduTIERszZoz7+5tvvknzXAsAAAAABUPENRbNmze3ZcuWuaBCT97+9NNPXdOohQsXuudOAAAAACh4TugBFHp2xYQJE7I/NQAAAAAKRo0FAAAAAIQjsAAAAADgG4EFAAAAAN8ILAAAAABEP7BISUlxT+NevXq1/9QAAAAAKBiBxQ033GAvvPCC+3v//v3ugXma17BhQ3vvvfdyIo0AAAAA8ltgMX/+fGvRooX7e/r06RYIBCwpKcmee+45Gzp0aE6kEQAAAEB+CyySk5OtbNmy7u9Zs2ZZ586drWTJktaxY0dbt25dTqQRAAAAQH4LLBITE91Ttvfu3esCi3bt2rn5u3btshIlSuREGgEAAADktydv9+3b17p06WKlS5e2qlWrWqtWrYJNpBo0aJATaQQA4LjOHPhRtJOAPGDT8I7RTgKQb0UcWNxzzz3WpEkT27x5s1166aVWqND/VXpUr16dPhYAAABAARVxYCGNGzd2Uyj1sQAAAABQMJ1QYPHrr7/aBx984GotDh06lGrZyJEjsyttAAAAAPJrYDF37ly76qqrXNOnNWvWWP369W3Tpk1u2Nlzzz03Z1IJAAAAIH+NCjVo0CC7//77bcWKFW4UKD0Ub8uWLXbxxRfb9ddfnzOpBAAAAJC/AovVq1db165d3d9FihRxT9/WCFFDhgyxp59+OifSCAAAACC/BRalSpUK9quoVKmSbdiwIbjsr7/+yt7UAQAAAMiffSwuvPBCW7BggdWpU8cuv/xyGzBggGsWNW3aNLcMAAAAQMETcWChUZ/27Nnj/h48eLD7e8qUKVarVi1GhAIAAAAKqIgDC40GFdosavz48dmdJgAAAAD5vY8FAAAAAJxQjcUpp5xicXFxWVnVdu7cmaX1AAAAABSwwGL06NHBv3fs2GFDhw619u3bW9OmTd28hQsX2uzZs+2RRx7JuZQCAAAAyNtNobp16xacvv76a/fMirfeesvuu+8+N+lvzZs3b15EO58/f75deeWVVrlyZVcjMmPGjFTLu3fv7uaHTpdddllkRwgAAAAg9vpYqGYivcy95s2ZMyeibe3du9caNWpkY8eOzXAdbXfr1q3BSUEMAAAAgDw+KlS5cuXs/fffd8+vCKV5WhaJDh06uCkzxYsXt4oVK0aaTAAAAACxHFjo2RV33nmnffnll9akSRM379tvv7VZs2bZhAkTsj2B2k+FChVcB/JLLrnE9e+INIABAAAAEGOBhfo96Knbzz33nHvatui1nsbtBRrZRc2grr32WqtWrZpt2LDBHn74YVfDoc7ihQsXTvc9Bw8edJMnJSUlW9MEAAAAIBsCC1EA8cYbb1hOu+mmm4J/N2jQwBo2bGg1atRwtRht2rRJ9z3Dhg1ztSoAAAAA8sgD8g4cOOBqBEKnnKSnfpcvX97Wr1+f4TqDBg2y5OTk4LRly5YcTRMAAACAE6ix2Ldvnz344IM2depU90yLcEePHrWc8uuvv7p9VqpUKdPO3poAAAAAxHCNxQMPPGCff/65jRs3zmXgJ06c6Joe6VkUr7/+ekTb2rNnjy1btsxNsnHjRvf35s2b3TLta9GiRbZp0yabO3euderUyWrWrOkezgcAAAAgD9dYfPjhhy6AaNWqld1+++3WokULl9mvWrWq63fRpUuXLG9r8eLF1rp16+Dr/v37u//1ID4FLj/++KO99tprlpSU5AKXdu3a2RNPPEGNBAAAAJDXA4udO3e6vg5SpkwZ91qaN29ud999d0TbUnASCAQyfRgfAAAAgHzYFEpBhZosSe3atV1fC68mIyEhIftTCAAAACD/BRZq/rR8+XL398CBA23s2LFWokQJ69evn+sTAQAAAKDgibgplAIIT9u2bW3NmjW2ZMkS189Cz5kAAAAAUPBEVGNx+PBh92C6devWBeep07aejk1QAQAAABRcEQUWRYsWdSM1AQAAAICvPha33nqrTZo0KdK3AQAAAMjHIu5jceTIEXvllVdszpw51rhxYytVqlSq5SNHjszO9AEAAADIj4HFypUr7dxzz3V///zzzzmRJgAAAAD5PbD44osvciYlAAAAAApOH4s77rjDdu/enWb+3r173TIAAAAABU/EgcVrr71m+/fvTzNf815//fXsShcAAACA/NgUKiUlxQKBgJtUY6GnbXuOHj1qH3/8sVWoUCGn0gkAAAAgPwQWCQkJFhcX56azzjorzXLNHzx4cHanDwAAAEB+CizUaVu1FZdccom99957VrZs2eCyYsWKuSdwV65cOafSCQAAACA/BBYXX3yx+3/jxo2WmJhohQpF3D0DAAAAQD4V8XCzqplISkqy7777zrZv327Hjh1Ltbxr167ZmT4AAAAA+TGw+PDDD61Lly62Z88eK1OmjOtb4dHfBBYAAABAwRNxe6YBAwa451UosFDNxa5du4LTzp07cyaVAAAAAPJXYPHbb7/ZfffdZyVLlsyZFAEAAADI/4FF+/btbfHixTmTGgAAAAAFo49Fx44d7YEHHrBVq1ZZgwYNrGjRoqmWX3XVVdmZPgAAAAD5MbDo2bOn+3/IkCFplqnztp7CDQAAAKBgiTiwCB9eFgAAAAB4yh0AAACA3AssLr/8cktOTg6+Hj58uBtu1rNjxw6rW7eu/xQBAAAAyL9NoWbPnm0HDx4Mvn7qqafshhtusISEBPf6yJEjtnbt2pxJJQAAQD5z5sCPop0E5AGbhne0fFdjEQgEMn0NAAAAoOCijwUAAACA3AssNJSspvB5AAAAAJDlPhZq+tS9e3crXry4e33gwAHr1auXlSpVyr0O7X+RVfPnz7dnnnnGlixZYlu3brXp06fb1VdfnWqfjz32mE2YMMF1FG/WrJmNGzfOatWqFfG+AAAAAMRAjUW3bt2sQoUKFh8f76Zbb73VKleuHHytZV27do1o53v37rVGjRrZ2LFj010+YsQIe+6552z8+PH27bffuiCmffv2LqgBAAAAkAdrLF599dVs33mHDh3clB7VVowePdr++c9/WqdOndy8119/3U477TSbMWOG3XTTTdmeHgAAAAD5rPP2xo0bbdu2bda2bdvgPNWMNGnSxBYuXBjVtAEAAAA4wRqL3KagQlRDEUqvvWXpUV+P0P4eKSkpOZhKAAAAADFdY3Gihg0bFuz3oSkxMTHaSQIAAADyvZgNLCpWrOj+/+OPP1LN12tvWXoGDRpkycnJwWnLli05nlYAAACgoIvZwKJatWougJg7d26qZk0aHapp06YZvk/D4ZYpUybVBAAAACAf97HYs2ePrV+/PlWH7WXLllnZsmXtjDPOsL59+9rQoUPdcysUaDzyyCNuiNvQZ10AAAAAKOCBxeLFi61169bB1/379w8+M2Py5Mn24IMPumdd3HXXXe4Bec2bN7dZs2ZZiRIlophqAAAAADEVWLRq1co9ryIjcXFxNmTIEDcBAAAAiF0x28cCAAAAQN5BYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMA3AgsAAAAAvhFYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAADgG4EFAAAAAN8ILAAAAAD4RmABAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAADyd2Dx+OOPW1xcXKqpdu3a0U4WAAAAgDBFLMbVq1fP5syZE3xdpEjMJxkAAAAocGI+l65AomLFitFOBgAAAIC82hRK1q1bZ5UrV7bq1atbly5dbPPmzZmuf/DgQUtJSUk1AQAAACjAgUWTJk1s8uTJNmvWLBs3bpxt3LjRWrRoYbt3787wPcOGDbP4+PjglJiYmKtpBgAAAAqimA4sOnToYNdff701bNjQ2rdvbx9//LElJSXZ1KlTM3zPoEGDLDk5OTht2bIlV9MMAAAAFEQx38ciVEJCgp111lm2fv36DNcpXry4mwAAAADknpiusQi3Z88e27Bhg1WqVCnaSQEAAACQVwKL+++/3+bNm2ebNm2yb775xq655horXLiw3XzzzdFOGgAAAIC80hTq119/dUHEjh077NRTT7XmzZvbokWL3N8AAAAAYkdMBxZvv/12tJMAAAAAIK83hQIAAACQNxBYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAADgG4EFAAAAAN8ILAAAAAD4RmABAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMA3AgsAAAAAvhFYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAABQMAKLsWPH2plnnmklSpSwJk2a2HfffRftJAEAAADIS4HFlClTrH///vbYY4/Z0qVLrVGjRta+fXvbvn17tJMGAAAAIK8EFiNHjrSePXva7bffbnXr1rXx48dbyZIl7ZVXXol20gAAAADkhcDi0KFDtmTJEmvbtm1wXqFChdzrhQsXRjVtAAAAAP5fEYthf/31lx09etROO+20VPP1es2aNem+5+DBg27yJCcnu/9TUlIsmo4d3BfV/SNviPZ1GoprFlnBNYu8hmsWeU1KlK9Zb/+BQCBvBxYnYtiwYTZ48OA08xMTE6OSHiAS8aOjnQIgMlyzyGu4ZpHXxMfINbt7926Lj4/Pu4FF+fLlrXDhwvbHH3+kmq/XFStWTPc9gwYNcp29PceOHbOdO3dauXLlLC4uLsfTjKxHvwr2tmzZYmXKlIl2coDj4ppFXsM1i7yGazY2qaZCQUXlypWPu25MBxbFihWzxo0b29y5c+3qq68OBgp6fe+996b7nuLFi7spVEJCQq6kF5HTFwdfHshLuGaR13DNIq/hmo09x6upyBOBhaj2oVu3bnbeeefZBRdcYKNHj7a9e/e6UaIAAAAAxIaYDyxuvPFG+/PPP+3RRx+1bdu22TnnnGOzZs1K06EbAAAAQPTEfGAhavaUUdMn5E1qrqaHHoY3WwNiFdcs8hquWeQ1XLN5X1wgK2NHAQAAAEBefUAeAAAAgLyBwAIAAACAbwQWAAAAAHwjsECuW7hwoXvwYceOHaOdFOC4unfv7h6u6U162OZll11mP/74Y7STBmRIoyj26dPHqlev7jrC6qFjV155pXsOFBDr37PepO9a5C0EFsh1kyZNcj948+fPt99//z3ayQGOSz9uW7dudZMyZkWKFLErrrgi2skC0rVp0yb3cNnPP//cnnnmGVuxYoUbpr1169bWu3fvaCcPOO73rDe99dZb0U4W8uNws8g/9uzZY1OmTLHFixe7ErXJkyfbww8/HO1kAZlSiW/FihXd3/p/4MCB1qJFC/eMnVNPPTXayQNSueeee1xp73fffWelSpUKzq9Xr57dcccdUU0bkJXvWeRd1FggV02dOtVq165tZ599tt166632yiuvGCMeI68Fx//5z3+sZs2arlkUEEt27tzpaidUMxEaVHgSEhKiki4ABQOBBXK9GZQCCq/aMzk52ebNmxftZAGZmjlzppUuXdpNJ598sn3wwQeu5q1QIb5CEVvWr1/vCmtUgAPk1e9Zb3rqqaeinSxEiKZQyDVr1651VfPTp093r9VO/cYbb3TBRqtWraKdPCBDaps+btw49/euXbvsxRdftA4dOrjruWrVqtFOHhBEDTDyw/esp2zZslFLD04MgQVyjQKII0eOWOXKlVP9CKpd5QsvvGDx8fFRTR+QETUpUdMnz8SJE931OmHCBBs6dGhU0waEqlWrlutfsWbNmmgnBfD1PYu8iXp85AoFFK+//rr961//smXLlgWn5cuXu0CDkR+QlyjjpmZQ+/fvj3ZSgDQlvO3bt7exY8fa3r170yxPSkqKSroAFAzUWCDX2k6qCUmPHj3S1Ex07tzZ1Wb06tUraukDMnPw4EE3ipnoOlYNmzpx67kAQKxRUNGsWTO74IILbMiQIdawYUNXuPPZZ5+5piarV6+OdhKBTL9nPWoyXb58+ailCZEjsECuUODQtm3bdJs7KbAYMWKEe+CYfgCBWKNRdipVquT+VudtdYx955136BuEmKSH4i1dutSefPJJGzBggHsegIZF1rMtwtuwA7H4PevRCJI068tb4gL09AIAAADgE30sAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQCIyLZt26xPnz5WvXp1K168uCUmJtqVV15pc+fOdcvj4uJsxowZad7XvXt3u/rqq4OvW7Vq5dbVVKJECTvrrLNs2LBhFggE7NChQ1a+fHkbPnx4uml44okn7LTTTrPDhw8H59WuXdulR+kDAOQ+AgsAQJZt2rTJGjdubJ9//rk988wztmLFCps1a5a1bt3aevfuHfH2evbsaVu3brW1a9faoEGD7NFHH7Xx48dbsWLF7NZbb7VXX301zXsUeEyePNm6du1qRYsWdfMWLFhg+/fvt+uuu85ee+21bDlWAEBkCCwAAFl2zz33uBqG7777zjp37uxqGerVq2f9+/e3RYsWRby9kiVLWsWKFa1q1ap2++23W8OGDe2zzz5zy3r06GE///yzCxpCzZs3z3755Re33DNp0iS75ZZb7LbbbrNXXnklG44UABApAgsAQJbs3LnT1U6oZqJUqVJplickJJzwtlUL8dVXX9maNWtcbYU0aNDAzj///DSBgmoxLrroItf0SXbv3m3vvPOOq+G49NJLLTk52W0LAJC7CCwAAFmyfv16FwB4Gfrs8OKLL1rp0qVd34iWLVvasWPH7L777gsuV62EgoY9e/YEg4h3333X7rjjjuA6b7/9ttWqVcvVnBQuXNhuuukmV4MBAMhdBBYAgCxRUJHdunTpYsuWLbOvv/7aOnToYP/4xz9cbYTn5ptvtqNHj9rUqVPd6ylTplihQoXsxhtvDK6jGg3VVnj0t4IRBSEAgNxDYAEAyBLVCqh/hZorZebkk092zZHCJSUlWXx8fKp5el2zZk3X5EnBwwsvvGBz5swJLi9TpozrkO114tb/N9xwg6vlkFWrVrm+HQ8++KAVKVLETRdeeKHt27fP1WQAAHIPgQUAIEvKli1r7du3t7Fjx9revXvTDRzk7LPPtiVLlqRaplqH5cuXu87eGVGw8Pe//93uv//+VLUjag6lDtwzZ860b775Jk2nbTWh0rZV8+FN6kxOcygAyF1xgZyo2wYA5EsajalZs2YuyBgyZIgbxenIkSNuJKdx48bZ6tWr7a233nKZ/2effdZ1plYQ8vzzz9t7773nhpXV8ye851icc845Nnr06FQdxKtUqWKvv/66q6kQ/UwpINmxY4d7r/YheobF6aef7tLRq1evVOnUOnXr1rWVK1e6vhcAgJxHjQUAIMv0ULylS5e651YMGDDA6tev74IHPRxPgYXXL2LixImu74OeeXHZZZe5h9bNnz8/GFRkRAGLnk/x+OOPu47couZX6qy9a9euVJ22P/jgAxdsXHPNNWm2U6dOHTdRawEAuYcaCwAAAAC+UWMBAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgPn1v1A93jKnUnhPAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from datetime import datetime\n", "\n", "hoje = datetime.today().strftime('%Y%m%d') # Exemplo: '20250604'\n", "\n", "# === ETAPA 1: Carrega e prepara os dados ===\n", "df = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\compiladoAcertePedido.xlsx\")\n", "df = df[['MATERIAL', 'SEMANA', 'CURVA']]\n", "df['semana_num'] = df['SEMANA'].str.extract(r'S(\\d+)').astype(int)\n", "df = df.sort_values(['MATERIAL', 'semana_num'])\n", "df['grupo'] = df.groupby('MATERIAL')['semana_num'].diff().ne(1).cumsum()\n", "\n", "# === ETAPA 2: Agrupa dados ===\n", "grupos = df.groupby(['MATERIAL', 'CURVA', 'grupo']).size().reset_index(name='duracao')\n", "resultado = grupos.groupby('MATERIAL')['duracao'].agg(media_duracao='mean', max_duracao='max').reset_index()\n", "media_geral = grupos['duracao'].mean()\n", "print(f\"Média geral de semanas em estado crítico: {media_geral:.2f} ou {round(media_geral * 7)} dias.\")\n", "\n", "# === ETAPA 3: Análise por CURVA ===\n", "media_duracao_por_curva = grupos.groupby('CURVA')['duracao'].mean().reset_index(name='media_duracao_critico')\n", "media_duracao_por_curva['media_duracao_critico'] = round(media_duracao_por_curva['media_duracao_critico']*7).astype('Int64') # semanas → dias\n", "\n", "entradas_por_sku = grupos.groupby(['MATERIAL', 'CURVA']).size().reset_index(name='qtd_entradas')\n", "media_entradas_por_curva = entradas_por_sku.groupby('CURVA')['qtd_entradas'].mean().reset_index(name='media_entradas_critico')\n", "\n", "curva_analise = pd.merge(media_duracao_por_curva, media_entradas_por_curva, on='CURVA')\n", "\n", "# === ETAPA 4: Junta dados finais por SKU (CURVA + qtd_entradas)\n", "resultado_final = pd.merge(resultado, entradas_por_sku, on='MATERIAL')\n", "resultado_final = resultado_final[['MATERIAL', 'CURVA', 'media_duracao', 'max_duracao', 'qtd_entradas']]\n", "\n", "# === ETAPA 5: Exporta para Excel ===\n", "output_path = f\"C:/Users/joao.herculano/GRUPO GINSENG/Assistência Suprimentos - 2025/CRITICOS INDUSTRIA/analise_curva_resultado{hoje}.xlsx\"\n", "with pd.ExcelWriter(output_path, engine='xlsxwriter') as writer:\n", " resultado_final.to_excel(writer, sheet_name='Por SKU', index=False)\n", " curva_analise.to_excel(writer, sheet_name='Por CURVA', index=False)\n", "\n", "print(f\"\\nArquivo Excel salvo com sucesso em:\\n{output_path}\")\n", "\n", "# === ETAPA 6: Gráficos ===\n", "# 1. Duração média por CURVA\n", "plt.figure(figsize=(8, 4))\n", "plt.bar(curva_analise['CURVA'], curva_analise['media_duracao_critico'])\n", "plt.title('Duração média (dias) em estado crítico por CURVA')\n", "plt.xlabel('CURVA')\n", "plt.ylabel('Dias')\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# 2. Entradas médias por CURVA\n", "plt.figure(figsize=(8, 4))\n", "plt.bar(curva_analise['CURVA'], curva_analise['media_entradas_critico'])\n", "plt.title('Número médio de entradas em crítico por CURVA')\n", "plt.xlabel('CURVA')\n", "plt.ylabel('Entradas em crítico')\n", "plt.tight_layout()\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "id": "422c3a16", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.13.2" } }, "nbformat": 4, "nbformat_minor": 5 }