tag:blogger.com,1999:blog-51505140484652227192024-03-09T23:48:11.926-03:00Desenvolvedor Oracle APEXBlog voltado para quem quer conhecer um pouco mais sobre o Oracle Application Express e tecnologias correlatas.Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.comBlogger46125tag:blogger.com,1999:blog-5150514048465222719.post-8090735492917294472023-08-25T20:48:00.002-03:002023-08-25T20:48:31.400-03:00Selecionar primeira linha na Grade interativa não funciona?<p>Olá pessoal,</p><p><br /></p><p>hoje um desenvolvedor precisava que a primeira linha da grade interativa fosse selecionada.</p><p>Ah, é fácil! Basta marcar a propriedade: "<b>Selecionar Primeira Linha</b>" nos atributos da grade interativa, certo?</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjNcbLOdp0-AMAWiXIvolL2v3XNdmviITv_9TbYqx7CdXtjB6n1qjy9_nNqs1lpMunx-zTcscgi_Ja6409OcXU9m_ICF2roCRJTqbiCgTIawpU0lCeIs91LiH6n_eGjGRBMGns4beo_elh-ixdhQb9Y9NWyh21V-pr_Lk7ZhsJhrQ4VjA7VdWCBFMod23TP" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="468" data-original-width="300" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjNcbLOdp0-AMAWiXIvolL2v3XNdmviITv_9TbYqx7CdXtjB6n1qjy9_nNqs1lpMunx-zTcscgi_Ja6409OcXU9m_ICF2roCRJTqbiCgTIawpU0lCeIs91LiH6n_eGjGRBMGns4beo_elh-ixdhQb9Y9NWyh21V-pr_Lk7ZhsJhrQ4VjA7VdWCBFMod23TP" width="154" /></a></div><br /><br /><p></p><p>Não funcionava de jeito nenhum!</p><p>Até que descobri que para que essa propriedade funcione, deve-se definir uma chave primária... :)</p><p>Portanto, não esqueça de definir a chave primária conforme exemplo abaixo.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhgnGYXnuBGGg-1e9ixt8RFT-Z716eEAWlCnRPDxh0NW0IufzWtCVK8ZWJwZG8x4F1kmpcdYwjAHZLKNqGdGTacTM2hXBzx4w7W-COPVYYBnTB5J5p5n5J7gq70PvtDZUbMtYAMgtm4zPJzZZ8vaHIol2R6TJ9onb04UgLXs09weRUFZcWPdENQBruNprcI" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="492" data-original-width="295" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhgnGYXnuBGGg-1e9ixt8RFT-Z716eEAWlCnRPDxh0NW0IufzWtCVK8ZWJwZG8x4F1kmpcdYwjAHZLKNqGdGTacTM2hXBzx4w7W-COPVYYBnTB5J5p5n5J7gq70PvtDZUbMtYAMgtm4zPJzZZ8vaHIol2R6TJ9onb04UgLXs09weRUFZcWPdENQBruNprcI" width="144" /></a></div><br />Até a próxima!<p></p>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-85306905197980071592022-12-06T15:59:00.004-03:002022-12-06T16:45:41.085-03:00Como alinhar os itens com o botão nos formulários<p> Olá pessoal,</p><p>hoje vamos aprender como alinhar os itens com o botão.</p><p>Quando a gente tenta colocar o botão na mesma linha do item, você já se deparou com a situação em que eles ficam desalinhados conforme abaixo? </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgorvF7ezhAXWKh90ijtf3pC8MnSua2ANLpw3KeG_jbowGSVibY6arw5FKn8ZoTPgi1BPLawvGpEonWQyLshbMC5YxWz90iI_ZNSMtWUnDlv5764vJxW29x76YuJ6BeGIJOZYjKOfEZOIddpB8zNhvoOHFvMTVe1xln0doDIMjCHkhQd7CQwEjFkh7tTw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="247" data-original-width="657" height="120" src="https://blogger.googleusercontent.com/img/a/AVvXsEgorvF7ezhAXWKh90ijtf3pC8MnSua2ANLpw3KeG_jbowGSVibY6arw5FKn8ZoTPgi1BPLawvGpEonWQyLshbMC5YxWz90iI_ZNSMtWUnDlv5764vJxW29x76YuJ6BeGIJOZYjKOfEZOIddpB8zNhvoOHFvMTVe1xln0doDIMjCHkhQd7CQwEjFkh7tTw" width="320" /></a></div><p>Para resolver esta situação é bem simples! </p><p>Basta na propriedade "<b>Classes CSS da linha</b>" do primeiro elemento da linha adicionar o seguinte CSS: "u-align-items-center" conforme imagem abaixo.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgLgvY98CFSsq8jad7mj9HeIz4VcvZWlUXn3cidWUZDCrTu1UlVrRwDzd7XTloOBnK8Ub6tQmH6xbtN5sworL_BMCpcqeNmG2K9YR1K4YQJTHQcQoR0MHfENYBAXfrkzuHgh5560aG-8f4pEQ4DUY5XGl1IkEECwr2Fm7nY1ufN4LjZFfhqfKfou9C0gQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="546" data-original-width="479" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEgLgvY98CFSsq8jad7mj9HeIz4VcvZWlUXn3cidWUZDCrTu1UlVrRwDzd7XTloOBnK8Ub6tQmH6xbtN5sworL_BMCpcqeNmG2K9YR1K4YQJTHQcQoR0MHfENYBAXfrkzuHgh5560aG-8f4pEQ4DUY5XGl1IkEECwr2Fm7nY1ufN4LjZFfhqfKfou9C0gQ" width="211" /></a></div><br />Ao executar novamente o aplicativo, agora o botão ficará alinhado ao centro com o item.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj-nhoYgsf3qW5eVD4qDUvwzfTWdWrW5a8gjX5KolPDAOa_JZuY1c9ZyepmVqs55kz-rdF4va91LqgrejUqVbzYW-oU6J_N-C7b_-QdW-mvD97InLOOQcuWhc1v2rXfGdzR_RiwXEy0AXUNxxOq_iJPOoDaV9dQxqjL5RKhL7DQDLF1MDwp2cyY_uq71w" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="242" data-original-width="633" height="122" src="https://blogger.googleusercontent.com/img/a/AVvXsEj-nhoYgsf3qW5eVD4qDUvwzfTWdWrW5a8gjX5KolPDAOa_JZuY1c9ZyepmVqs55kz-rdF4va91LqgrejUqVbzYW-oU6J_N-C7b_-QdW-mvD97InLOOQcuWhc1v2rXfGdzR_RiwXEy0AXUNxxOq_iJPOoDaV9dQxqjL5RKhL7DQDLF1MDwp2cyY_uq71w" width="320" /></a></div><div><br /></div>Atenção: Essa classe só funciona no <b>APEX 22 ou superior</b>.<div><br /></div><div><br /><div><br />Espero que tenha gostado!<p></p><br /><p></p></div></div>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com2tag:blogger.com,1999:blog-5150514048465222719.post-36180103735611812822022-04-12T22:21:00.002-03:002022-04-12T22:21:30.732-03:00Como ativar e consultar o log de atividades no APEX<p> Prezados,</p><p>hoje vamos falar sobre como ativar e consultar o log de atividades no APEX.</p><p>Como tudo no APEX, é muito fácil!</p><p>Você pode ativar o log de atividades do usuário no nível da sua <b>instância </b>do APEX ou da sua <b>aplicação</b>.</p><p>Para ativar o log no nível da <b>instância</b>, acesse com seu login e senha de administrador de instância o ambiente de administração usando a URL: https://seudomíniodoapex/ords<b>/apex_admin </b>ou digitando INTERNAL como o workspace na tela de login do ambiente de desenvolvimento do APEX.</p><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi0AAd-mNaN7cwJr5ki9Pv3JcA3rv2QcTyjDMKOdYeCjcl2IZKwV4W9KXdvsd9OaIfmXfB2lreUe37jVJQgjPom4z7O2bxDz82qIg9rOpOC71SFuKZghb3iYsRxtSB85_R5JvmFIh0ygHfI4kuVXrGBEur-s8VTuQeu0ae7PIoDdkzZrxKaX0HxIoG7OQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="617" data-original-width="1227" height="161" src="https://blogger.googleusercontent.com/img/a/AVvXsEi0AAd-mNaN7cwJr5ki9Pv3JcA3rv2QcTyjDMKOdYeCjcl2IZKwV4W9KXdvsd9OaIfmXfB2lreUe37jVJQgjPom4z7O2bxDz82qIg9rOpOC71SFuKZghb3iYsRxtSB85_R5JvmFIh0ygHfI4kuVXrGBEur-s8VTuQeu0ae7PIoDdkzZrxKaX0HxIoG7OQ" width="320" /></a></div><br /><br /><p></p><p>Após isso, acesse: Gerenciar Instância > Configuração de Recursos e na seção Monitoramento, defina a propriedade "<b>Log de Atividades do Aplicativo</b>" com o valor desejado.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgltC4YvjfSskgBt36R5cBaNbMTAloyRPVs7YBPrd3qKyDHKvOFTfGe245LDRkhPzwHdJN7bHpEwzedByB-y3aHvJfb3tdX0c3WAyCD4rDp_NiPcr7OWrMVL7ON1XmJWkl_LpRhb6e1WDy9xDsSP_dGjDFOsTU85twsG7e_dH9j98kNmFtV-G8Cu8eQAw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="413" data-original-width="728" height="182" src="https://blogger.googleusercontent.com/img/a/AVvXsEgltC4YvjfSskgBt36R5cBaNbMTAloyRPVs7YBPrd3qKyDHKvOFTfGe245LDRkhPzwHdJN7bHpEwzedByB-y3aHvJfb3tdX0c3WAyCD4rDp_NiPcr7OWrMVL7ON1XmJWkl_LpRhb6e1WDy9xDsSP_dGjDFOsTU85twsG7e_dH9j98kNmFtV-G8Cu8eQAw" width="320" /></a></div><br />Por padrão, o APEX deixa que cada aplicativo defina se vai gerar o log de atividades, mas caso queira que todas as aplicações gerem log (o desenvolvedor não consegue desativar a nível de aplicação), você pode definir a propriedade como "<b>Sempre</b>".<p></p><p>Outras opções são definir como "Nunca" gerar log ou para que ao criar uma aplicação, inicialmente a aplicação não gere log a não ser que o desenvolvedor ative o log ("Inicialmente Desativado para Novos Aplicativos").</p><p>Portanto, ao definir a propriedade como "Sempre" ou deixar como padrão ("Usar Definições do Aplicativo"), a sua aplicação poderá gerar log de atividades.</p><p><br /></p><p>Caso no nível de instância seja definido como "Padrão", o desenvolvedor pode ativar a geração de log de atividades no nível da aplicação.</p><p>Obs: O APEX antes chamava de "aplicação", mas as novas versões estão chamando de "aplicativo".</p><p>Para definir no nível da aplicação, o desenvolvedor deve logar no espaço de trabalho, acessar a aplicação no AppBuilder, nos Componentes Compartilhados, acessar "Atributos de Definição do Aplicativo" na seção Propriedades, você pode ativar a opção "<b>Log</b>" (conforme imagem abaixo). </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhGb3_YxXt-XUnpZ_aTa_-H6T42sWGAYbg5Vy_yWU8AILcbbw1yZi76kiKLd2bzVBLw9ZwZyxlm6k-He1PlZhT7QxXI72WU3dVmJg4fYQOSwN-5UJdZ3e7iohF31ICv8pXCj3WvoxMn3ysqf7zkrdHpQXDSUGq42lHiWrGALEPU0FjfsCgAYKauTZNbjA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="862" data-original-width="937" height="368" src="https://blogger.googleusercontent.com/img/a/AVvXsEhGb3_YxXt-XUnpZ_aTa_-H6T42sWGAYbg5Vy_yWU8AILcbbw1yZi76kiKLd2bzVBLw9ZwZyxlm6k-He1PlZhT7QxXI72WU3dVmJg4fYQOSwN-5UJdZ3e7iohF31ICv8pXCj3WvoxMn3ysqf7zkrdHpQXDSUGq42lHiWrGALEPU0FjfsCgAYKauTZNbjA=w400-h368" width="400" /></a></div><br />Isso faz com que os logs de atividades sejam gerados pelo APEX.<p></p><p>E como posso acessar essa informação?</p><p>O log é salvo internamente e fica acessível por meio da view APEX_WORKSPACE_ACTIVITY_LOG quando consultada no esquema APEX correspondente. </p><p>Vamos fazer uma consulta no SQL Workshop de exemplo.</p><p>select * from apex_workspace_activity_log</p><div><br /></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhLMrg0_6Z9Z-sfm-k7COPM8ti_5VXsUGGLML_94X68zMpqW7Cb_lUFi6i4fyTnztiXJrqigN7p97JXP54F2l5S9VhBIiyTeRR5DeA4a26z1a7Qb3iSfZA_v2sjJN14W6paVwlWEC4GUqLSL8DTlqH47ht8L_gfsnBhe3n00Paf49y9uaixegQZIK0A1A" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="909" data-original-width="1915" height="304" src="https://blogger.googleusercontent.com/img/a/AVvXsEhLMrg0_6Z9Z-sfm-k7COPM8ti_5VXsUGGLML_94X68zMpqW7Cb_lUFi6i4fyTnztiXJrqigN7p97JXP54F2l5S9VhBIiyTeRR5DeA4a26z1a7Qb3iSfZA_v2sjJN14W6paVwlWEC4GUqLSL8DTlqH47ht8L_gfsnBhe3n00Paf49y9uaixegQZIK0A1A=w640-h304" width="640" /></a></div><br />O log do APEX registra as <b>visualizações </b>e <b>submissões </b>de página, além de chamadas <b>ajax </b>(normalmente ações dinâmicas) e contém diversas informações interessantes, tais como: workspace, usuário logado, id e nome da aplicação, id e nome da página, data de visualização, tempo de execução, IP, Agent (Browser), Sessão APEX, mensagens de erro etc.<p></p><p>Caso tenha dúvidas do que alguma coluna significa, você pode consultar o comentário de cada coluna usando o dicionário do APEX usando a seguinte consulta:</p><div style="text-align: left;">select * from apex_dictionary <br />where apex_view_name = 'APEX_WORKSPACE_ACTIVITY_LOG'</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjaWMpBvJfUAV8nFZtK5XmVRyA2ZJ_bl3vxosLT8JCiNkSp99wk4TE--0UtyrhO6NJB-GVw7H3RMEykM-LGjRbMAr57GanVqEg1T1cb5a5Y_cPsGFe7jC98hsvM8Nzb1jiUxv_t6W9orv2yj_SWkLzOEn2picCW74hHi45Ninn_oyscVoBB3TFfJuoOpw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="677" data-original-width="1531" height="283" src="https://blogger.googleusercontent.com/img/a/AVvXsEjaWMpBvJfUAV8nFZtK5XmVRyA2ZJ_bl3vxosLT8JCiNkSp99wk4TE--0UtyrhO6NJB-GVw7H3RMEykM-LGjRbMAr57GanVqEg1T1cb5a5Y_cPsGFe7jC98hsvM8Nzb1jiUxv_t6W9orv2yj_SWkLzOEn2picCW74hHi45Ninn_oyscVoBB3TFfJuoOpw" width="640" /></a></div><br />E quais são os pontos negativos desse log de atividades?</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Na minha opinião os principais pontos negativos são:</div><div style="text-align: left;">1) O log é armazenado apenas por duas semanas.</div><div style="text-align: left;">2) Não armazena informações do estado da sessão. Por exemplo, a gente sabe que um usuário acessou uma página de uma aplicação em determinado dia/hora, mas não sabemos que informações estavam nos itens da página.</div><div style="text-align: left;">3) Aplicações com muitos acessos vão gerar logs gigantescos que ocupam muito espaço.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Como minimizar estes pontos negativos?</div><div style="text-align: left;">1) Criar alguma job para armazenar em tabela o log.</div><div style="text-align: left;">2) Criar algum mecanismo para salvar o valor dos itens das páginas críticas em relação a segurança em alguma tabela (Muito cuidado ao fazer isso, pois poderá estar expondo dados sigilosos)</div><div style="text-align: left;">3) Desligar o log em aplicações com muitos acessos caso não seja necessário.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Antes de finalizar, vale lembrar que esse log NÃO salva informações de alterações em tabelas. O melhor mecanismo para isso no Oracle provavelmente será o FDA (Flashback Data Archive).</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Se seu interesse é em log de alterações de tabelas, seguem alguns links interessantes sobre FDA:</div><div style="text-align: left;">Vídeo do Tércio no canal do GUOB (Português): https://youtu.be/TdJTNc28jxk?t=3016</div><div style="text-align: left;">Vídeo do Connor McDonald (inglês): https://youtu.be/FpRAc-FEWbE</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Espero que tenha gostado.</div><div style="text-align: left;">Até a próxima!</div>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-80248363869541062212022-03-23T23:33:00.002-03:002022-03-23T23:35:39.668-03:00Minhas impressões sobre o Oracle APEX no Brasil<p> Olá pessoal,</p><p>como vocês devem saber, o GUOB lançou uma pesquisa sobre o Oracle APEX no Brasil.</p><p>Caso não tenha participado da pesquisa, pode responder no seguinte link (ficará indisponível em breve): <a href="https://docs.google.com/forms/u/2/d/1CrKA9QgQp5MUTtGvk910aKsy0vf-wlcCF25Mux9ZOu4">https://docs.google.com/forms/u/2/d/1CrKA9QgQp5MUTtGvk910aKsy0vf-wlcCF25Mux9ZOu4</a></p><p>A grande vantagem de participar é que ao final você terá acesso ao resultado completo com as respostas consolidadas de todos os participantes.</p><p>De qualquer forma, abaixo faço um compilado das minhas principais impressões sobre o resultado da pesquisa GUOB APEX:</p><p>1) Há uma concentração de uso nas regiões <b>Sul</b>, <b>Sudeste </b>e <b>Centro-oeste</b> (Regiões mais ricas?).</p><p>2) É muito utilizado na <b>iniciativa privada</b>, mas também em <b>instituições públicas</b>.</p><p>3) Para<b> todos os tipos de projeto</b>.</p><p>4) A maioria dos sistemas se<b> inicia em APEX</b> (não de migrações).</p><p>5) Principal fator de uso é a <b>produtividade </b>low code e o <b>aproveitamento de conhecimento</b> existente (PLSQL, banco Oracle etc)</p><p>6) Achei bem interessante o fato de pessoas dizerem que tem<b> poucas vagas de APEX</b> e outros dizerem que <b>está difícil contratar</b>, pois é difícil encontrar profissionais APEX. (Falta alguma ponte esse essas pessoas?)</p><p>7) Praticamente metade trabalha <b>100% home office</b>.</p><p>8) Mais da metade das pessoas começou no APEX<b> há menos de 5 anos</b>.</p><p>9) Há um <b>empate </b>técnico entre Oracle <b>On Premise</b> e Oracle <b>Cloud </b>na hospedagem.</p><p>10) Maioria ainda está usando a <b>versão 20</b>.</p><p>11) A <b>certificação </b>mais obtida é a de <b>SQL</b>.</p><p>12) O <b>YouTube </b>parece ser o canal mais utilizado para aprender.</p><p>13) As pessoas usam muito o "APEX puro" (<b>sem uso de ferramentas</b> acessórias de versionamento do APEX ou versionamento do BD, logging, modelagem, automação de testes, build etc).</p><p>14) Apesar dos problemas, o <b>Jasper Reports</b> é a ferramenta mais utilizada para impressão.</p><p>15) O lugar mais utilizado para dúvidas é a <b>Oracle Communities</b>.</p><p>16) Comunidades mais usadas: <b>Oracle APEX Brasil</b> no Linkedin, <b>GUOB</b>, e <b>apex.world</b>.</p><p><br /></p><p>Se tiver interesse, participei de uma live do GUOB com especialistas em Oracle APEX para debater os resultados da pesquisa. Segue o link: <a href="https://www.youtube.com/watch?v=XD47oi4fUmQ">https://www.youtube.com/watch?v=XD47oi4fUmQ</a></p><p><br /></p><p>Deixe seu comentário se interpretou algo de diferente. </p><p>Não deixe de responder a pesquisa. Você vai ter acesso a resultados bem legais.</p><p>Espero que tenha gostado.</p><p>Até a próxima!</p>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-3880333790510993272021-03-31T23:35:00.006-03:002022-03-23T23:42:58.619-03:00Como disparar ação dinâmica quando fecho o modal no X<div style="display: none;"></div><div style="display: none;"></div><p> Olá pessoal,</p><p>espero que todos estejam bem.</p><p>Hoje vamos falar sobre uma dúvida recorrente que é como disparar uma ação dinâmica quando fechamos a caixa de diálogo modal no X.</p><p>Antes de dar a solução, primeiro vamos explicar alguns conceitos.</p><p>Há duas opções de ações que podem ocorrem quando uma caixa de diálogo é fechada: Close Dialog (<b>Fechar Caixa de Diálogo</b>) e Cancel Dialog (<b>Cancelar Caixa de Diálogo</b>).</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemAjH3vptYiKb-jb6iNCdQbwPR7yi3-9p3V50LxHJ3rr87_AkOLA5fRrMQlBc24Nva_VAD9hTCHOiTvR_fkh1sAScVwk8ae85thqmA-X_QKdPOrvp-ZBYnuSeRVB49C_8kaHEICEJs1sq/s638/Cancelar+e+fechar.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="483" data-original-width="638" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemAjH3vptYiKb-jb6iNCdQbwPR7yi3-9p3V50LxHJ3rr87_AkOLA5fRrMQlBc24Nva_VAD9hTCHOiTvR_fkh1sAScVwk8ae85thqmA-X_QKdPOrvp-ZBYnuSeRVB49C_8kaHEICEJs1sq/s320/Cancelar+e+fechar.png" width="320" /></a></div><p><br /></p><p>O Close Dialog é um evento que deve ser acionado quando você fez alguma ação na página modal e agora quer fechá-la. Este evento é disparado normalmente quando você pressiona um botão, por exemplo o botão "Criar", "Excluir", "Aplicar alterações" etc.</p><p>O Cancel Dialog é um evento que deve ser acionado quando você simplesmente quer fechar sem ter feito ação alguma no modal. Normalmente ocorre quando o modal é fechado no "X" ou no botão de "Cancelar".</p><p>Um problema comum é que muitos usuários querem disparar ação dinâmica quando o evento Cancel Dialog é disparado, normalmente quando o usuário fecha a caixa de diálogo modal no "X". Como os dois eventos (Close Dialog e Cancel Dialog) internamente são acionados pelo evento javascript personalizado "dialogclose" do APEX, a solução é bem simples: você deve criar na <u>página que abre o modal</u> uma ação dinâmica que seja acionada pelo Evento <b>Personalizado</b>: "<b>dialogclose</b>" para o Seletor JQuery: <b>body</b>.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht5BznbHnR6lEVnxqWBZmHiY1vv6xr-jIyHIKz7Keg6MuDQhe-FyEUtSMy0vh_fbR1Wd75eLO3ghikKQJjnmNRtC8uFji7YL-KnK6Njey4HgQJq-4IJYGawVHoytVO1SxLSXV353JEbJG-/s645/A%25C3%25A7%25C3%25A3o+din%25C3%25A2mica+2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="645" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht5BznbHnR6lEVnxqWBZmHiY1vv6xr-jIyHIKz7Keg6MuDQhe-FyEUtSMy0vh_fbR1Wd75eLO3ghikKQJjnmNRtC8uFji7YL-KnK6Njey4HgQJq-4IJYGawVHoytVO1SxLSXV353JEbJG-/s320/A%25C3%25A7%25C3%25A3o+din%25C3%25A2mica+2.PNG" width="320" /></a></div><div><br /></div><p>Espero que tenha gostado!</p><p>Até a próxima.</p><p><b><i>[Atualização: O APEX 21 possui esse recurso agora de maneira nativa]</i></b></p><p><br /></p>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-42389118820117119422020-11-07T01:53:00.021-03:002020-11-07T02:00:50.688-03:00Itens do aplicativo - diferença entre escopo global vs aplicativo<p> Olá pessoal,</p><p><br /></p><p>sabia que o valor de um item do aplicativo pode ser compartilhado entre aplicações do mesmo espaço de trabalho?</p><p>Para demonstrar isso, iremos criar duas aplicações em que cada uma delas conterá 2 itens: um com escopo global e outro de aplicativo.</p><p>Veremos que o item com <b>escopo de aplicativo </b>só é válido em uma sessão de um <b>único aplicativo</b> e o item com <b>escopo global </b>pode ser compartilhado com <b>outra aplicação </b>desde que compartilhe a <b>mesma sessão</b>.</p><p>Detalhe: o <b>compartilhamento de sessão </b>só é permitido entre aplicações do <b>mesmo </b>espaço de trabalho!</p><p>Iremos criar um processo para incrementar o valor dos itens e apresentar os valores na tela para ver a diferença.</p><p>(Caso queira apenas ver o resultado final, acesse os Passos 8, 12, 13, 14)</p><p>Para isso vamos fazer o seguinte:</p><p>Criação da aplicação 1</p><p><b>Passo 1 - </b>Acesse "App Builder" > "Criar" > "Novo Aplicativo", defina o Nome para "<b>Aplicação 1</b>" e pressione "<b>Criar Aplicativo</b>".</p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu8eMFlhC0O8FgRLK2MsFOqxgBU7EXhdQ-L4xP2R9gSwrbXyEl1kIPoPK38srseDmbrybGFTER6BJcpcmx4Oqc2pvBHwQPBIQIseOIqERg8JGad3h8soSG5d-2WD6tFa23ilo7JcFV6cBj/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1043" data-original-width="1198" height="557" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu8eMFlhC0O8FgRLK2MsFOqxgBU7EXhdQ-L4xP2R9gSwrbXyEl1kIPoPK38srseDmbrybGFTER6BJcpcmx4Oqc2pvBHwQPBIQIseOIqERg8JGad3h8soSG5d-2WD6tFa23ilo7JcFV6cBj/w640-h557/image.png" width="640" /></a></div><br /><br /></div><p><br /></p>Após isso, vamos criar um item de aplicativo com escopo global<br /><br /><p></p><p><b>Passo 2 - </b>Acesse<b> </b>"Componentes compartilhados" > "Itens do Aplicativo" > "Criar", defina o Nome como "<b>G_GLOBAL</b>", o Escopo para "<b>Global</b>" e pressione "<b>Criar Item do Aplicativo</b>".</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ5OzX4syfbpeG4j1B-loYV5uHaeUYQjhwWhmFcLhnxIc3M_s5YPFHbc3LKH6JJp2VxxtOTh7_ocE9TI_AddcOcfQ4enSLKsKcdOA_2dbq3lB2SC4caBg91We-R3vuPt17tXunqQiQ2itk/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="419" data-original-width="1093" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ5OzX4syfbpeG4j1B-loYV5uHaeUYQjhwWhmFcLhnxIc3M_s5YPFHbc3LKH6JJp2VxxtOTh7_ocE9TI_AddcOcfQ4enSLKsKcdOA_2dbq3lB2SC4caBg91We-R3vuPt17tXunqQiQ2itk/w640-h246/image.png" width="640" /></a></div>Após isso, vamos criar um item de aplicativo com escopo de aplicativo<br /><b><br /></b><p></p><p><b>Passo 3 </b>- Acesse<b> </b>"Componentes compartilhados" > "Itens do Aplicativo" > "Criar", defina o Nome como "<b>G_APLICATIVO</b>", o Escopo para "<b>Aplicativo</b>" e pressione "<b>Criar Item do Aplicativo</b>".</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3-WlET6fu7OL2lL5awN2xlJ8iXLZEgJUR_SBApmEgCcg09KLDicNT8Ca7D5_Z0xpUDUUkViP_MZbONUivzpCO2SImnOecsWqRdJ6NznxowJZ8HxZNsPseY4SzarUXoJZFFLUMzMNctgwt/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="413" data-original-width="1294" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3-WlET6fu7OL2lL5awN2xlJ8iXLZEgJUR_SBApmEgCcg09KLDicNT8Ca7D5_Z0xpUDUUkViP_MZbONUivzpCO2SImnOecsWqRdJ6NznxowJZ8HxZNsPseY4SzarUXoJZFFLUMzMNctgwt/w640-h204/image.png" width="640" /></a></div><p>Para poder compartilhar um item global é necessário habilitar o compartilhamento de sessão.</p><p><b>Passo 4 </b>- Acesse "Componentes compartilhados" > "Esquemas de Autenticação" > Selecione o esquema de autenticação atual > Em Compartilhamento de Sessão escolha o Tipo: "<b>Compartilhamento de Espaço de Trabalho</b>" e clique em "<b>Aplicar Alterações</b>".</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDE13_UzgH_GBaBJxA2mkyepXwMLyFEdf8phxpij0Y7MlyEt3R3XGJoBU5j08AF8EXHr8wzbBKSHkdW0ZdQRagrvjIjjOvm8t9XENJOLEQQu1cDfts6LKjEmwbfF8DDFr380W8HXXkYPQa/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="630" data-original-width="1158" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDE13_UzgH_GBaBJxA2mkyepXwMLyFEdf8phxpij0Y7MlyEt3R3XGJoBU5j08AF8EXHr8wzbBKSHkdW0ZdQRagrvjIjjOvm8t9XENJOLEQQu1cDfts6LKjEmwbfF8DDFr380W8HXXkYPQa/w640-h348/image.png" width="640" /></a></div><p></p><p>Agora vamos criar uma região para exibir o valor dos itens.</p><b>Passo 5</b> - Acesse a página 1 no Designer de Página, clique com o botão direito do mouse em Content Body, escolha "<b>Criar Região</b>", defina como Texto de Origem da região com o código abaixo. (IMPORTANTE: Substitua <b>XYZ</b> pelo id da aplicação que será criada nos próximos passos.<p></p><p><br /></p><p><i><a href="f?p=<b>XYZ</b>::&APP_SESSION.">Acessar outra aplicação na mesma sessão</a></i></p><p><i><p></i><i><p>Global: &G_GLOBAL.</i></p><p><i><p>Aplicativo:&G_APLICATIVO.</i></p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqWDURX2u3sjg9ZwGEPan2XHQfdNAx7FYwB59jwOfHLjv3DfE6k7ezOYWxOmhr1AVu25xwkznh13rR6t_IlGDQUIKYM3kpn8wv2S9_NFMMCCl5PpMHcaPnrIT5DkNtpEHKjxeoHcD9GDU7/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="575" data-original-width="1520" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqWDURX2u3sjg9ZwGEPan2XHQfdNAx7FYwB59jwOfHLjv3DfE6k7ezOYWxOmhr1AVu25xwkznh13rR6t_IlGDQUIKYM3kpn8wv2S9_NFMMCCl5PpMHcaPnrIT5DkNtpEHKjxeoHcD9GDU7/w640-h242/image.png" width="640" /></a></div><br />Agora vamos criar um botão para manipular o valor dos itens.<p></p><p><b>Passo 6 </b>- Crie um botão na nova região e coloque como Nome do Botão: "<b>INCREMENTAR</b>".</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLsdct9y00Yrl3PsKsFmcnyHCLk9XKpj-YRWxux__q3RKK3ikxJjE6XYh5oTVcw3kws6QXIU4FWIWlYVxdniAPHVmu9gvolt3IkbrQPk6WifNNlK9U-5jXW6KkoBvq1NZSZQzdTYAROjzK/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="478" data-original-width="1520" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLsdct9y00Yrl3PsKsFmcnyHCLk9XKpj-YRWxux__q3RKK3ikxJjE6XYh5oTVcw3kws6QXIU4FWIWlYVxdniAPHVmu9gvolt3IkbrQPk6WifNNlK9U-5jXW6KkoBvq1NZSZQzdTYAROjzK/w640-h202/image.png" width="640" /></a></div><p>Vamos agora definir o processo que será executado ao clicar no botão.</p><p><b>Passo 7</b> - Na aba Processamento, crie um Processo chamado "Incrementa itens" e defina para executar o código abaixo:</p><p><i>:G_GLOBAL := NVL(:G_GLOBAL,0) + 1;</i></p><p></p><p><i>:G_APLICATIVO := NVL(:G_APLICATIVO,0) + 1;</i></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7PgdbE1AlH9JFhV2wLi1Px6NAe8wvCktUSclv6VGb6y7ay22Was-FNh03THkesoL-Jwd_5kctLk4rIwJzDZ6UQnPm_hBxvMLLSqYI0g39Lp1juRc5AKK3Gyrg4HEpAU444hmf_-SZDdOQ/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="442" data-original-width="1525" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7PgdbE1AlH9JFhV2wLi1Px6NAe8wvCktUSclv6VGb6y7ay22Was-FNh03THkesoL-Jwd_5kctLk4rIwJzDZ6UQnPm_hBxvMLLSqYI0g39Lp1juRc5AKK3Gyrg4HEpAU444hmf_-SZDdOQ/w640-h186/image.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Passo 8 </b>Execute a aplicação e clique 5 vezes no botão para incrementar os dois itens para o valor 5.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzXSDDDAnFm9IN5R4z69dOhyQgIykPzfag8RWRa_ocuszi6EaFYCz-gzGsPvgPHSQ4iq9JRoGzHdPBpV7Ftxd7v7Q8P-FEdGz-cqz7hxDv5_4DBWMlh89lUuBvF1CSArrsvxbgCR7ja1qn/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="431" data-original-width="922" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzXSDDDAnFm9IN5R4z69dOhyQgIykPzfag8RWRa_ocuszi6EaFYCz-gzGsPvgPHSQ4iq9JRoGzHdPBpV7Ftxd7v7Q8P-FEdGz-cqz7hxDv5_4DBWMlh89lUuBvF1CSArrsvxbgCR7ja1qn/w640-h300/image.png" width="640" /></a></div><br />Agora vamos duplicar a aplicação</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Passo 9 </b>- Acesse a página de edição do aplicativo e no canto direito clique em "<b>Copiar este Aplicativo</b>", siga o wizard definindo o novo nome do aplicativo para "<b>Aplicação 2</b>" e o id do aplicativo para o <b><u>mesmo id definido como XYZ no Passo 5</u>.</b></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb-nuyT3AK-zWZJC2ix26iYm4jQnCpEYsYIhJikBWalqY0Su7_AyC_zIH8fO5CcpV6eXHSAsEkofwbME4abmIln5qa0xO4NQA7fp_lRKksMrZRn3SEMIb8f4pslPo6iB12i3DBkO_9_kqt/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="554" data-original-width="1228" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb-nuyT3AK-zWZJC2ix26iYm4jQnCpEYsYIhJikBWalqY0Su7_AyC_zIH8fO5CcpV6eXHSAsEkofwbME4abmIln5qa0xO4NQA7fp_lRKksMrZRn3SEMIb8f4pslPo6iB12i3DBkO_9_kqt/w640-h288/image.png" width="640" /></a></div><br />Vamos trocar as referências ao termo "Aplicação 1" para "Aplicação 2".</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Passo 10 </b>- Na Aplicação 2, clique no ícone de pesquisa no canto superior direito e pesquise pelo termo "<b>Aplicação 1</b>". No relatório que aparece vá clicando no botão "Exibir" e troque todas as referências ao termo "Aplicação 1" por "<b>Aplicação 2</b>".</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRqE0amZV5-FJnXqqoFwFiIgwS3g6t50g_UEqWD9xwHQ3weDsl1rE4b3uu32VtltQ_whcMGr8ZkCzpLYdEi7fdxGhW0aQPFf5IEEPar5t4HJZBDAtxKUFfFIJtBeky2qVsnq60oyNM-VsB/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="561" data-original-width="1127" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRqE0amZV5-FJnXqqoFwFiIgwS3g6t50g_UEqWD9xwHQ3weDsl1rE4b3uu32VtltQ_whcMGr8ZkCzpLYdEi7fdxGhW0aQPFf5IEEPar5t4HJZBDAtxKUFfFIJtBeky2qVsnq60oyNM-VsB/w640-h318/image.png" width="640" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: left;">Agora na Aplicação 2 vamos trocar o link que se encontra na página 1 para que aponte para a Aplicação 1.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Passo 11 </b>- Acesse a página 1 no Designer de Página, na região nova, altere o link para ABC, onde ABC representa o id da Aplicação 1.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0o1-Gkhmbpsb1h6gjpK3l6evuhr6eKwkZIYa2F37c3-nAHkjgb7JMDejI9r1Q8IrGURGlcCMWtnzf5-eu-FtqZ9t8hshpIzVpA7dtftQriD3EhYm1mxaJ-W6UfHEpa4dXMFqlTQkDadQn/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="449" data-original-width="1386" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0o1-Gkhmbpsb1h6gjpK3l6evuhr6eKwkZIYa2F37c3-nAHkjgb7JMDejI9r1Q8IrGURGlcCMWtnzf5-eu-FtqZ9t8hshpIzVpA7dtftQriD3EhYm1mxaJ-W6UfHEpa4dXMFqlTQkDadQn/w640-h208/image.png" width="640" /></a></div><br /><br /></div>Vamos testar?<p></p><p><br /></p><p><b>Passo 12 </b>- Volte para a Aplicação 1 e clique no link para ir para a Aplicação 2 e repare que o item global já está com o valor 5, ou seja, <b>o item foi compartilhado entre as aplicações na mesma sessão</b>. Entretanto, o item de aplicativo não foi inicializado ainda.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUPqfQi6QyN-zAPM9I7BRUZXFkzyUejbNjeN7DFswt0eN6j2N_8VmIJrgkLVyLWWva9UBP_zfc-2UXFid0Tl7uUSxdcaWsit63kupFmzHV5XFubMnu5J3kdJRZ-DsKnRy1cEQ7prLwY03b/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="437" data-original-width="1199" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUPqfQi6QyN-zAPM9I7BRUZXFkzyUejbNjeN7DFswt0eN6j2N_8VmIJrgkLVyLWWva9UBP_zfc-2UXFid0Tl7uUSxdcaWsit63kupFmzHV5XFubMnu5J3kdJRZ-DsKnRy1cEQ7prLwY03b/w640-h234/image.png" width="640" /></a></div><p><br /></p><b>Passo 13 </b>- Clique em Incrementar 10 vezes até o item Global ter o valor 15 e o item de aplicativo o valor 10.<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6KAOGig2DgfhOyhKwwvSl5bTUbiUcUXbyzRYiEIIBjU3aiLl9-fGF5FykpRAOgrxLQr_tBJIYgHZdBWrLrKmmiKoP2FC3ab77yQqTg59vpT8veyxzG7YHJSmIdHYAFisEC9SkEi7lOI_4/" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="419" data-original-width="1205" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6KAOGig2DgfhOyhKwwvSl5bTUbiUcUXbyzRYiEIIBjU3aiLl9-fGF5FykpRAOgrxLQr_tBJIYgHZdBWrLrKmmiKoP2FC3ab77yQqTg59vpT8veyxzG7YHJSmIdHYAFisEC9SkEi7lOI_4/w640-h222/image.png" width="640" /></a><p></p><p><br /><b>Passo 14 </b>- Clique no link para voltar para a Aplicação 1 e veja que o valor do item global também estará 15 e o valor do item com escopo de aplicativo permaneceu com o valor 5.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTMvOLwAxBnutF91bF6UfUWcRKbr_K1Sr4o8I2On7-M5_BUGksgjPYHw1agDwnwLmWCb4z5yUzdu9euFh-tvpEMDwf_48a6d7Gk5oGwhNwL7ATCfQwaJmOX3MUHHjMBOywR9av52d9uCll/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="426" data-original-width="1201" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTMvOLwAxBnutF91bF6UfUWcRKbr_K1Sr4o8I2On7-M5_BUGksgjPYHw1agDwnwLmWCb4z5yUzdu9euFh-tvpEMDwf_48a6d7Gk5oGwhNwL7ATCfQwaJmOX3MUHHjMBOywR9av52d9uCll/w640-h228/image.png" width="640" /></a></div><br /><br /><p></p><p>Espero que tenha gostado.</p><p>Até a próxima!</p><p><br /></p>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-68740317951653473632020-09-25T18:16:00.004-03:002020-09-25T18:17:57.403-03:00Explorando o código das páginas do APEX<p> Olá,</p><p><br /></p><p>já precisou saber como o APEX implementa determinada funcionalidade?</p><p>Recentemente precisei saber como o App Builder do APEX fazia a exportação e importação de uma aplicação, entretanto, como consultar o código do App Builder?</p><p>Como você deve saber, o App Builder é uma aplicação APEX. Basta reparar na URL o "f?p=4000".</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6xKJ2Ov-7pFD5vfsIQJT1IgxJirmjuzjZpkiw-llvJShx7xnvWBsa1Os4OO9xP7yRCJE8x-YwnKKteZa4u4mHwhnrDXVoLTY0xlDUnPT9YyQXzF4RLivTLVgKru1GU0SYQDgN3s0OUV6l/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="580" data-original-width="1351" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6xKJ2Ov-7pFD5vfsIQJT1IgxJirmjuzjZpkiw-llvJShx7xnvWBsa1Os4OO9xP7yRCJE8x-YwnKKteZa4u4mHwhnrDXVoLTY0xlDUnPT9YyQXzF4RLivTLVgKru1GU0SYQDgN3s0OUV6l/w640-h274/image.png" width="640" /></a></div><br /><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSFK7ULTjuYneg98pGu0lZTdV_BcR0Mj4nAevgRFwHeaONEAygd3RTuuLDNco8FF88Y0VTMoqvo-WiIrnBofdYy0_Waft-tku3f3Bm_NzpapM15eeUz2JR4wIlt52c0Ga9mRT4ZeGqf0ag/" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="813" data-original-width="1515" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSFK7ULTjuYneg98pGu0lZTdV_BcR0Mj4nAevgRFwHeaONEAygd3RTuuLDNco8FF88Y0VTMoqvo-WiIrnBofdYy0_Waft-tku3f3Bm_NzpapM15eeUz2JR4wIlt52c0Ga9mRT4ZeGqf0ag/w640-h344/image.png" width="640" /></a></div><p></p><p><br /></p><p>Para entender como as aplicações do APEX (App Builder, SQL Workshop etc) funcionam por dentro faça o seguinte:</p><p>1) Baixe o arquivo de instalação da versão desejada do APEX em <a href="http://apex.oracle.com/download">http://apex.oracle.com/download</a></p><p>2) Descompacte o arquivo baixado</p><p>3) Acesse a pasta apex > builder</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlp9bgSBzTpFjdRlSkWxlbyrSiB3T5yv21ZgKJjcADAm13jIS2tuouMI_BN3nLDDC3FPYk8zVBMEdvYKhGVa_xzqgfCRFP1zh_gJrImHbzzifD0jsaJ7g6lp-CRSxWF92WNH-5_7IseCkc/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="489" data-original-width="767" height="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlp9bgSBzTpFjdRlSkWxlbyrSiB3T5yv21ZgKJjcADAm13jIS2tuouMI_BN3nLDDC3FPYk8zVBMEdvYKhGVa_xzqgfCRFP1zh_gJrImHbzzifD0jsaJ7g6lp-CRSxWF92WNH-5_7IseCkc/w640-h408/image.png" width="640" /></a></div>Repare acima que os arquivos na pasta "apex > builder" são fXXXX.sql onde XXXX é o número da aplicação APEX. Essas aplicações são acessadas quando você utiliza o APEX.<div class="separator" style="clear: both; text-align: center;"><br /></div>4) Logue em algum espaço de trabalho, acesse o App Builder e clique no botão "Importar"<p></p><p>5) Selecione o arquivo desejado e clique em "<b>Próximo ></b>". </p><p>(Na imagem abaixo foi selecionado o AppBuilder, que é a aplicação f4000.sql)<br /><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirDgK_tSyBPzq15BCSDrBikk1kpMsGadfoJHbqjhBZKNMt0bQ0yNp8bhOZPqBhzcQNIlVnE_-z2UPDa000KYbpZeKo7hhRZJwkWBLQkykXU13va_vQL5UBpHa_bGMJ2s5e9D_S_xuRTh-r/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="892" data-original-width="1515" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirDgK_tSyBPzq15BCSDrBikk1kpMsGadfoJHbqjhBZKNMt0bQ0yNp8bhOZPqBhzcQNIlVnE_-z2UPDa000KYbpZeKo7hhRZJwkWBLQkykXU13va_vQL5UBpHa_bGMJ2s5e9D_S_xuRTh-r/w640-h376/image.png" width="640" /></a></div>Obs: Esta tela de importação é do APEX 20.1. Em outras versões do APEX a tela pode ser ligeiramente diferente.<div><br /></div><div>6) Clique novamente em "<b>Próximo ></b>"</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qLIi54Nsy60QzydegMk9AjgYaahoFNRi7WyKHS14KR27Fjnee57CsEVswYZciJ9X4TCm78vXRwAjB9uYQKFnWcC_6RnI20WU6TrPqmhP-MV3SPw2dqrw6SR_buHE3qhRYB-3vZPEeOSH/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="771" data-original-width="1489" height="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qLIi54Nsy60QzydegMk9AjgYaahoFNRi7WyKHS14KR27Fjnee57CsEVswYZciJ9X4TCm78vXRwAjB9uYQKFnWcC_6RnI20WU6TrPqmhP-MV3SPw2dqrw6SR_buHE3qhRYB-3vZPEeOSH/w640-h333/image.png" width="640" /></a></div><br /><br />7) Como sugestão é interessante alterar o ID do aplicativo para um número similar ao da aplicação APEX original. Para isso, selecione "Alterar ID da aplicação" e no campo "Novo Aplicativo" digite 100 antes do número do aplicativo original. No nosso exemplo 100<b>4000, </b>pois a aplicação original tinha o ID 4000.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg35z8irNTobukiOIXb9GW7DBBRztjCWseonfOv_ymusG4gu8X7QsMKZa9fAJjkLGuJtcRGg5SIJAjSkkELrr46C6zHmGH2zqygpU2E_nwADu2FhIN9YzzONp26r9k44Vzvaqj1mwo5_TDe/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="845" data-original-width="1177" height="461" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg35z8irNTobukiOIXb9GW7DBBRztjCWseonfOv_ymusG4gu8X7QsMKZa9fAJjkLGuJtcRGg5SIJAjSkkELrr46C6zHmGH2zqygpU2E_nwADu2FhIN9YzzONp26r9k44Vzvaqj1mwo5_TDe/w640-h461/image.png" width="640" /></a></div><br /><br />8) Clique em "<b>Instalar Aplicativo</b>"<p></p></div><div><br /></div><div>Pronto! Agora você pode acessar a aplicação recém-instalada e verificar o código de cada uma das páginas.</div><div><br /></div><div>Um detalhe é que você provavelmente não conseguirá executar a aplicação, pois deverá faltar privilégios nos objetos de banco internos do APEX, mas isso não impedirá de explorar o código de cada uma das páginas!</div><div><br /></div><div>Espero que tenha sido útil!</div><div><br /></div><div>Até a próxima!</div>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-46681485105788269822020-07-21T17:22:00.007-03:002020-11-13T14:49:42.995-03:00Número máximo de requisições de serviços Web por espaço de trabalhoOlá pessoal,<br />
<br />
A partir da versão 18, o APEX implantou funcionalidade de serviços Web que utiliza recursos do ORDS (Oracle REST Data Service).<br />
<br />
Como segurança, uma das alterações que foram implementadas foi o controle no número máximo de requisições de serviços Web por espaço de trabalho.<br />
<br />
Quando o número máximo de requisições é atingido, ocorre o erro:<br />
<br />
<b><i>ORA-20001: Você excedeu o número máximo de mensagens de solicitações de serviço Web por espaço de trabalho.</i></b><br />
<br />
A mesma mensagem em inglês é:<br />
<br />
<b><i>ORA-20001: You have exceeded the maximum number of web service requests per workspace</i></b><br />
<br />
<br />
Para verificar quantas requisições foram feitas nas últimas 24 horas, utilize a seguinte consulta no Comandos SQL:<br />
<br />
<b><i>select count(*)</i></b><br />
<b><i>from APEX_WEBSERVICE_LOG </i></b><br />
<b><i>where REQUEST_DATE > sysdate - 1</i></b><br />
<br />
Cas<span style="font-family: inherit;">o seja necessário, aumente o número máximo de requisições de serviços Web permitidos <b><u>em 24 horas</u></b> para <u>todos os espaços de trabalho nesta instância</u> do APEX. Esta definição é feita em um único local e </span>vale para todos os espaços de trabalho. Entretanto, é possível configurar um valor mais específico para <u>um determinado espaço de trabalho</u>.<br />
<br />
<br />
Para fazer o aumento do número máximo de requisições permitidas para todos os espaços de trabalho no nível da <u><b>instância</b></u>, acesse o Internal > "Gerenciar Instância" > "Segurança" na seção "Isolamento de Espaço de Trabalho" defina para o valor desejado a propriedade "<b>Número Máximo de Solicitações de Serviço Web</b>"<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<div class="a-Region-headerItems a-Region-headerItems--title" style="box-sizing: border-box; display: table-cell; vertical-align: middle;">
<br />
<span style="font-family: inherit;">No exemplo acima, definimos para 100000 o número máximo de requisições para cada espaço de trabalho.</span><span style="font-family: inherit;"><br /></span><span style="font-family: inherit;"><br /></span>
Caso queira definir um valor diferenciado apenas para um determinado espaço de trabalho, acesse o Internal > "Gerenciar Espaços de Trabalho" > "Espaços de Trabalho Existentes", pesquise pelo espaço de trabalho desejado, clique no link da coluna "Nome do Espaço de Trabalho", na seção "Isolamento de Espaço de Trabalho" defina para o valor desejado a propriedade "<b>Número Máximo de Solicitações de Serviço Web</b>"<br />
<br />
<img alt="" height="547" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxUAAAKjCAYAAABr+SLWAAAgAElEQVR4Aey9327bTJev2Zemo76MwZx+8fm+i+4YGMzpoI/2AD1f4NvY6ACGFLv12k7aSRzF9k7it53YiZO87l6DVcUqVhWL+kvRIvkEUESRVatWPWvJWj+yKP3D79+/hQcMyAFygBwgB8gBcoAcIAfIAXJg3Rz4h3U70o+kIwfIAXKAHCAHyAFygBwgB8gBzQFEBVdquFJFDpAD5AA5QA6QA+QAOUAObJQDiAoSaKME4uwEZyfIAXKAHCAHyAFygBwgBxAViApEBTlADpAD5AA5QA6QA+QAObBRDiAqSKCNEogzE5yZIAfIAXKAHCAHyAFygBxAVCAqEBXkADlADpAD5AA5QA6QA+TARjmAqCCBNkogzkxwZoIcIAfIAXKAHCAHyAFyAFGBqEBUkAPkADlADpAD5AA5QA6QAxvlAKKCBNoogTgzwZkJcoAcIAfIAXKAHCAHyAFEBaICUUEOkAPkADlADpAD5AA5QA5slAOIChJoowTizARnJsgBcoAcIAfIAXKAHCAHEBWICkQFOUAOkAPkADlADpAD5AA5sFEOICpIoI0SiDMTnJkgB8gBcoAcIAfIAXKAHEBUICoQFeQAOUAOkAPkADlADpAD5MBGObCbouLD3+XZaCT//L9QffOV/4X8/W8jGf3Tv22UBPPHGEoMOsDSvC+eyd8/NBGTf5N/Ho3k2b9e+Nz5t38il3gvNJFb2CCPyAFygBwYYg5sJir+1z/LaNRUkRMkIKLCF3rzk7K5QvjiX5/JaDTKPP5Z/m0Qyr0JloWNLMeC7d/+Lhfr8kRULPm+CP6WrMuafrAmB8gBcoAcIAdWygFExRYSxhTomxSPS/vURCFsCzArKoYiIHJFZ3MsvRBsWhwjKlb64+bjsPT7KZcX7IMjOUAOkAPkADmwTA4gKrZQcCAquvjmQ1Sw/KmLeYvPy3zQ0YY8IQfIAXJg+zmAqEBUmLO/XKlAVCAqtv8Hlw81GJMD5AA5QA70NQe2ICrsDaDh+vz4huuieAvXnac3GueWjZj7N+I1/7FdO67uM8WRs++WISX94742wW1hXY4R3sSqCeCLrsI/N0ffLtlvjyf3nCR+rHJPStW/f6u5UTuNweJlTcuJitRueTO96W9Yp20yY1cYlHbCN1o639EosVWxk7CeIxhT28/+tYZlGlOXT3Ns+znk8tjsUz/L94HPn8p8Ei6+b5LjuS81WGTrt42TH3uZ/I7mnMY5vunbM4j68EECF3KAHCAHyAFyoK850LCoqBYqv//XP5ff4uQKtEhEFMVJWKxVijEtwOKC0haFYRFZFjleMBR2nv3tmYwC+9W+rkgLxnB902/HUbES2NL5qXjwY/7+LcZ+2KYorKzYCX0u2ib9c8lm+wb+/S6L0ujbn2r9DvtW39CWybw282Nr5/xMnkWFv/MxtLtMLF08Ylb/9k+lnVZYVmJbzCcT21zMflfy+LfYfc9EczL+FqcluBh72jeTb1EOLWGrTlQskd8u50NB4uYa5SKCgntAyAFygBwgB8iBweRAs6KiKHriYqksYP2Z/jTB0uIrfZ22N69tkVsW84WoiARLvjj9nRZUNeOlhXa1sNe5FYVmMG5WVMxhY+zOK1Rr+1bnnLeVEQQJUzvX8iqNuwrji8RaH2x8bf+0UNZji8d2bXwsTTGfs1Xk0hxf8vMv+umca/umLKtxNcLB9I+L+qyg8GMlbYv+UUGexKK0Z33yXOb0XTjvIg7eViYuxkYkCpVbysG+zvq/KG618wziQ5vBfPiUeU78YUEOkAPkQB9yoFlRURQqlWUqplBICqSoeEgKl7rCrdjvC97oe/bz9lNhYINm27rCKCsC1L+kSDJFVyAeXAKkBV3OXm6f65+O4/cXjOr7JtwqhaN7k6bt3P7y2YxRKSjL467wz8e2/upMtSgtbM6JZcpzeR7VmC3fN2Fk/MsJmzh3UvvR61we5/aF74U5XOoFkbviVV7JMX7Ms1UnKhblt7GZ46JxXYFNOGe2ERLkADlADpAD5EDnc6BhUaGFRVGcFfc0+DOjc4upXEEXnuG1xUp8/0FawNjXfrwiOfPFctzXnqHNnKU3cygLqE1ExdxCOREvUWHq1rpnr2TkuYWiK9rOFIxurDynUFTMie2cJV8+H/zYi2KZzCnzR6YVliYmdTmx5P0DuZyvLcoXcZl3lSUVFUvYygiApfJ7bq7G7yuXWzyn7yNekxPkADlADpAD/cuBLYiKEpItVF0BZguOtOi3SZUUkkkxli8i0wImbz9fLMd9TZts0V7ORf1cquiqKbDnjjG3UFvlKkCewTJv3DyneP6hHdvexXaxj+6q0DKxrOPsxm+FZW3xX8/E+eefkzw2+2vsLsNl4ZWKIoeXsrWuqKjx3845fl95DhlhyLEV8gh+nT97R76T7+QAOTCEHNiqqFCAZYGYCIfwgzItvpLX2SKpOJPsilW39CIVLfliOSl+FhT1LhHKucRvjtS/bNE7Z4y0vxvPP9f1LTj5+x7cVSJ/VSD209sL2RfbeU7z+4c8bP/yqo4fa41YLvSljofLt3kCsa5vhWWSIxlmfo51x5K5m/ZmX5VTNgeMr6VwczdDlznv4hO/t5ayta6oyPTzHOrY1vFhP8UyOUAOkAPkADnQmxxoVlR8+Lv8c/BtSa7Q90VQpXDTosgWb2Vh7JZ5lMufqgVr0aeheyr8Ep30noJkPmER7QupXCFbU1yZ/qO4oKzOzRWK4XNRNEb+uX0jidilhWjxZg2/OSn03W0vLOQTFi5uLra2f/LNWC62QZFfnW8ulm5u8T0C4RzaYOnmFAvVC/n7P/1dLpb5I7iCqFiKi3v/JDmUsljKVkYcrJbfgdhRFoVvLh9cXvEcvo/ZJh/IAXKAHCAH+psDjYuKZ8W9FG4tf7XIKIvI2jaZYswWTm6Nuxab1k5p376OC8B0rbkLZNrX7o/H0LHSojYp4H3BnhbTrihWGzkR4eZRHaP+zRbadHaLfemVCV98luOUnByD+NkV0C4m5XPh/wKbpr+Kh0LU+P6pb06E+TzJxbImHomtqs9xvBphmc4n+urWmGFlvEwez1vCFOdfhouxp/FI30PVeS+0VXn/hFcV43kZW4EwNPPM5EP63qvwWEaI0aY3Z6yIf/w+ggc8yAFyoO85sJmooACgAChywIuKhnNC7S4SRH1/kzI/PojIAXKAHCAHyAFyYNdzAFHRcBG86wHfln/bFBXmqkd6ppy4IWjJAXKAHCAHyAFygBzYmRxAVJCMjSTjtkSFFUG63CdeRrYtcYRdzgSRA+QAOUAOkAPkADmweg4gKhAVOywqgnsHkvspeLOv/maHGczIAXKAHCAHyAFyYFs5gKhAVDQiKraVoNjljx85QA6QA+QAOUAOkAO7nwOICkQFooIcIAfIAXKAHCAHyAFygBzYKAcQFSTQRgnEmYPdP3NAjIgROUAOkAPkADlADmw7BxAViApEBTlADpAD5AA5QA6QA+QAObBRDiAqSKCNEmjbqhf7nFkhB8gBcoAcIAfIAXJg93MAUYGoQFSQA+QAOUAOkAPkADlADpADG+UAooIE2iiBOHOw+2cOiBExIgfIAXKAHCAHyIFt5wCiAlGBqCAHyAFygBwgB8gBcoAcIAc2ygFEBQm0UQJtW/VinzMr5AA5QA6QA+QAOUAO7H4OICoQFYgKcoAcIAfIAXKAHCAHyAFyYKMcQFSQQBslEGcOdv/MATEiRuQAOUAOkAPkADmw7RxAVCAqEBXkADlADpAD5AA5QA6QA+TARjmAqCCBNkqgbate7HNmhRwgB8gBcoAcIAfIgd3PAUQFogJRQQ6QA+QAOUAOkAPkADlADmyUA//w7t074QEDcoAcIAfIAXKAHCAHyAFygBxYNwf+QfgHAQhAAAIQgAAEIAABCEBgAwKIig3g0RUCEIAABCAAAQhAAAIQEEFUkAUQgAAEIAABCEAAAhCAwEYEEBUb4aMzBCAAAQhAAAIQgAAEIICoIAcgAAEIQAACEIAABCAAgY0IICo2wkdnCEAAAhCAAAQgAAEIQABRQQ5AAAIQgAAEIAABCEAAAhsRQFRshI/OEIAABCAAAQhAAAIQgACighyAAAQgAAEIQAACEIAABDYigKjYCB+dIQABCEAAAhCAAAQgAAFEBTkAAQhAYA6B379/y9XVlbx7944HDMgBcoAceKIc0L/D+veYf7tLAFGxu7HBMwhAYAcI6AfZly9f5Pb2Vr5+/coDBuQAOUAOtJwD+vdX/w7r32P+7S4BRMXuxgbPIACBHSCgVyhUTNzd3cn9/b18//6dBwzIAXKAHGgpB/Tvrv791b/D+veYf7tLAFGxu7HBMwhAYAcI6IeYfqj9+PFDHh4e5OfPnzxgQA6QA+RASzmgf3f176/+HUZU7MCH4hwXEBVz4HAIAhCAgH6I6dUJFRO/fv3iAQNygBwgB1rOAf37q3+HERW7/ZmMqNjt+OAdBCDwxAT0Q0zPkqmg0JsEecCAHCAHyIF2c0D//urf4Y1FxeOdfP5wLqfTI5lMxjIeF4/JRI6mp3L+4bPcPT7xh06Hh0dUdDh4uA4BCGyfAKKi3eKBYg3e5AA5kObA5qLiUW5np3KkQmJyJNOzc7mYXcvNtzu5+3Yj17MLOT+b+uOns1tBW6z++YqoWJ0ZPSAAgQERQFRQ4KQFDq/JCXKg3RzYTFTcy9XZkYzHE5meX8+/EvF4J9fnU5mMx3J0diX3A/qsa2KqiIomKGIDAhDoLQFERbvFA8UavMkBciDNgfVFxb18PJvIeDKVt1/+Wvpz6vHmvUwnY5mcfURYLE1NBFGxAiyaQgACwyOAqKDASQscXpMT5EC7ObCuqLifnchkfCznN6svZnq8OZfj8UROZlyvWPaTH1GxLCnarU7g6kD2RiMZhY9nB3K5uqWNely+2JPRaE8Oan8z51D21cfnhyuNc/hc51Zj9+W+jJ5gritNYFHjDeegfPZe5KJtee+/XOTAbhxHVLRbPFCswZscIAfSHFhLVDxey+vJWI7f/pn5MLmXT+9O5PjVRCavjuXk3afsFYk/3x7LePJarlfXJJkx+78LUdH/GD/dDI2o2JewVDeF+FMX2xsWyw6oFRWjvHhoaAw31pM8bziH1kTFhn4uYouooMBJCxxekxPkQLs5sI6oePhwYgTBVUUQPNglUfrNT0ZU2G+A0qVOD+kHwuOVESYnHypH0pa8FpY/kQTbJJARFSJ6lrrm7P42fQltN1SE2qL5wFzlqJyRb2iM0O3WtzecA6Ki3Q9dihx4kwPkQF9zYHVR8SAXf+g9EdfVj85v72WqN2K/+ST2Lou/5NMbvZF7Ku+/VZtf6z0Zf1xUBUe16eD3cKVi8CmwRQC1omIkfulLskQqLM7NsqVnB3Joli8VS2m00B3ty6F5LpZWmWVLl3LwrFxq5e3r9FwfEfFXF9ySrKBvObZbnlMsi9LxMph80WzsJ0JJ96VXZJK5xset/3svDoN5FDbDuaY2K3OKfbVLvxyXxMd0TuE4jnE6XtQmiGNqq/CrZBo2cHzDfdXYRDGUOL6OXT6esd1NX3GlgkKtr4Ua8yK3u5IDq4uKT/Lm1VhOZpXLFCLXr2UynsjrQG88zk7Mb1acZlbsmmOv3sinTT9MBtAfUTGAID/ZFHOiwuwrittw2zgZF5uuII4KU1fUuvsfgkLdFaG2X1Bcmz7J66hYdgW9+2syX0w4nl5UuMLe+aQNdMxwDONDXNSbgti3cUVz2cYXzL6N9SvkYdoE4zohZmZSmfdB/X0lFf8KBn7sWJwZBpX4OTL2OeSTHDFXd1y8xAmGYB5SxNW1Sed5+CK4NydlHQ+28StEBYVXVwov/CRX+5oDq4uKj3I6Hsvpx9xHwKM8fH/wv0PxeDeT01e6BOpEZrlVTh9PZTw+laypnPkB70NUDDj4W5+6KQyDYj4pHnNFpymKi+KyIg7U4bRQzhX06RKrtE+lCM2LirB4z7GK/Y8FUSwqUvvOmvZxIiLTJlO0h3xs4R3yVbuBzco83bjpc2ZsbRL1t21cke8sxAzcXvtshIC7IpR59rbS+BRmwrnOGyf2M/ahiVeICgq1vhZqzIvc7koONCsqyk8G+w1PKigmcvqx5lueEBUlsAVbiIoFgDi8AYHibHP47U9loW6L1PCY3y7OjpuiMjxTrq5kCtBqwRkU1rk+UbGsDdKiOhEINQjScSMRFI1RZy8s1FMfRHKiISy0LQu3tCl+tgW7HVe5+gI+O5ca/zJz8DEKRUJ4hSGwn/IpD8XjZeOsjcPxdduMmYqopF05SGNbiAoKr64UXvhJrvY1B1YXFXOWPwWfDh/PVFDM/8pZlj8FwBZsIioWAOLwBgQqVypCW5kiOjyspb7eS9EhURGJk7AgDq8eRHNsQlRkiuxoDCdOVHTUtdUi310xCTpX5rBInAR9V7inIhJKoYlofHvAtFVxEQqZTLvQzKbbiAoKtb4WasyL3O5KDqwuKubcqO0/FOy3QGW/9cm3EeFG7QDGgk1ExQJAHN6AwFxRUdyYGxaHyVDdExWugN+TgxfhPRV1Aios5jNtMvyiAtwcz4iBhKN7WX/lIDN2RdTl2zjbuef68eIrFbmrT2ovmms0QMiNKxVdKQrwkwKWHCAH1s2B1UWFSP1XykYfKPNf8JWy8/kkRxEVCRBeNkggUxRH1s3x5Oz3y32/VGeroiI6a58WzEnRGzldvqgrmnW/WaoTXmXRs+nJ1QDTzouq1AcnUOKrC2mhbWyE4+hSruf2JubLF/vBjdkZ++VUbAEfMiliE10pyswhHiMwuMKVCneFJ7r6EAmmck5mhOhYfklc7Mlmr7hSQSG0biFEP3KHHGgmB9YRFTL3x+/0c+GrvJ+OZTx9L19rPibcj99Vf+uipsPAdyMqBp4AW52+Kf7iorgynilUg/sBggJ5a6LC3TDul9GkBfdmosLeLJ35Ubx0rl5QKJXUh+VEhesX3uvg759IxivvZ6lEwewwvN29EhoH7R/Ew3hZfL2vHy+aQ2y3TnQ5Pt5PO3rwVbqaD/EVGC/UjH/xsYjBHH9i75Z/hahopiiguIIjOUAOrJsDa4kKEbmfncik9p6J+aLC3sQ9kZNZzQ3cy3+MDKYlomIwoWaiEIDAOgQQFRRC6xZC9CN3yIFmcmBdUSFyb389e3Is51/sT90t8znw15e3Mp3oj+d9FCTFMsRsG0TF8qxoCQEIDJAAoqKZooDiCo7kADmwbg6sLyr0Q+ters70F7MnMj2/lrvM7+H5j7bHO7k+n8pEf3H77ApB4cEst4GoWI4TrSAAgYESQFRQCK1bCNGP3CEHmsmBzUSFfng9yu3sVI4mYxlPjmR6di4Xs2u5+XYnd99u5Hp2IednU3/8dHbrfxxvoB99a00bUbEWNjpBAAJDIYCoaKYooLiCIzlADqybA5uLiuIT6/FOPn84l9PpkUxUYIyLx2QiR9NTOf/wef6VjKF88K05T0TFmuDoBgEIDIMAooJCaN1CiH7kDjnQTA40JiqG8bH1ZLNEVDwZegaGAAS6QABR0UxRQHEFR3KAHFg3BxAVXfi0FEFUdCNOeAkBCDwRAScqfv78KfrBtu6HIv0oqMgBcoAcWD0H9O+u/v398eOH6N9j/u0uAUTF7sYGzyAAgR0gcHV1JTc3N/Lw8GBEhX7A8YABOUAOkAPt5YD+/dW/w/r3mH+7SwBRsbuxwTMIQGAHCOiZRf0g0zNkPGBADpAD5MDT5ID+Hda/x/zbXQKIit2NDZ5BAAIQgAAEIAABCECgEwQQFZ0IE05CAAIQgAAEIAABCEBgdwkgKnY3NngGAQhAAAIQgAAEIACBThBAVHQiTDgJAQhAAAIQgAAEIACB3SWAqNjd2OAZBCAAAQhAAAIQgAAEOkEAUdGJMOEkBCAAAQhAAAIQgAAEdpcAomJ3Y4NnEIAABCAAAQhAAAIQ6AQBREUnwoSTEIAABCAAAQhAAAIQ2F0CiIrdjQ2eQQACEIAABCAAAQhAoBMEEBWdCBNOQgACEIAABCAAAQhAYHcJICp2NzZ4BgEIQAACEIAABCAAgU4QQFR0Ikw4CQEIQAACEIAABCAAgd0lgKjY3djgGQQgAAEIQAACEIAABDpBAFHRiTDhJAQgAAEIQAACEIAABHaXAKJid2ODZxCAAAQgAAEIQAACEOgEAURFJ8KEkxCAAAQgAAEIQAACENhdAoiK3Y0NnkEAAhCAAAQgAAEIQKATBBAVnQgTTkIAAhCAAAQgAAEIQGB3CSAqdjc2eAYBCEAAAhCAAAQgAIFOEEBUdCJMOAkBCEAAAhCAAAQgAIHdJYCo2N3Y4BkEILADBH7//i1XV1fy7t07HjAgB8gBcuCJckD/Dp+dne3k4+LiQn7+/LkDn1hP6wKi4mn5MzoEILDjBPSD7MuXL3J7eytfv37lAQNygBwgB1rOAf37q3+HVVR8/vx55/jPZjNRYTH0f4iKoWcA84cABOYS0CsUKibu7u7k/v5evn//zgMG5AA5QA60lAP6d1f//urfYRUV+vzr16+dejjf5n6YDOAgomIAQWaKEIDA+gRUVOiH2o8fP+Th4cFc4tbL3DxgQA6QA+TA9nNA/+7q31/9O4yoWP+zrI2eiIo2KDMGBCDQWQIqKvTqhBYPu3Z2DH9262wl8SAe5MB2ckD//urfYUTFbn+UIip2Oz54BwEIPDEBFRV6lkyLBb1pmwcMyAFygBxoNwf076/+He61qPj9p1y/eyMnxxOZTMYyHhePyUSO/3gj76//lL+e+PNw0fCIikWEOA4BCAyaAKKi3eKBYg3e5AA5kOZAv0XFvXw6n8pERcTkWE7+473MLj/J7bc7ufvPT/Jx9l7e/HFsRcarqZz/7/ud/UxGVOxsaHAMAhDYBQKICgqctMDhNTlBDrSbA70VFY838n46kfHkSE4/LLgS8ftPmZ0dyXg8kem7G3nchQ/IxAdERQKElxCAAARCAoiKdosHijV4kwPkQJoDvRQVjzfy9t/HMj56LVd3y0uE+6vXcjQey/Hb3RMWiIqwemAbAhCAQEIAUUGBkxY4vCYnyIF2c6B/ouJRbv7jSMaTU/n4PfnQWeLl/cdTmYyP5PxmeTGyhNmNmyAqQoQv92U0GsWPZwdyGbbZ6e1LOXg2kv2Xmzpp7UQsOsUhnf+h7Gtcnx+mB8rXVweyN9qXOS3Ktk+2tWF8zRyT/N75OT8ZbD8woqLd4oFiDd7kADmQ5kDvRMXX9zIdT+T08sF/1viNx1uZvZ7K0auJTI6n8np2m1nq9CAfzyYynr6Xr77j028gKooYHD7XYistKrWIS/c9fdDqPdiw6FTDReG59yKWUofPu8ShnlDtkcGIijiOly/2MnlfS2mQBxAVFDhpgcNrcoIcaDcHtiEqXv/r/yX/35tmvgJ31R+/+6xXKf79bUYQ/Clvj+23Pk1UVBTfAnX89s/q5+/Xt3I8PpI3X6qHnmoPokJETGHV6TPxLn02FRX2jP7mVzqcPx16HqioENGY78nBVYdi1bKriIp2iweKNXiTA+RAmgNNi4rX/+/f5B91BcM//k3+ZwPCYjVR8UnevBrL9N1d9dPs+rX5FqjpxZ29OvF4Jxd/6LdCvZbrSus7eT8dy+TNp8qRp9qBqDBF1XJLhpz4ODRnd0eiZ/Pdvui8vi6j8iLFFvra1l4NKZafZJbi2LPG5fKU9GpBNUmsbbdMae/FYXX5U7LkZZ7N7Fyqg5o90VxGKT8nTmL/IrGSLDVzx7I+ZHnaudq5F0VxaNPzV3fLGPjpRFz25OBlZvlT1GYUxNRacb6G+WCOhH7UsHExm7skq/Dbtd00vvYqVHylIicq4tim7SXOYydIDKtUnMSCJc8rzpHyfWMZx76keVacEPBLFtPxfbQ32kBUUOCkBQ6vyQlyoN0caFJUGEHxj3+Tfzl6L//+//xN/rEBYbGSqHi4kKm5H6L60XT3birj8VTefyuPmXsvxsfy9j/LfW7LHPvjQjKLqFyTVp8RFaYYqhZOuSiYomhkxYQ77gqlRaJCC0NXOLsiNywoTfEUFcK2MK8XAUUxFogT558fp1LouWLfeR8/qw/147m21XHdkik/biHURq7gdFeD3PKy1K+rAzko7gNZnmdZQPrC0/NL2SWiwoyfiYfzT6dqhEE5hu5KY+R4R8xMvyCforkmfqhoeFF3F0eVsxvPc45sGw/NvSP+uAuZezbtA9/cnIIcMnMMXqfxSBnIywN7laPii/OnZOj8D3ml4x2+cPcwVedfybOUtfPFzbehZ0RFu8UDxRq8yQFyIM2BpkRFKShuzA+a/vp104iwWElU/HkuRyoqMiuaRP6SH9/Ln7j768u5HOsSqKM38jnzmfbn+ZGMj88layrTftu7EBVamPhitMBtihV3xSAtiuKiLC26jIXIZqY40kZhQZQtyIo2qW8uI8L+bl9xZtsVlVqwhQWcNjP+BkWj75r0LfcnW9lxU7tpUa82dF/BMlPculGW5RnNK8MvnmdczKeFrBk78ilu73yL5uBYhkKkhmEZB2vXxae0m9nKco77l3bL/vG8y/1my8zR5bV9jnyJGLi+y8XNFvzle8X2DvpmeVmhFsXSDZudf5Jn2qbu/eHsNPCMqKDASQscXpMT5EC7OdCEqKgKCnc/xebCojlRUX5o2W94sj+I97bmW54QFSWv3diqKV6sc5miKCli1iqC1XhYwNX5ELZJaGXHjYpaW4C6pTPRczIHa7qukI4Hzo+bCiDlFl4JUBvhvtK3tKDM2o+Kx4yfGU7GjhdPYZ9wO5hbZCP0NWgT8S0K3Iil7RexdktzCl+MX7ov6heOYbezHKLxS4aV8epsR3OsXnmxQjcWHc62io+8T4XvxvYSoiL1zeS+jrmEWNeholwoeUfiqIpzoz2IinaLB4o1eJMD5ECaA5uKinpB4YTFL3Ft1rnHYiVRMWf5U/lhdWtv2FTeSVUAACAASURBVF7wlbMsfyqJ7ciWFiZpMeRci4/liqrcvrjwWaKIjQolN3YiPILdumnG9UWzO2jHsgVWzbiuaeY5ewY/aZcfN1/sxYWeLQBz+yrLpHKFp9+XmVdSLKvLsZ9hn5BRMLnIRhz3slXctxr73BzL3uGWYZ0spQuPx/67I+H44Zzc8QXP0Ry1bWLDFPhxcR9azPtUtFhXVBTdjW0VW6H4quR3mmfh2FVhEvq+yTaiggInLXB4TU6QA+3mwCaiwomFfzlyS55KIaF2w4dru6qwWElUyJwbtf2Hlf0WqOy3Pvk23KjtUezSRn0xHReX1SIyX+TE7ZLCzU08FBLZgixv23WPlk/5nXFRWz8v3yHeqPMjbFVTeMYFZ+yH7Z7bZ49EfUMuxbgLeVaK5XmiojhDnxas0bxqYhYu4XLCxYsddbauXzGR9Cnjt28S+eP2xgzXi28iGsJxFsU/bOtc8s/qWyLOE3txHH3HYCOwUTNWlCtBT91UHumVr6TJWi8RFe0WDxRr8CYHyIE0B9YXFf8u//J//g/5n0sICicuXv/r/5D/4/8ey10iONzx3PNqokKk/itlV/iY4itlV4DValNbrFWXpARFTraIdFcTgqU+ppAKl7fYQjM8Gx8vBbITNQViVKBan+Iz+yEUezwsooyNcNlR4Utk4+V+cMN4aM9um6IttFE0KX+nophPWJQnxWNuftG+xIeoOE59ruEZzjtaSlb4GxefSbFvCtawAC7iHy7BqbSpipFskZzpd/liv/jK1kPZD7nVFM52CluIr2GZiIpCCLkrBNU8vJSD53NunvY3R6d5Uc37Kq/Qtnsvubik9tLjKhwdVyWWxLjIgyaeEBUUOGmBw2tyghxoNwfWFxXxlYicIGhi36qiQub9+J1+cD1ey+tXY5m8vs788J02KH78LvtbF0188q1ngxu1A26uKHfryPU5LF6rRZHtbPa7tfMqDLRY9ALBFTvhV6DGdp0L6fiRGHCNomdXDLubbu1YUT9TuAbr5L1fkaH4hSvk3ZwSDq6AKzm5QtCZsX5FfoT3VKT2w0LbiTc3di3P4Pu2MsWyiYm362IQ9Im47MthxkblHgNvz85zqXwIlvRUuaUFvuPnnhuOb26OOlTBwsbLsipjGwhm41Z6PJhDFFfNCfW/zI0crzjny7aWQDpWcjyKYf495Uhu8oyoaLd4oFiDNzlADqQ50DtRIY9i7oeou2digaiwN3EfyXnNDdybfOZt0hdRsQm9pfpmCtql+tEIAhDYBQKICgqctMDhNTlBDrSbA/0TFXo14kbe/vtYxq9OZXb3uOTH3aPcXb6Wo/FYjt/e1FzFWNLUFpohKrYANTaJqIh58AoC3SKAqGi3eKBYgzc5QA6kOdBLUaEfhY838n46kfHkSE4//CnlL1RkPid//ymzsyMZjycyfbd7gkI9RlRk4tbsLkRFszyxBoF2CSAqKHDSAofX5AQ50G4O9FZUmI+ze/l0PpXJ2P4mxcl/vJfZ5Se5/XYnd//5ST7O3subP45lrMdfTeX8f9+3+yG4wmiIihVg0RQCEBgeAURFu8UDxRq8yQFyIM2BfouK4nP1959y/e6NnBxPZKK/oq0iwgiNiRz/8UbeXy+4krEDH8+Iih0IAi5AAAK7SwBRQYGTFji8JifIgXZzYBCiYnc/Bpf2DFGxNCoaQgACQySAqGi3eKBYgzc5QA6kOYCo6ManL6KiG3HCSwhA4IkIOFHx8+dP88ur6YcdrymAyAFygBzYXg6ooNC/vz9+/JCzszPR34TQfbv0WPl3Kp7o82zbwyIqtk0Y+xCAQKcJXF1dyc3NjTw8POzUh9gufaDiy24VOMSDePQtB/Tvr/4dVlHx+fNnIyy0kN+Vx2w2k4uLi05/1jXhPKKiCYrYgAAEektAz0CqsNArFjxgQA6QA+TA0+SA/h1WUbGLDxUUejVl6P8QFUPPAOYPAQhAAAIQgAAEIACBDQkgKjYESHcIQAACEIAABCAAAQgMnQCiYugZwPwhAAEIQAACEIAABCCwIQFExYYA6Q4BCEAAAhCAAAQgAIGhE0BUDD0DmD8EIAABCEAAAhCAAAQ2JICo2BAg3SEAAQhAAAIQgAAEIDB0AoiKoWcA84cABCAAAQhAAAIQgMCGBBAVGwKkOwQgAAEIQAACEIAABIZOAFEx9Axg/hCAAAQgAAEIQAACENiQAKJiQ4B0hwAEIAABCEAAAhCAwNAJICqGngHMHwIQgAAEIAABCEAAAhsSQFRsCJDuEIAABCAAAQhAAAIQGDoBRMXQM4D5QwACEIAABCAAAQhAYEMCiIoNAdIdAhCAAAQgAAEIQAACQyeAqBh6BjB/CEAAAhCAAAQgAAEIbEgAUbEhQLpDAAIQgAAEIAABCEBg6AQQFUPPAOYPAQhAAAIQgAAEIACBDQkgKjYESHcIQAACEIAABCAAAQgMnQCiYugZwPwhAAEIQAACEIAABCCwIQFExYYA6Q4BCEAAAhCAAAQgAIGhE0BUDD0DmD8EIDCXwO/fv+Xq6krevXvHo0MMNGYaO/5BAAIQgEA7BBAV7XBmFAhAoKMEtDj98uWL3N7eytevX3l0gIHGSmOmseMfBCAAAQi0QwBR0Q5nRoEABDpKQK9QqJi4u7uT+/t7+f79O48dZqAx0lhpzDR2/IMABCAAgXYIICra4cwoEIBARwloYaqF6o8fP+Th4UF+/vzJY4cZaIw0VhozREVH33S4DQEIdJIAoqKTYcNpCECgLQJamOrVCRUTv3794tEBBhorjRmioq13CeNAAAIQEEFUkAUQgAAE5hDQwlTPfKug0Bt/eew+A42VxmxjUfF4J58/nMvp9Egmk7GMx8VjMpGj6amcf/gsd49zkodDEIAABAZEAFExoGAzVQhAYHUCiIrdFxGp0NtcVDzK7exUjlRITI5kenYuF7Nrufl2J3ffbuR6diHnZ1N//HR2K2iL1d9b9IAABPpFAFHRr3gyGwhAoGECiIqhiYp7uTo7kvF4ItPz6/lXIh7v5Pp8KpPxWI7OruS+4dzDHAQgAIEuEUBUdCla+AoBCLROAFExJFFxLx/PJjKeTOXtl7+WzrXHm/cynYxlcvYRYbE0NRpCAAJ9I4Co6FtEmQ8EINAoAUTFcETF/exEJuNjOb9ZfTHT4825HI8ncjLjekWjb0CMQQACnSHQG1Fx+Hwko9GeHMz5rSPbZl8Oc+F5ub+wf9ntUPZHIxk9z1oqm7WxdXUge6OaOS07vpm78nOPVexdysGzkey9uDSjXb7YW5rj3Hgs6/uCdnaMkey/FJGrA9kv/FzQbfXDJg6OX5yLqzBZfeCih4nhcnGz/hRM1h6w5Y46v2cHYrOs3bERFQMRFY/X8noyluO3f2YS7F4+vTuR41cTmbw6lpN3n7JXJP58eyzjyWu5Xl2TZMZkFwQgAIFuEeiZqJhT6PuiL1N46bEnKlg2TpcNRYUtMGMmly/254qz2OdYVMTHVntlfGlSqCkbY8/6uEh0ruZt0DonSF/uWyETNNvqZkVUqPDNiOyISeb4Vp3cwDiigm+dWuGbt9a5Ufvhw4kRBFcVQfBgl0TpNz8ZUWG/AUqXOj2kKf14ZYTJyYfKkbQlryEAAQj0jkCvRMXe8/3as/amYH22lz9+dfkkZ0AbyaaNREUTgqAJG5ZE46KiEcCLjZirIU2KocVDVlssKSouXx4GuX4pl3Ou7FUHecI9iApExVZFxYNc/KH3RFxXk/zbe5nqjdhvPom9y+Iv+fRGb+Seyvtv1ebXek/GHxdVwVFtyh4IQAACvSLQL1Hx4jBailNGqjhr+7K6VMgtj7FLf8ozt9Uz+HbJk13mkxTSrqAzz8USmOgMud1nluCUTolIsYxqlWVHRkS4ZTZ7cpCZk4R+jOYvc1mqII7GHCXLUGpYhPNM+xcFuBV6uqTF2iiXX5XLqdK5uGVWpfmEYXTFKTmWWyY2j9W8Y6UDUs4j2BluGjvuapDjZXM1yrtwvMw84vyxdvy+cIzQjsmteOySs9uvzlpW+y/jWHj7bj6J7fh43HeU8LbvqSB35wmaaJx9OdTXERORNDdiX5zDmz+z/GkIy58+yZtXYzmZVS5TiFy/lsl4Iq8DvfE4OzG/WXGaWY9njr16I582Tz0sQAACEOgUgZ6JiktbaOSKD91XOat/KPvBGea4OHTFX3CvgG8bH/PFjTseFNGu0LEFVVDEFW3ccc2aSps0lSp9XBEX2DXFWPDa9CnFUmpS7zPY08IzZeYaGntxfyNEfPsci3T8UNhcysELey9KzLuYv2NYjH/4PLUV+mIL4VBoHL4o1t1XWGX4zmOVcrs6kAO9LyP7z4mXwNewXTSOi1k5Dy9sPdN0Xq7gD41aOz5/ojG0nfYpxzA9k3tKYkHp5lD2qeRjOkaGUXjPSmQ/7fvyoH6JnWlb+uEET5Sjqb3UlxDVhtuIiiGIio9yOh7L6cdcsjzKw/cH/zsUj3czOX2lS6BOZJZb5fTxVMbjU8mayplnHwQgAIGeEOifqCjOevtiK3xtCo+awk8Dmh73r9MCbUEhrSWd3jgeFcixjepxdSApFJMky/bxPtb3135h4Z2Y9eOaM9iRz8k8fcdwLkmbpNibN/YyosIPaTZiPqZ/5G/ZOssq4hvbcj29vxFXd3T+sxkzJ9AiJgkvNWnGCovoVGDZgr/Mae2U+B+NocfDGNX4rX1qhUxqIxmvMOl55YYI7YfbubZ+X4aPHov6r+GLt7/6BqJi6KKizBn7DU8qKCZy+rHmW54QFSUwtiAAgUER6KGoSAqysDgMt12YzT63JEOfY9HhCsW4KE8KHy14Mv3iPmGRl/R3vhRiJO7nDtb0ieZki89yeUswr5ri21m3z66/Y2Bfx8WstgyLusSviEVdfzvacqLC2g/nZP1Jxo0mUn+sLILdXANGbhmaYVWOm49HNGDwwvULRELEJONbFMOAjY9ZjqO142MTjaE2tE/gg/PQtAvmnIgKb8+0D8ddxKsYYIF9jWM8hnPMPYdjun2pqFjSl6D7JpuIiiGIijnLn4Lk+XimgmL+V86y/CkAxiYEIDAoAr0UFWFBVRaR7oywK5jdcpig8Kor7kbpmf6kMKwUdPZKRVyMaiHkxkoKwiDlIn+D/XEhHxyIfK4pyILmizfDuYU+hz1D/8P2bp27Y1zX39paKCrM3EL21XHzBWrYLvQ7jMuyrGy7Vb85yohRJwqi/Eh4qXtRDAM2rr+/3yGcSzLHaAxtV2VvfArFr/ZZUVTkeVu/5tsvfC9imorwcmZVv82xhb6WFpreQlQMQVTMuVHbJ5T9Fqjstz75NiLcqB3AYBMCEBgUgZ6KClc8HgSFfFq8JUWZhj0t7txr9+xTIykMKwWdGz+8iy8ulqKiM7FbV7hl+0RjJ355u6tt6DhWENXZC+eStFnBn0Wiorq8yY7l+GR5FFPNHwv7J34vQFT1ZX6HqP0iJpX8Sq62RVeG3Lgag+CsfzSGtgljlHudP/vv2NpRwjEW8UrHS+07vwvLPsfi/U48x4K84OEF0CJfUpubvUZUDEFUiNR/pewK+cNXyq4Ai6YQgEDfCPRWVFiBkNzXkBRvceFpC5XyDGpcuOTa+sKnUtAtFhXOv7CIS4vsSrKZcdzVDj1qi77SZ3elIGyjBVnd707oHN1VhWI0wyjoXxnTzq28XyTmZG9aD2xW+i+4UdsXjm4upS3DJyykja9BYa1EFt2oXbEfzFUXdjlWye9MxPGPI3P4PLbh4uJjG+VHwktNJXmpuyJRovPSe3QC383rkEU0hloIBYGxmHwzWpE73mbaPmOjEsuAVyF8/HvC5WZh33NVs5W2Zqf/z8a5jLt7r4Tzt3kWc4/H8OY23kBUDENUyNwfv9M0+irvp2MZT9/L15qscj9+V/2ti5oO7IYABCDQIwL9FRWmcImLjmrx5opyXWMefz1rWsS5Ii17Br9S0C0hKjSJiqLY3y/gC7w5GWbGcmvi9+WwriB19wfos19GU7XrilPvg1+iFbSNxkztJUVyhoX/dqzCJ1d4VkVUGQ/XJvRvr/jKYF+s5xiGc12CrxMqfv6uf9rX7Q+wuM2KjbDY10YRk4SXn0NQRGdEhcs/56f76lfPIhrDelb6VdiO5pR+TesSosL5VZdb8+wnOeTi6ximz6XvhZjS/sn7I2qzIM9T+6u8RlQMRFSIyP3sRCa190zMFxX2Ju6JnMxqbuBeJeloCwEIQKCDBHojKjrIHpcbI3Ao+0nB2ZhpDA2eAKJiOKJC5N7+evbkWM6/2J+6W+YN8NeXtzKd6I/nfRQkxTLEaAMBCPSRAKKij1Ed3JzcFY74bP/gMDDhrRBAVAxJVGgK3cvVmf5i9kSm59dyl/k9PJ9oj3dyfT6Vif7i9tkVgsKDYQMCEBgiAUTFEKPeyznrsqJkuVsv58mk2iaAqBiaqNAMe5Tb2akcTcYynhzJ9OxcLmbXcvPtTu6+3cj17ELOz6b++Ons1v84Xtv5yXgQgAAEdoUAomJXIoEfaxPwa+tZArU2QzrWE0BUDFFUFPnweCefP5zL6fRIJiowxsVjMpGj6amcf/g8/0pGfVpxBAIQgEDvCCAqehdSJgQBCDRJAFExYFHRZCJhCwIQgEDPCSAqeh5gpgcBCGxGAFGBqNgsg+gNAQhAYBgEEBXDiDOzhAAE1iTgRMXPnz/l169f8vt394rsIfmsMdJY/fjxQzR2/IMABCAAgXYIICra4cwoEIBARwlcXV3Jzc2NPDw8GFGhRSuP3WagsdKYaez4BwEIQAAC7RBAVLTDmVEgAIGOEtCz/Fqc6llvHt1hoDHT2PEPAhCAAATaIYCoaIczo2yFgP11avcr0/55zq9fb8WNto2aX65e8zc5kl+29sz0F6nX+vas3C9xrwIk/YXxTe2tMjZtIQABCEAAAhBoigCioimS2HkCArYg3X/5BEM/5ZCbiIrQbxUYawmJ0MimIgBREdJkGwIQgAAEINBVAoiKrkYOv0UEUbFRGiAqNsJHZwhAAAIQgAAESgKIipIFW50jsEhU2ON+iY8/K+/OrsfH915cRgQOn4/E9x1lfq3bXDEI2oTLrtJjfuxiiGQZ0tyrLZGtPTl4eSB7o2T50yr23CwrosJxsc8jN0Y0/khG4TzF9VmXpe1Xss/bq/BJfUr5ujnyDAEIQAACEIBAKwQQFa1gZpDtELAFaaXgLAYzoiAogA9fHIiVDa5oDoWC3RcVt0Ff86vdYeFaFLXl2Jdy8OLQjmwK/NC2iPHF9Td9g+NXB3JQt4QrN84zFTKBqDDjBa9T+3Xwa0RFZFuvB73YlwP/JTqu6HdGN2WZFxWjQMTZX0wP5reIr3ONZwhAAAIQgAAEWiOAqGgNNQM1TyA+O+6uKrhCXwv5UiSEo6cCwh6rCIewiynUy8K23nZaJDsjOmYhJBJbrkXuORVGpk3UPy+s6v0LRqkRFXlmZb/Y9qYsU145e3afjWva3vkV8HW7eIYABCAAAQhAoDUCiIrWUDNQ8wTyBbUfx5zRTs7qm4Nhkepbi6RFtineg+VN/upATf95tqP7P6zfKoLmF/A1BXQkKqwvTlBFz8GVlmCW5WY6X7+UqWzitoy40W+IKh6l3zUsUtu1LNM55uyF+8Jt550+L8iFsCnbEIAABCAAAQg0TgBR0ThSDLZHYLlC0i6fCe8FqClMg0LY9omXKJX3MWj/4Fg04bpjOV+tH+FSn8hUXaGcERXu6kzcf8GrYL62ZY5L4WMgUHJXKirjB7bns1xHVOTY5/gumD+HIQABCEAAAhBojACiojGUGGqfwCqFZFjs54pnvXdgr7gJOWM3KuTTQjiced2xcPywfThuvF9fmSsEQUFvWmjB7q+a1I1XtVXZExT+9liGS6WN9WnRlYr1WWZ8iK6g1M23nm9l3uyAAAQgAAEIQKBxAoiKxpFisD0CtsCsnCU3DlzKwXN3Y7aIGFHgznDbwrUszNPjaTFvx4nam8Le2dMBl7hR24mDl/sS+pwVDg5iZZyM75U26c3VzljyXBEMmYI+4iZ2iVi0bCvjT9Innl/KMhUJGR8iUeF8CNmn8UrmyUsIQAACEIAABLZOAFGxdcQMsD0CrkAt1/qbNf/FtyyZYtbfBxAWoa5wdQWx7R8W+lIUsvYeguW+xrU8e+8K38AvJygUhim6a47lYBnR4Nrvy6HpX940rl3sEiPXJlzqlTNY7FtGVKS2nx+aqyflXDdluYaoUPcjJkvOdw4KDkEAAhCAAAQgsBkBRMVm/OjdSQKuEG7AeS3wQ8HQgElMQAACEIAABCAAga4RQFR0LWL42wCBhkWFXg1xv0HRgHeYgAAEIAABCEAAAl0jgKjoWsTwtwECDYoK443ai5cjNeAkJiAAAQhAAAIQgEBnCCAqOhMqHN1FAv6+DZZA7WJ48AkCEIAABCAAgZYIICpaAs0wEIAABCAAAQhAAAIQ6CsBREVfI8u8IAABCEAAAhCAAAQg0BIBREVLoBkGAhCAAAQgAAEIQAACfSWAqOhrZJkXBCAAAQhAAAIQgAAEWiKAqGgJNMNAAAIQgAAEIAABCECgrwQQFX2NLPOCAAQgAAEIQAACEIBASwQQFS2BZhgIQAACEIAABCAAAQj0lQCioq+RZV4QgAAEIAABCEAAAhBoiQCioiXQDAMBCEAAAhCAAAQgAIG+EkBU9DWyzAsCEIAABCAAAQhAAAItEUBUtASaYSAAAQhAAAIQgAAEINBXAoiKvkaWeUEAAhCAAAQgAAEIQKAlAoiKlkAzDAQgAAEIQAACEIAABPpKAFHR18gyLwhAAAIQgAAEIAABCLREAFHREmiGgQAEIAABCEAAAhCAQF8JICr6GlnmBQEIQAACEIAABCAAgZYIICpaAs0wEIAABCAAAQhAAAIQ6CsBREVfI8u8IAABCEAAAhCAAAQg0BIBREVLoBkGAhCAAAQgAAEIQAACfSWAqOhrZJkXBCAAAQhAAAIQgAAEWiKAqGgJNMNAAAIQgAAEIAABCECgrwQQFX2NLPOCAAQgAAEIQAACEIBASwQQFS2BZhgIQAACEIAABCAAAQj0lQCioq+RZV4QgAAEIAABCEAAAhBoiQCioiXQDAMBCEAAAhCAAAQgAIG+EkBU9DWyzAsCEGiEwO/fv+Xq6krevXvHo0MMNGYaO/5BAAIQgEA7BBAV7XBmFAhAoKMEtDj98uWL3N7eytevX3l0gIHGSmOmseMfBCAAAQi0QwBR0Q5nRoEABDpKQK9QqJi4u7uT+/t7+f79O48dZqAx0lhpzDR2/IMABCAAgXYIICra4cwoEIBARwloYaqF6o8fP+Th4UF+/vzJY4cZaIw0VhozREVH33S4DQEIdJIAoqKTYcNpCECgLQJamOrVCRUTv3794tEBBhorjRmioq13CeNAAAIQEEFUkAUQgAAE5hDQwlTPfKug0Bt/eew+A42VxmxjUfF4J58/nMvp9Egmk7GMx8VjMpGj6amcf/gsd49zkodDEIAABAZEAFExoGAzVQhAYHUCiIrdFxGp0NtcVDzK7exUjlRITI5kenYuF7Nrufl2J3ffbuR6diHnZ1N//HR2K2iL1d9b9IAABPpFAFHRr3gyGwhAoGECiIqhiYp7uTo7kvF4ItPz6/lXIh7v5Pp8KpPxWI7OruS+4dzDHAQgAIEuEUBUdCla+AoBCLROAFExJFFxLx/PJjKeTOXtl7+WzrXHm/cynYxlcvYRYbE0NRpCAAJ9I4Co6FtEmQ8EINAoAUTFcETF/exEJuNjOb9ZfTHT4825HI8ncjLjekWjb0CMQQACnSHQG1Fx+Hwko9GeHMz5rSPbZl8Oc+F5ub+wf9ntUPZHIxk9z1oqm7WxdXUge6OaOS07vpm78nOPVexdysGzkey9uDSjXb7YW5rj3Hgs6/uCdnaMkey/FJGrA9kv/FzQbfXDJg6OX5yLqzBZfeCih4nhcnGz/hRM1h6w5Y46v2cHYrOs3bERFQMRFY/X8noyluO3f2YS7F4+vTuR41cTmbw6lpN3n7JXJP58eyzjyWu5Xl2TZMZkFwQgAIFuEeiZqJhT6PuiL1N46bEnKlg2TpcNRYUtMGMmly/254qz2OdYVMTHVntlfGlSqCkbY8/6uEh0ruZt0DonSF/uWyETNNvqZkVUqPDNiOyISeb4Vp3cwDiigm+dWuGbt9a5Ufvhw4kRBFcVQfBgl0TpNz8ZUWG/AUqXOj2kKf14ZYTJyYfKkbQlryEAAQj0jkCvRMXe8/3as/amYH22lz9+dfkkZ0AbyaaNREUTgqAJG5ZE46KiEcCLjZirIU2KocVDVlssKSouXx4GuX4pl3Ou7FUHecI9iApExVZFxYNc/KH3RFxXk/zbe5nqjdhvPom9y+Iv+fRGb+Seyvtv1ebXek/GHxdVwVFtyh4IQAACvSLQL1Hx4jBailNGqjhr+7K6VMgtj7FLf8ozt9Uz+HbJk13mkxTSrqAzz8USmOgMud1nluCUTolIsYxqlWVHRkS4ZTZ7cpCZk4R+jOYvc1mqII7GHCXLUGpYhPNM+xcFuBV6uqTF2iiXX5XLqdK5uGVWpfmEYXTFKTmWWyY2j9W8Y6UDUs4j2BluGjvuapDjZXM1yrtwvMw84vyxdvy+cIzQjsmteOySs9uvzlpW+y/jWHj7bj6J7fh43HeU8LbvqSB35wmaaJx9OdTXERORNDdiX5zDmz+z/GkIy58+yZtXYzmZVS5TiFy/lsl4Iq8DvfE4OzG/WXGaWY9njr16I582Tz0sQAACEOgUgZ6JiktbaOSKD91XOat/KPvBGea4OHTFX3CvgG8bH/PFjTseFNGu0LEFVVDEFW3ccc2aSps0lSp9XBEX2DXFWPDa9CnFUmpS7zPY08IzZeYaGntxfyNEfPsci3T8UNhcysELey9KzLuYv2NYjH/4PLUV+mIL4VBoHL4o1t1XWGX4zmOVcrs6/wN4hwAAIABJREFUkAO9LyP7z4mXwNewXTSOi1k5Dy9sPdN0Xq7gD41aOz5/ojG0nfYpxzA9k3tKYkHp5lD2qeRjOkaGUXjPSmQ/7fvyoH6JnWlb+uEET5Sjqb3UlxDVhtuIiiGIio9yOh7L6cdcsjzKw/cH/zsUj3czOX2lS6BOZJZb5fTxVMbjU8mayplnHwQgAIGeEOifqCjOevtiK3xtCo+awk8Dmh73r9MCbUEhrSWd3jgeFcixjepxdSApFJMky/bxPtb3135h4Z2Y9eOaM9iRz8k8fcdwLkmbpNibN/YyosIPaTZiPqZ/5G/ZOssq4hvbcj29vxFXd3T+sxkzJ9AiJgkvNWnGCovoVGDZgr/Mae2U+B+NocfDGNX4rX1qhUxqIxmvMOl55YYI7YfbubZ+X4aPHov6r+GLt7/6BqJi6KKizBn7DU8qKCZy+rHmW54QFSUwtiAAgUER6KGoSAqysDgMt12YzT63JEOfY9HhCsW4KE8KHy14Mv3iPmGRl/R3vhRiJO7nDtb0ieZki89yeUswr5ri21m3z66/Y2Bfx8WstgyLusSviEVdfzvacqLC2g/nZP1Jxo0mUn+sLILdXANGbhmaYVWOm49HNGDwwvULRELEJONbFMOAjY9ZjqO142MTjaE2tE/gg/PQtAvmnIgKb8+0D8ddxKsYYIF9jWM8hnPMPYdjun2pqFjSl6D7JpuIiiGIijnLn4Lk+XimgmL+V86y/CkAxiYEIDAoAr0UFWFBVRaR7oywK5jdcpig8Kor7kbpmf6kMKwUdPZKRVyMaiHkxkoKwiDlIn+D/XEhHxyIfK4pyILmizfDuYU+hz1D/8P2bp27Y1zX39paKCrM3EL21XHzBWrYLvQ7jMuyrGy7Vb85yohRJwqi/Eh4qXtRDAM2rr+/3yGcSzLHaAxtV2VvfArFr/ZZUVTkeVu/5tsvfC9imorwcmZVv82xhb6WFpreQlQMQVTMuVHbJ5T9Fqjstz75NiLcqB3AYBMCEBgUgZ6KClc8HgSFfFq8JUWZhj0t7txr9+xTIykMKwWdGz+8iy8ulqKiM7FbV7hl+0RjJ355u6tt6DhWENXZC+eStFnBn0Wiorq8yY7l+GR5FFPNHwv7J34vQFT1ZX6HqP0iJpX8Sq62RVeG3Lgag+CsfzSGtgljlHudP/vv2NpRwjEW8UrHS+07vwvLPsfi/U48x4K84OEF0CJfUpubvUZUDEFUiNR/pewK+cNXyq4Ai6YQgEDfCPRWVFiBkNzXkBRvceFpC5XyDGpcuOTa+sKnUtAtFhXOv7CIS4vsSrKZcdzVDj1qi77SZ3elIGyjBVnd707oHN1VhWI0wyjoXxnTzq28XyTmZG9aD2xW+i+4UdsXjm4upS3DJyykja9BYa1EFt2oXbEfzFUXdjlWye9MxPGPI3P4PLbh4uJjG+VHwktNJXmpuyJRovPSe3QC383rkEU0hloIBYGxmHwzWpE73mbaPmOjEsuAVyF8/HvC5WZh33NVs5W2Zqf/z8a5jLt7r4Tzt3kWc4/H8OY23kBUDENUyNwfv9M0+irvp2MZT9/L15qscj9+V/2ti5oO7IYABCDQIwL9FRWmcImLjmrx5opyXWMefz1rWsS5Ii17Br9S0C0hKjSJiqLY3y/gC7w5GWbGcmvi9+WwriB19wfos19GU7XrilPvg1+iFbSNxkztJUVyhoX/dqzCJ1d4VkVUGQ/XJvRvr/jKYF+s5xiGc12CrxMqfv6uf9rX7Q+wuM2KjbDY10YRk4SXn0NQRGdEhcs/56f76lfPIhrDelb6VdiO5pR+TesSosL5VZdb8+wnOeTi6ximz6XvhZjS/sn7I2qzIM9T+6u8RlQMRFSIyP3sRCa190zMFxX2Ju6JnMxqbuBeJeloCwEIQKCDBHojKjrIHpcbI3Ao+0nB2ZhpDA2eAKJiOKJC5N7+evbkWM6/2J+6W+YN8NeXtzKd6I/nfRQkxTLEaAMBCPSRAKKij1Ed3JzcFY74bP/gMDDhrRBAVAxJVGgK3cvVmf5i9kSm59dyl/k9PJ9oj3dyfT6Vif7i9tkVgsKDYQMCEBgiAUTFEKPeyznrsqJkuVsv58mk2iaAqBiaqNAMe5Tb2akcTcYynhzJ9OxcLmbXcvPtTu6+3cj17ELOz6b++Ons1v84Xtv5yXgQgAAEdoUAomJXIoEfaxPwa+tZArU2QzrWE0BUDFFUFPnweCefP5zL6fRIJiowxsVjMpGj6amcf/g8/0pGfVpxBAIQgEDvCCAqehdSJgQBCDRJAFExYFHRZCJhCwIQgEDPCSAqeh5gpgcBCGxGAFGBqNgsg+gNAQhAYBgEEBXDiDOzhAAE1iTgRMXPnz/l169f8vt394rsIfmsMdJY/fjxQzR2/IMABCAAgXYIICra4cwoEIBARwlcXV3Jzc2NPDw8GFGhRSuP3WagsdKYaez4BwEIQAAC7RBAVLTDmVEgAIGOEtCz/Fqc6llvHt1hoDHT2PEPAhCAAATaIYCoaIczo0Bg9wlEv4hd/Mr8tk/0ujGLb+46fM5vjex+ouAhBCAAAQhAoEoAUVFlwh4IDI/Ay30ZjZLf+Xi5L/svt4vi8Hkxphl/JKPnh9sdEOsQgAAEIAABCGyFAKJiK1gxCoFuETh8TkHfrYjhLQQgAAEIQGC3CCAqdiseeAOBJyFgfkBw0Y8HuqVKI10aNZK9F5eBr4eyX+zXY+EVB//jhOZ4fDUkPpbaVPP6S+l2PGM38THuH9sOnGMTAhCAAAQgAIEtE0BUbBkw5iHQDQJOFNTc02AERVi02/Z2eZQt/EuRcSkHL4plTGZZU2Dz5YEcFPdpmKsjkUiwNiM7z2KhEV1RmWO7G8zxEgIQgAAEINAfAoiK/sSSmUBgYwKmaNcrClGxL6L7y2LfDmOuEph7IKyoyN5/oYV/Ysv0roiUwvWwfbjtZmb6FSIld9y14xkCEIAABCAAgVYJICpaxc1gEOgCAbfkyF2ZcK+DZUhuqVMhGPwypIqAcFdARvFN3yoIRsEVDIclEA3ephvLPzu/amw7WzxDAAIQgAAEINAaAURFa6gZCALdIlAuNUqXN9XPw13pSK9qiBELKkoWXGVIRUVFpGTGTm1nmrALAhCAAAQgAIHtEkBUbJcv1iHQWQLl8ia7/Cm8+XrupAJhkLbzy6hMG3fFIWgVLmmqu5oRNA83ve1wJ9sQgAAEIAABCLRCAFHRCmYGgcBuE/C/F+HdDG/EFnFXGqL7JvzvWBzKfvj7EoEYuHyx72/Mdt/k5K5imKsa0ZWIZEz3zU+hbSnHmmfbT4MNCEAAAhCAAARaIYCoaAUzg0Bgtwnk7l+IBIS6b8RCcF+FFwTpPRfBvRJJHycoHA23XMp8Xewoue/CNCrvm7BtgqsbC2y7MXiGAAQgAAEIQGD7BBAV22fMCBCAAAQgAAEIQAACEOg1AURFr8PL5CAAAQhAAAIQgAAEILB9AoiK7TNmBAhAAAIQgAAEIAABCPSaAKKi1+FlchCAAAQgAAEIQAACENg+AUTF9hkzAgQgAAEIQAACEIAABHpNAFHR6/AyOQhAAAIQgAAEIAABCGyfAKJi+4wZAQIQgAAEIAABCEAAAr0mgKjodXiZHAQgAAEIQAACEIAABLZPAFGxfcaMAAEIQAACEIAABCAAgV4TQFT0OrxMDgIQgAAEIAABCEAAAtsngKjYPmNGgAAEIAABCEAAAhCAQK8JICp6HV4mBwEIQAACEIAABCAAge0TQFRsnzEjQAACEIAABCAAAQhAoNcEEBW9Di+TgwAEIAABCEAAAhCAwPYJICq2z5gRIAABCEAAAhCAAAQg0GsCiIpeh5fJQQACEIAABCAAAQhAYPsEEBXbZ8wIEIAABCAAAQhAAAIQ6DUBREWvw8vkIAABCEAAAhCAAAQgsH0CiIrtM2YECEAAAhCAAAQgAAEI9JoAoqLX4WVyEIAABCAAAQhAAAIQ2D4BRMX2GTMCBCAAAQhAAAIQgAAEek0AUdHr8DI5CEAAAhCAAAQgAAEIbJ8AomL7jBkBAhCAAAQgAAEIQAACvSaAqOh1eJkcBCAAAQhAAAIQgAAEtk8AUbF9xowAAQhAAAIQgAAEIACBXhNAVPQ6vEwOAhCAAAQgAAEIQAAC2yeAqNg+Y0aAAAQgAAEIQAACEIBArwkgKnodXiYHAQhAAAIQgAAEIACB7RNAVGyfMSNAAAIQgAAEIAABCECg1wQQFb0OL5ODAAQ2JfD792+5urqSd+/e8egQA42Zxo5/EIAABCDQDgFERTucGQUCEOgoAS1O//M//1O+f/8uP3784NEBBhorjZnGjn8QgAAEINAOAURFO5wZBQIQ6CgBvUKhYuLnz5/y69cv89Az4Dx2j4GLj8ZKY6ax4x8EIAABCLRDAFHRDmdGgQAEOkpAC1MtVv/66y95fHyU//qv/+Kxwww0RhorjRmioqNvOtyGAAQ6SQBR0cmw4TQEINAWAS1M9aqEion//u//5tEBBhorjRmioq13CeNAAAIQEEFUkAUQgAAE5hDQwlTPfGuhyr9uENBYacw2FhWPd/L5w7mcTo9kMhnLeFw8JhM5mp7K+YfPcvfYDSZ4CQEIQGDbBBAV2yaMfQhAoNMEnKjQqxT86wYBjdVmouJRbmencqRCYnIk07NzuZhdy823O7n7diPXsws5P5v646ezW0FbdCM38BICENgeAUTF9thiGQIQ6AEBREX3griZqLiXq7MjGY8nMj2/nn8l4vFOrs+nMhmP5ejsSu67hwqPIQABCDRGAFHRGEoMQQACfSSAqOheVNcXFffy8Wwi48lU3n75a+mJP968l+lkLJOzjwiLpanREAIQ6BsBREXfIsp8IACBRgkgKhrF2YqxdUXF/exEJuNjOb9ZfTHT4825HI8ncjLjekUrQWYQCEBg5wgMS1S83JfRaJR/PDuQSzmUfT3+/HDnArWuQ4fPk/n6ubUx10s5eDaSvReXS7hf+GPisETztptcHcjeaF/Wzoxs7u3JgfltrpjT5Ys9GY3csXUm2kZsQ7+K8Qo+ly/2i3mFbTbcVn5PlBuIig1j9wTd1xIVj9fyejKW47d/Zjy+l0/vTuT41UQmr47l5N2n7BWJP98ey3jyWq5X1ySZMdkFAQhAoFsEhiUqwtg8YZESurHutik8vUDIWbGFaiyQLuXguYqntv7FxbKIfb3/sjr+4fOiiNa4zJ1XtW8re5oQFbVFccqplRk1N8jLfTExNYxG2yn+n/D9iqhoLlXasrSOqHj4cGIEwVVFEDzYJVH6zU9GVNhvgNKlTg/phB6vjDA5+VA5krbkNQQgAIHeEUBUdDSkC0WFKfA2OdvdBJi0WK4TFYdyGAqNq8sWhc+S80RULAlqS80QFVsC20+zq4uKB7n4Q++JuK4C+fZepnoj9ptPYu+y+Es+vdEbuafy/lu1+bXek/HHRVVwVJuyBwIQgECvCCAqonCmRbBd1rH/0i3v0KVEdgmMXaJSLC2qnFm3dvxSq8oZ6tBeadO5YpYsJTZLEZHYHtUtL3K+O6vpczJXLdp0buY5nFc8XniVwfiUzi0q/oIx3Flsv/wsEDzhmMl8/Bhhm3TM4gpIPW+RdBlYOI+UjHkd+bsnBy8zy5+iNnVxKKxHXNIRA056yMy1XGrlGByaZVE2NnZJWZhHAc+CR7nszOVCfSzdVSTPMLPUK2YYjBfGJomfnWnoZzXfUxrmdWSzyMs07lGbkb1akjW22U6uVGzG7yl6ry4qPsmbV2M5mVUuU4hcv5bJeCKvA73xODsxv1lxmrnsa469eiOfnmLijAkBCEDgCQkgKiL4SXHn7rHwBVZQlLmivygsyyI1tVEUtLXtRUzR6MdI2hf+mTbOhhR9gtfRNMI+2SJPGyR+ugLN2QwKZje31E9X7Eafq2rHF3/JGDXLnw6flwW0mHHLgtWOGd7nYgvUsmBOx0j52ePRkqpKzBJ6leOFjSBGqZ9S5IpjlVi0QsFzSY8mczCxKJk4Bn7OLlbBfRem4Pf2E3s+j1Ou5Rg6n/3g3pdU2Mb2Vfgc+Psm5sXPcooL/jSPUhpWVJW+OrZlXlWFVzUeFatr70BUrI3uyTquLio+yul4LKcfcy4/ysP3B/87FI93Mzl9pUugTmSWW+X08VTG41PJmsqZZx8EIACBnhBAVESBzBdjUaGYFHzaXQuuqODzxV1h3BSptoBLizXbwo7rxsm1MYWYK/iXFBXGdlEg6xloZz8cM/I7LJqLeUXFuClOy2LP+JTOdQ1RUVAqnmIWuQI0YhGNV5gIeKdn/d1YkQ23s3jO8bdFa1mERzEv+s2zaf0orgC5qzWeXZJ3SY4Zu76tDpa0113hnCvHUyGmHXRfGctiCuVTyDWyXTbJb8Xxy7KsEZfWXmZueiD0p6Z/LiZ5H1fbi6hYjdcutG5WVJQzst/wpIJiIqcfa77lCVFRAmMLAhAYFAFERRTutKCxxVhUjEfFje0cFjOmAHRFY/SsBVxqvxw8tJErxNKCNX1dWqrZMoVqeMY/8cUcL4tmtRL6ZK3GhWi12M0Xf1641BSDrkgul96UAig3RrjPbEecXeFuC+awbUQmE0d7POHiOkWFtW0T+uu3o+LfdU65BPvNZjJmEovqHGz7KC8z/pXcM3mcu7LicsTxLOZSHT/vv2fgBWwyr6BbNbfcwZyvKT/bJhzPbwfC21nc9BlRsSnB9vuvLirmLH8K3P94poJi/lfOsvwpAMYmBCAwKAKIiijcaRGUKXAyxWhYIM0vwDLFYDF+aEO34ysE1eVOZpxVCyhTeLqz08lck0JW3Qp9sm4qD9e/8CktoiM+yRg5UWF8Cq70JG1yPMN94XYUyuJFLafIz7BnTYzmFu1h/5rt2vG0fcIpiUV1jhkf5/qXyeNEVJicC69UBf7WMlTX58Yv42eBp5pbjlucY25vfKUiNx/fsvENREXjSLducHVRMedGbe+t/Rao7Lc++TYi3KgdwGATAhAYFAFERRTupLhLCi/TNCi2XNeoQEoKQtfGPZvirSIG4uIrV8Sl/XJt3Bj1z2HBlsw143c0L2M07J+ePbajxgVwMkYiGLRHdR4ZFolwicbI+B3Nv+Z4ddyyV8raHEnsZNuUJqpb2j+ZR9ko4ZSMFc3XdIoZmV0biYokrmow9Dfxp/R7cfzynDL+e6MJi2J/zCDfxptoeANR0TDQFsytLipE6r9SdgWH+UrZFWDRFAIQ6BsBREUU0bRYyZwRDYutom9cfFsb8ZWGQ9l3QqI4sxsuXYkLpqKgC64I+PX4zoYrxmuL1OIMctBeXY3HSeaaKRzjeamFpPhM51K8LovnZIz0jLyaTMY1PvrlM6nPFnhuHrW8izGj48bP8oqLtRr8b3wKj9s8cN/8ZVqmc9ed7vcaAlN+M5M3/ljKJcckirXlGubQMvdURO0jwZzGqZivH9Mejxi6G7Vzvgbxc1cywrHj+JUU3JbNgWApXiWvXN6EMdJc2cKP7okIosJFpjvP64gKmfvjdzr3r/J+Opbx9L18rUHhfvyu+lsXNR3YDQEIQKBHBBAVUTDzxVVYEEVncIu++eLbre3X57j4cYWWXwfui7fSGXOG161tf36YOaPvCt1w6VDZ339jjrOhz9E4yVyT4lAt5ecVz8WJADMXtR8Vz8kYatSMEzMJ57r34tD8CrdjnitAq/tKFpZp7KNbXuR5p/EIsblt76f6ui+HprANCt1oLkWsI77OUPEc2Sva++I74WTalmNV52vbO0ZmhMi/xF4kIJxflpm34Qp3ky+5r3C1NkuGpX/z4lf6Vs45zkPnT/w8P69s26iN+p2I6Nji+q8QFeuze6qea4kKEbmfncik9p6J+aLC3sQ9kZNZzQ3cTwWDcSEAAQi0RGC4oqIlwAwDgT4R8L983qdJLZgLomIBoB08vK6oELm3v549OZbzL/an7paZ3l9f3sp0oj+e91GQFMsQow0EINBHAoiKPkaVOUFgSwTcVQl/hWNL4+ySWUTFLkVjOV/WFxVq/16uzvQXsycyPb+Wu8zv4XkvHu/k+nwqE/3F7bMrBIUHwwYEIDBEAoiKIUadOUNgAwK67Kj8utoNDHWkK6KiI4EK3NxMVKihR7mdncrRZCzjyZFMz87lYnYtN9/u5O7bjVzPLuT8bOqPn85u/Y/jBW6wCQEIQGBQBBAVgwo3k4XABgT8fRfpPSsb2OxAV0RFB4KUuLi5qCgMPt7J5w/ncjo9kokKjHHxmEzkaHoq5x8+z7+SkfjFSwhAAAJ9JoCo6HN0mRsEILAxAUTFxghbN9CYqGjdcwaEAAQg0F0CiIruxg7PIQCBFgggKlqA3PAQiIqGgWIOAhCAwBIEEBVLQKIJBCAwXAIqKn7//i3/9V//JVqs8m+3CWiMNFYaM40d/yAAAQhAoB0CiIp2ODMKBCDQUQJXV1dye3srj4+PRlRo0cpjtxlorDRmGjv+QQACEIBAOwQQFe1wZhQIQKCjBPSMtxanetabR3cYaMw0dvyDAAQgAIF2CCAq2uHMKEsScL+D4H+5eaVfSY5/JdraKn/5udaF4luNtvs1qe4XqYtvTnq5L6391oP+Qve8X/uuBVMe2CwupZ2lt9wvkJv4X8rB8wO5XLozDSEAAQhAAAIQaJsAoqJt4oxXQ6AouiMRsWoxGYuKmoGW2G19abTof7lf/LaD9XE0WkLsLOHpUk02EhVNxGUpL6NGh88tH/1NDBWY2xV80dC8gAAEIAABCEBgDQKIijWg0WULBMzVgk1//2CHRcUWkC1tchNR0UhclvaUhhCAAAQgAAEIdJQAoqKjgeuf28sJAnfm2i2Pis9gxzZM22TZT9rfXo0I+vkfeBuZM+SjUSl04iVA5X4fi7RveNUlPZb4pTZi+/GVjNjvzNjeCRFxS4dGOod9OcyIinljhaZEAjbxgejVPHv1vlvbLpajgFdsLzPfJXhGDvICAhCAAAQgAIGtEkBUbBUvxlch4IrPWCiUFkyhGRXjtigt28cFsLEXtLf2g2L96kAOXqr9uJ9IbvnToewHRW9qW4oit1wydSkHLw6t86bIjwvjdC7mdZ190z/w++WBHNR9qU1lrKJwDzjMHavE7beWisvKvlvGZewCXhqPOnvqVWWOhSAL5uidZwMCEIAABCAAgVYIICpawcwgSxMIzkCXBbqILdrjwtzY1ALTF5OxOIgLfz2W6W+MxP3yoiKZgfGzLPS1UC8L5LBtWjy7Y4E/iS3bIjgezdH1zz3XjBX2XzRWzqzumxuXkoPtvozvOeFWM3jkc80cjTCsi2+NXXZDAAIQgAAEINAYAURFYygx1CgBczZ6JH5JjHmdFq+u2HX7Y3EQiYq6/sbpuF+tqAgKa7tkJz9uzCG17Y4GRbWbq1mu5JZd2edweZaOGQktZ8o/14yl9p3wWjiWN5bfcP3dlQT3eg3f3RUQ71s44sqsA56hHbYhAAEIQAACEGiFAKKiFcwMshYBU1gWZ5/Dwjg0Fp3FjovqiqhwhXXY32zH/XKiwhbAwZnwyrjBsci+2s4dC4pgU5g7gRJ1jl/4Qruubc1YIbtlx4pHjl+lcVnmm6zm+G6WYwXf8LQe64Bn7C2vIAABCEAAAhBogQCiogXIDLEugaBIDgvZ0FxYMCf3RkSioq6/sbVIVGQKVmPPFff2+GbLn3LCI5xoub3qUqvlOZRjzN9aIi41Bmp99zzXZR34VDM2uyEAAQhAAAIQ2B4BRMX22GJ5FQJaVLolNUW/qBh2344UXW1IxUD8emH/BTdqhyLBnE33/tnCN/qtCXMFIBQGwY3HlWPFjcXeXu5G4/I3Oi5f7Ac3Zs8TMCJmzuGVA1Osj8rlT1mO5ViVkK0Vl9Jeve/xzdj25msr0lZnXeVZmQc7IAABCEAAAhDYKgFExVbxYnx5AlYQ+K8X1TX6kYCwlkzBGazfj+8xmC8q1ELc34mAuJ8ZyQgBva8hbmP925ODlweyFxbv2sn3sfdDhKIkPebvFbHTErfkKpy/n9s8u75/uWGFRXFvhjLU/hFLJ4qKNnPv1VgmLnPs1fqe9nFXfXQe4ZjLsa7yLHmwBQEIQAACEIDA9gkgKrbPmBGGRCBzZn9I02euEIAABCAAAQgMkwCiYphxZ9bbIpBZbrStobALAQhAAAIQgAAEdoUAomJXIoEfPSKgy3fC5Tw9mhpTgQAEIAABCEAAAhkCiIoMFHZBYF0C/p6N4CbsdW3RDwIQgAAEIAABCHSFAKKiK5HCTwhAAAIQgAAEIAABCOwoAUTFjgYGtyAAAQhAAAIQgAAEINAVAoiKrkQKPyEAAQhAAAIQgAAEILCjBBAVOxoY3IIABCAAAQhAAAIQgEBXCCAquhIp/IQABCAAAQhAAAIQgMCOEkBU7GhgcAsCEIAABCAAAQhAAAJdIYCo6Eqk8BMCEIAABCAAAQhAAAI7SgBRsaOBwS0IQAACEIAABCAAAQh0hQCioiuRwk8IQAACEIAABCAAAQjsKAFExY4GBrcgAAEIQAACEIAABCDQFQKIiq5ECj8hAAEIQAACEIAABCCwowQQFTsaGNyCAAQgAAEIQAACEIBAVwggKroSKfyEAAQgAAEIQAACEIDAjhJAVOxoYHALAhCAAAQgAAEIQAACXSGAqOhKpPATAhCAAAQgAAEIQAACO0oAUbGjgcEtCEAAAhCAAAQgAAEIdIUAoqIrkcJPCEAAAhCAAAQgAAEI7CgBRMWOBga3IAABCEAAAhCAAAQg0BUCiIquRAo/IQABCEAAAhCAAAQgsKMEEBU7GhjcggAEIAABCEAAAhCAQFcIICq6Ein8hAAEIAABCEAAAhCAwI4SQFTsaGBwCwIQgAAEIAABCEAAAl0hgKjoSqTwEwIQgAAEIAABCEAAAjtKAFGxo4HBLQhAAAIQgAAEIAABCHSFAKKiK5HCTwhAAAIQgAAEIAABCOwoAUTFjgYGtyAAgd09F0EdAAAgAElEQVQg8Pv3b7m6upJ3797x6BADjZnGjn8QgAAEINAOAURFO5wZBQIQ6CgBLU6/fPkit7e38vXrVx4dYKCx0php7PgHAQhAAALtEEBUtMOZUSAAgY4S0CsUKibu7u7k/v5evn//zmOHGWiMNFYaM40d/yAAAQhAoB0CiIp2ODMKBCDQUQJamGqh+uPHD3l4eJCfP3/y2GEGGiONlcYMUdHRNx1uQwACnSSAqOhk2HAaAhBoi4AWpnp1QsXEr1+/eHSAgcZKY4aoaOtdwjgQgAAERBAVZAEEIACBOQS0MNUz3yoo9MZfHrvPQGOlMdtYVDzeyecP53I6PZLJZCzjcfGYTORoeirnHz7L3eOc5OEQBCAAgQERQFQMKNhMFQIQWJ0AomL3RUQq9DYXFY9yOzuVIxUSkyOZnp3Lxexabr7dyd23G7meXcj52dQfP53dCtpi9fcWPSAAgX4RQFT0K57MBgIQaJgAomJoouJers6OZDyeyPT8ev6ViMc7uT6fymQ8lqOzK7lvOPcwBwEIQKBLBBAVXYoWvkIAAq0TQFQMSVTcy8eziYwnU3n75a+lc+3x5r1MJ2OZnH1EWCxNjYYQgEDfCCAq+hZR5gMBCDRKAFExHFFxPzuRyfhYzm9WX8z0eHMux+OJnMy4XtHoGxBjEIBAZwhsLCoOn49kNMo/9l5c7hiIQ9kfjWT/ZcNuvdw3DObOt2iTH9v6Nbd/4LJlvi+Hwb4n2bw6kL1RM35cvtiT0WhPDlr8raqnGHObccq+F58dyK69C9dioO+fJ5oLomIgouLxWl5PxnL89s9Mit7Lp3cncvxqIpNXx3Ly7lP2isSfb49lPHkt16trksyY7IIABCDQLQIbi4pwulrULFsYh/3a296uqBjVFtiXcvDMCq+qqNBj7RbTjfFuTFRYBnvPdj1/GiO3FUO7//7bYNqICr51aoVv3lrnRu2HDydGEFxVBMGDXRKl3/xkRIX9Bihd6vSQpvTjlREmJx8qR9KWvIYABCDQOwKIiiZCagqefdl/VnMVxBTfe6JFc05UXLZ4dr6J6XobTYkKtaNnoZ+wcPRz6vAGomI7weNKxRCuVDzIxR96T8R1NYm+vZep3oj95pPYuyz+kk9v9Ebuqbz/Vm1+rfdk/HFRFRzVpuyBAAQg0CsCWxYV5Rl6u0QqXCrjrhrY5/C4XZZSLKl6nizy0cIzWG4VXhkx/Vxx6tpESybcmLFflULfFMvBkq7IRib+RTF8qEt4Mm1tsXdorlZEY9XNpRg/bKs2nG0/T+OKm9OKHEXE2HScllkWFnHZk4OXmeVPUZvlrjzofGwc3VxCxjZWey8sv2iJVMRvXw6LOLjlPmZ+Sf4Ydm6f6V/kZLjth0/9CRlrfoT5rJ2S424cb89tOLvN5qHNMzd7N1b5bObu4+2ujjm+l3E+pL5HrHNxTeYevQ+SYxVupY9+KxqvGlvTLmqTE+ze2kYbiIohiIpP8ubVWE5mlcsUItevZTKeyOtAbzzOTsxvVpxm3m7m2Ks38mmjrKMzBCAAge4R2K6ouDqQ/eC+irjIc4WGK8yCAssVNNni2rUXEXPcFUcivmhy/YsirxQebsy0T2DTFCrlcQ2p8TsqkpJAax9zXO3HfW2hqfvs/GKhEIybm4sb0xwr25p5umO+kHXHl+FYtPGcHMs5hVklFm4cN66zEc7f8g7nnJArCvGyT5wj2tqNU7YxNipxKmLruRRxC+eo1lT4uX3GhvM/46uPq5tbzMfmm+tv/Sxz7VIOXiSC2E++8DXIldiWiFTmtzgP54qKaK5q/6C4f8XxDedW7HOczHvAzdOxCONh51POXeTwRXEvRyVv3Ps0sOe5FBuVuVdja/kENpL3T2pyk9eIiiGIio9yOh7L6cdcpjzKw/cH/zsUj3czOX2lS6BOZJZb5fTxVMbjU8mayplnHwQgAIGeENiuqEghhUVaUQxHBWda+BQFfVisxCZt8eNsVAqztIisiAy1FhaTaWHoRtM2YRHl9hfPwbyiojUaP/Y1seCLZzcXV0zr67RYNGP44jn0P/AnORsc2chw1p6p76GP1WLfFZdlYReNUXSeZ9M0Cdj515Hv1QLXsankRWIr53PkT8IhbR/OJz1mpxfGNNwuJl/7ZGMW+x/mmLUVH1djYZuqceOjvxJhr7R5GwmbsneOrxM1ZWzL9roVzzViGje0gjwQJ/Zw3D/uUjP3yP98/zBesc3NXiEqhi4qyvyx3/CkgmIipx9rvuUJUVECYwsCEBgUge2LClO45ZYS1RTDvli2cagWCragCJdAuULcFDdJ/3hfZsxIVOSOqx/5IsZnSljwRFcVwn7htutZPxfTwrFbdU6hP8VQIceYifOlKCSTsexR66cvUF2XzFzDuPjtrE1rJPSr2JN8Q1du7Jo4JfNW2/6qROFzVAAbvkHhHL3WMZyQzPlQ9d/Y1qJ+znzzc9S94ZzC7cJx82T9cPkeHjEW5n5RgrWpMYn718wtiq1at+18TL2dmv6Bv5W8mXuyoGbuUWzLuYT+mO2KgEkprf4aUTEEUTFn+VOQMh/PVFDM/8pZlj8FwNiEAAQGRWCrosIUdeFZ50xhEBU40XEbh6joNIVOuJ47LrJyxXK8L1ewhPt02xWSYR7E44RHzHbit/c52p/YWDAXY7dokxapC+cUjWu99T7NuyKR6Wd7J77bncXyM1eU2za5AtI1rz4vUxzm7NbEKfHf5F9SZBp2bp+2D/MzvBIQ2aqZf01xbMYdhXmazjzMOXcs3FczvwXiNoyxs1p5djnl553jm1yFmpur9WycEIne44VD9b7WzD2KR8iqMsPGdyAqhiAq5tyo7TPKfgtU9luffBsRbtQOYLAJAQgMisAWRUWmOFhUGETHbRzC4iMqCM3huKCJi23bP96XK0bCfTUFVlhs5tIj9bt4fRCdOc746orbzFzKgizup00Xzin1Jy1+9bgvKssJVfmWx0yhHPlbXSKTbVOaqG5l/DSNTBHrxF0uJrl9KZf8cq7IxwwHl2/6HBbDUT8/k2ps/CEzBye4/N5iI8w5dyzcl5/fMsuflhV1bp4uzyr9gthU8yKed56NnVf+WNzfEbDP+bnHOZ9vE9tp7hWiYgiiQqT+K2VXyCW+UnYFWDSFAAT6RmCLoiL94LdFU3nWPSyiCqxBIeNAl8VPtYg1hYZfhlEtKtVGXIxkxoyWnbgxXEFrvcgXRs7D3LIhO/e4cLf7fKGaFLRz55Jr65fYZOa0iKNbyhKKhKiQD+bmNo0PIZcinqE4Kc5o+zlq35f7UXHuzNUWs6ZBmDvhdtDb/FheULQXY5f5lYmlmUOwJCrhaqyrnWd71R/1y8ytklshz5xt734mZg3kYfRe8WPZjcsX+8EPC4ZM7Xb0rVpZX0rWaa7aL0xIRNiiG7V9/iaOuvdsJq/mxtb0C+dYtbvuHkTFMESFzP3xO82er/J+Opbx9L18rUkm9+N31d+6qOnAbghAAAI9IrBFUeGWULj7KdKvhcwUVlqIJcVGWiiZAr+4GdV9zagrYuMiz0Yp3pcZMy2gtJsrPt1Nr2GxmAt+xm8dNz77a4s356uaqZ2LGT8s4ONv/lk4p4w/KUdX1Jdr0uPxctOMuezLoSm0y2LT9EnZJfH0dk3f+jHLOYYFsO9tNkwbFyMdp2befo7PD+Ob0Y2vif85weWGLYSFtxfNzRXnQb67fpXn7eRhmE/eR1ecJ3Epc9PxdV/Zm9zgXfge2k7fd6ZJyiZ8z6THIm4VOGbHMrGN2mgehGPmza61F1ExEFEhIvezE5nU3jMxX1TYm7gncjKruYF7reyjEwQgAIHuEGhUVHRn2njaSwIZUdHLeTY6KScqMl+4v/I4h7K/hGBY2ewTd0BUDEdUiNzbX8+eHMv5F/tTd8uk319f3sp0oj+e91GQFMsQow0EINBHAoiKPkZ1qHNCVKwR+YZFhblylF79WcOtHeqCqBiSqNDEu5erM/3F7IlMz6/lLvN7eD49H+/k+nwqE/3F7bMrBIUHwwYEIDBEAoiKIUa9r3NGVKwR2SZFhQ6v9uqXta3h4JN3QVQMTVRoyj3K7exUjiZjGU+OZHp2Lheza7n5did3327kenYh52dTf/x0dut/HO/JExYHIAABCDwRAUTFE4FnWAj0jYC/x6FnS6AQFUMUFcW78/FOPn84l9PpkUxUYIyLx2QiR9NTOf/wef6VjL69yZkPBCAAgTkEEBVz4HAIAhCAAKJiwKKC9IcABCAAgaUJICqWRkVDCEBgiAQQFYiKIeY9c4YABCCwKgFExarEaA8BCAyKgBMVP3/+lF+/fsnv390rsofks8ZIY/Xjxw/R2PEPAhCAAATaIYCoaIczo0AAAh0lcHV1JTc3N/Lw8GBEhRatPHabgcZKY6ax4x8EIAABCLRDAFHRDmdGgQAEOkpAz/JrcapnvXl0h4HGTGPHPwhAAAIQaIcAoqIdzowCgd0gkPyydvnL26PKr9kv53Du18GX62lbpV9pu6m9VcamLQQgAAEIQAACTRFAVDRFEjsQ6BqBRn7XY1MRgKjoWtrgLwQgAAEIQCBHAFGRo8I+CAyBAKJiCFFmjhCAAAQgAIFWCCAqWsHMIBDYQQIVUeGuOtjn0WhfDtXtqwPZG43EL5V6bvYWE3J97BUH12bvxWU04cPnQf9R+IvbdVcqYnv7LyNzVZ969oN7yWx5CQEIQAACENh5AoiKnQ8RDkJgSwRqRIUXE8Wwly/25cB/iY4TEc4nJ0BCoWD3lcLiUPYDIWJ+eduLgLyoGAXCw/5SdyFwdFj1Oziuu4xo8TadbzxDAAIQgAAEINAWAURFW6QZBwK7RqBGVJRiIO+wFvBlm1RA2D6xcEjsmCsfTiTkRUVpX/uGQiZt72xrm1DYuP08QwACEIAABCDQBgFERRuUGQMCu0igRlRUlhq5KwHBEqiy6A8L/mCSqe10CZVbWiWpSMjZC/eF28F4hZ2c72ErtiEAAQhAAAIQ2A4BRMV2uGIVArtPIC38oysCzn1bxI+C5Uu5KxWVYj6wbZcvBVcRlrhSEdsLhYRuB7acm4gKT4INCEAAAhCAwFMQQFQ8BXXGhMAuEAgKf+tOWLwXDlba2PsXFl2pMELCCBF7JSISCRuJivTKhgNZJzbccZ4hAAEIQAACENgmAUTFNuliGwK7TKAiGDKiwgiA4MqA9hlV76mIbu5O+pibqP2VDisKyvapSMj4kF5BMT4EPrnlWX6MXYaObxCAAAQgAIF+EkBU9DOuzAoCiwksIypExC5fKr4S9vmh+aal6pUKKwbcV8pGVyYKUWCP7cnBS/2K2vk3auf6R/sKcePGC5dnLZ44LSAAAQhAAAIQaJoAoqJpotiDAAQgAAEIQAACEIDAwAggKgYWcKYLAQhAAAIQgAAEIACBpgkgKpomij0IQAACEIAABCAAAQgMjACiYmABZ7oQgAAEIAABCEAAAhBomgCiommi2IMABCAAAQhAAAIQgMDACCAqBhZwpgsBCEAAAhCAAAQgAIGmCSAqmiaKPQhAAAIQgAAEIAABCAyMAKJiYAFnuhCAAAQgAAEIQAACEGiaAKKiaaLYgwAEIAABCEAAAhCAwMAIICoGFnCmCwEIQAACEIAABCAAgaYJICqaJoo9CEAAAhCAAAQgAAEIDIwAomJgAWe6EIAABCAAAQhAAAIQaJoAoqJpotiDAAQgAAEIQAACEIDAwAggKgYWcKYLAQhAAAIQgAAEIACBpgkgKpomij0IQAACEIAABCAAAQgMjACiYmABZ7oQgAAEIAABCEAAAhBomgCiommi2IMABCAAAQhAAAIQgMDACCAqBhZwpgsBCEAAAhCAAAQgAIGmCSAqmiaKPQhAAAIQgAAEIAABCAyMAKJiYAFnuhCAAAQgAAEIQAACEGiaAKKiaaLYgwAEIAABCEAAAhCAwMAIICoGFnCmCwEIQAACEIAABCAAgaYJICqaJoo9CEAAAhCAAAQgAAEIDIwAomJgAWe6EIAABCAAAQhAAAIQaJoAoqJpotiDAAQgAAEIQAACEIDAwAggKgYWcKYLAQhAAAIQgAAEIACBpgkgKpomij0IQAACEIAABCAAAQgMjACiYmABZ7oQgAAEIAABCEAAAhBomgCiommi2IMABCAAAQhAAAIQgMDACCAqBhZwpgsBCKxG4Pfv33J1dSXv3r3j0SEGGjONHf8gAAEIQKAdAoiKdjgzCgQg0FECWpx++fJFbm9v5evXrzw6wEBjpTHT2PEPAhCAAATaIYCoaIczo0AAAh0loFcoVEzc3d3J/f29fP/+nccOM9AYaaw0Zv9/e+e32zay7OvzIPtiLvaD6En2uo/fYmHfx29wzs3Cvgr8GBsLAQwxNjSWEyj/ZMtI4kESe+JMRkAddDebrG42JeofJVKfAY0ostld9VUpUz91kzSx4w8CEIAABNohgKhohzOjQAACHSVgClNTqP748UOenp7k58+fvA6YgYmRiZWJGaKio186zIYABDpJAFHRybBhNAQg0BYBU5ia2QkjJv766y9eHWBgYmVihqho61vCOBCAAAREEBVkAQQgAIEFBExhan75NoLCXPjL6/AZmFiZmG0sKuYP8vnjRMajC8myoQyH+SvL5GI0lsnHz/IwX5A8HIIABCBwRAQQFUcUbFyFAARWJ4CoOHwREQu9zUXFXL5Ox3JhhER2IaPriXyY3sn99wd5+H4vd9MPMrkeFcfH06+Ctlj9u8UZEIBAvwggKvoVT7yBAAS2TABRcWyi4lFm1xcyHGYymtwtnomYP8jdZCTZcCgX1zN53HLu0R0EIACBLhFAVHQpWtgKAQi0TgBRcUyi4lFurjMZZiN5++Xvxrk2v38vo2wo2fUNwqIxNRpCAAJ9I4Co6FtE8QcCENgqAUTF8YiKx+mVZMNLmdyvvphpfj+Ry2EmV1PmK7b6BaQzCECgMwQQFW2F6uWpDAYDOXlxWz9i3ub0ZaKJPXYiZw2f5XT+fCCDwamcJ7pqddfsTE42sWNTbq0624XBbuXs2UCSOdbEfBtPk1vha+3+moyZapPb4b9Pty9OZPDsTBZ8u1K9NNqHqDgSUTG/k9fZUC7f/pHIi0f59O5KLl9lkr26lKt3n5IzEn+8vZRh9lruVtckiTHZBQEIQKBbBBAVbcUrL47rC31X7JlirVKgmQJqRwXTzt3fkqhYi9vOneviANsQFQcgViP0iIruFf7xxdXb/LzOhdpPH6+sIJhVBMGTWxJl7vxkRYW7A5RZ6vQU5aHMZ1aYXH2sHIlb8hkCEIBA7wggKtoKqREVz07ltO5XYlt8n8hJ6vjsdie/wLbi+jZExbrcWnGwa4MgKlaNGDMV3RMsq4uKJ/nwu7km4q6aHt/fy8hciP3mk7irLP6WT2/Mhdwjef+92vzOXJPx+4eq4Kg2ZQ8EIACBXhFAVLQVTisqzuS8ZpmGWa508uK8sjTFLWPyS03U8idbrIezGrZtPqMR/nJ7Lqd2BsS9u6Ur7tdm284vZXleXSwVjh+Ol0SX2+XGOJGzl4nlT0GbBkvCnq3OTaSc+bG2BDM9nkfYJpwh0qwGMlBsQiYqJh5IMSuVL0HLY6+X5oR96F/+N7PNm1C+hz6mcmwxq7Inu7WmSPT5aPM/zze3dElzjlhGeaJjIOI5Oft8/5pxZPnaHxEVxyAqPsmbV0O5mlamKUTuXks2zOS10hvz6ZV9ZsU4kXD22Ks38mntjONECEAAAt0kgKhoK25FYWmKoah4sgWS2Rf/inwup6qYjQun4HNU7AXH8gKsXEKkCk3ff17AlYV13sYfN5wqbSJ4leN+HFU02zba/7A4jHoUWYubG9evtzd92iK+8MUXsqUdlldx7Ud8/q2cvfCCa3FMrL1BfPOxlKgJbRFJx2od22J61Rg6P7U4jH2NWUV92vipeEaH6z76cYuYFMKr9NNyUZxuX5yqa4jiPAk/hwzrrFhvP6LiGETFjYyHQxnfpHJkLk9/PhXPoZg/TGX8yiyBupJpapXTzViGw7Eku0p1zz4IQAACPSGAqGgrkEVxnBeRRYGrP7sCryzsI+MqBV3Z3hRkRcEm6UI16NcWdWFxGPSROG6sscWbsl1bGBfL9lhkczBGfvKiPktRUR27PK/kYLtUrAv7AjtcQap5uV++fYEb9Vd0ktgI+nXnhf2KEkZemIXcw7G3aFsyhpFvS1lFPlt//cyZf4/9ic7xeaMEg58dCVgFLKt9hLmDqNjmNQh962v15U+LREWZi+4OT0ZQZDK+qbnLE6KiBMYWBCBwVAQQFW2FWxdvQfGkizy9nRtWKeKiAs4WjoPKnW/CX27DAsz2rO3Jh9JFW3i+gpQ4zx2tKagTvrqlUb4gzd+DgrNmvERfTiiF3KztfklX8O5FQ4JHajmNOTdlV21MUv1GosLHK7DLMXC+pPoI9xX+pWxT6NIxXJWV6tBsBjGIjvkZIeWbF7JVW0I7bE+Jvq1QVf2VIiTBZAmPqrXN9jBTcQwzFQuWP6k0ubk2gmLxLWdZ/qSAsQkBCBwVAURFW+GOivGigA/2h4WWKx59IVxT0PkCNyqowiIuLMCsy8G4DkJhk/9lOTUjkTjPnR3aXmANCkXXpiwMi1b1G9F4hY3B/nDs0PdU1wkekajwZ/mi1tu8OCamXxUv34m21WwXy6x8A/2+vm26F7Ntba3EcFVWUa9BPKNjCz5WYxLaYU8N+nYc9HUURext45BTtf8Fxqx4CFFxDKJiwYXaRb64u0Al7/pUtBHhQm0Fg00IQOCoCCAq2gq3LizNmPnns2DZki609HZuZFB0mX2+jX8vnQmLrLAAs61ie/JfmX3x7K4NiGZFagtVN64twOMiNiqik21Ks6tbsZ1LueVst1S4W4MK7lXO4S/37njBMPcmiIXtKyE8Cs8TsaoRPKFtRQflRsTeHYj6T7Ypu6hsFSwqRxbuCBjYlktYxnGP8zNiUu1/oTkrHURUHIOoEKm/pewK6cItZVeARVMIQKBvBBAVbUW0UiS5oir81TostMICvNo+KKSi4jA4FhVg1uWKPe4C3bIgzsfTImFZQWxt0AWzK2ADH20f+kJhJwL8MplKOCp2VjmU4sqfnbDdMCh8iQpre5rep9uGIqVRTLSgyf3Vy6hsH8HM0q2cPfcPbtN2eH/0vnrbfOvy3Z1XxjS/CDt4FsoyVmVvdqstURHnms0tfd2QZhJfQxTZvOFHRMVxiApZ+PA7k0Tf5P1oKMPRe/lWk1P+4XfVZ13UnMBuCEAAAj0igKhoK5iV4tgVQrrgqxbHrnBK3p61UsDnBWNerG4uKgwYX8D76x+0YKgBlxd/zuZTOU8VoUGbmusWfPdrcTMna3bGfm17WJC6ofS+2G89Y6P7Td8y17L31wGYeFR8iPvXIkvb4SHoffG52jbfXr9re8047vxQxIVtQla6L78Ez+dD+R7mcXSOn+GKhVT8TJYoVwKOz8/tHbzKcTQTREXfLrTe1J/VL9R2Ofs4vZKs9pqJxaLCXcSdydW05gLu6teCPRCAAAR6RQBR0atw4swhErDFcTFLcogWYtMiAsxUHMlMhU2CR/f07OxSJl/co+4W5YY/9veXtzLKzMPzbgRJ4anwDgEIHBsBRMWxRRx/2yVgf33XMxHtDs9omxNAVByTqDD58iiza/PE7ExGkzt5SDwPr8iq+YPcTUaSmSduX88QFAUYNiAAgWMkgKg4xqjj884IBEt27BIovexqZ8PS8Q4JICqOTVSYZJrL1+lYLrKhDLMLGV1P5MP0Tu6/P8jD93u5m36QyfWoOD6efi0ejrfDVKRrCEAAAgdNAFFx0OHBOAhAYN8EEBXHKCryrJs/yOePExmPLiQzAmOYv7JMLkZjmXz8vHgmY9/Jy/gQgAAEWiSAqGgRNkNBAALdI4CoOGJR0b10xWIIQAACeyOAqNgbegaGAAS6QABRgajoQp5iIwQgAIF9E0BU7DsCjA8BCBw0AS8qfv78KeZWpZve7pTzdytSTIxMrH78+CEmdvxBAAIQgEA7BBAV7XBmFAhAoKMEZrOZ3N/fy9PTkxUVpmjlddgMTKxMzEzs+IMABCAAgXYIICra4cwoEIBARwmYmQVTnJpfvXl1h4GJmYkdfxCAAAQg0A4BREU7nBkFAhCAAAQgAAEIQAACvSWAqOhtaHEMAhCAAAQgAAEIQAAC7RBAVLTDmVEgAAEIQAACEIAABCDQWwKIit6GFscgAAEIQAACEIAABCDQDgFERTucGQUCEIAABCAAAQhAAAK9JYCo6G1ocQwCEIAABCAAAQhAAALtEEBUtMOZUSAAAQhAAAIQgAAEINBbAoiK3oYWxyAAAQhAAAIQgAAEINAOAURFO5wZBQIQgAAEIAABCEAAAr0lgKjobWhxDAIQgAAEIAABCEAAAu0QQFS0w5lRIAABCEAAAhCAAAQg0FsCFVFx/x//KbxgQA6QA+QAOUAOdCsHelup4BgEINAJAogKRBQikhwgB8gBcqAHOdCJqgMjIQCB3hJAVPTgfyT8mtitXxOJF/EiB8iBXeRAbysVHIMABDpBAFGBqOAXSnKAHCAHyIEe5EAnqg6MhAAEeksAUdGD/5Hs4hcv+uSXVHKAHCAHupUDva1UcAwCEOgEgUaiohOeYCQEIAABCEDgSAikBN+RuI6bEIDAgRJAVBxoYDALAhCAAAQgUEcAUVFHhv0QgMC+CCAq9kWecSEAAQhAAAJrEkBUrAmO0yAAgZ0RQFTsDC0dQwACEIAABHZDAFGxG670CgEIrE8AUbE+O86EAASOgMCvX79kNpvJu3fveHWIgYmZiV1f/xAVfY0sfkGguwQQFd2NHZZDAAItEDDF6ZcvX+Tr16/y7ds3Xh1gYGJlYmZi19c/REVfI4tfEOguAURFd2OH5RCAQAsEzAyFERMPDw/y+Pgof/75J68DZmBiZGJlYmZi19c/REVfI13K3H8AACAASURBVItfEOguAURFd2OH5RCAQAsETGFqCtUfP37I09OT/Pz5k9cBMzAxMrEyMUNUtPAFYQgIQAACOQFEBakAAQhAYAEBU5ia2QkjJv766y9eHWBgYmVihqhYkNgcggAEILBlAoiKLQOlOwhAoF8ETGFqfvk2gsJc+Mvr8BmYWJmYbSwq5g/y+eNExqMLybKhDIf5K8vkYjSWycfP8jDfT76z/Gk/3BkVAhCoJ4CoqGfDEQhAAAK2MEVUHL6Q0GJvc1Exl6/TsVwYIZFdyOh6Ih+md3L//UEevt/L3fSDTK5HxfHx9Ku0rS0QFfzjBAEIHBoBRMWhRQR7IACBgyLATEW3BIURF5uJikeZXV/IcJjJaHK3eCZi/iB3k5Fkw6FcXM/kscXMRVS0CJuhIACBRgQQFY0w0QgCEDhWAoiKYxIVj3JznckwG8nbL383Tvn5/XsZZUPJrm9aExaIisbhoSEEINASAURFS6AZBgIQ6CYBRMXxiIrH6ZVkw0uZ3K++mGl+P5HLYSZX03bmKxAV3fz3BKsh0GcCuxUVszM5GQxk8Pw8wfBWzp4N5PRl4pDZ9fJUBoMTOevIs4vOnw+W2uvanEqKxmr+nstpLdcanrvabWNc41PTMW2sDT//WqU/l0cnL27daHnOFZ8X2LAwHgvOW+WQGyPP89mZnHo7V+lkrbZLvl9N+vTf3yIuO/w+rhC3JqZvs81xiYob+dd//Sa//aZf/5R/6wvUP/xL/qGO//N/Y9ER9fHf/44ubt/0+C/5938r+/7rX3Kj7Vt3+dP8Tl5nQ7l8+0cifR7l07sruXyVSfbqUq7efUrOSPzx9lKG2Wu5W12TJMZcvAtRsZgPRyEAgfYJtCMqBinxsKDoMQXGszPJy8T2qawxoi8e0wJKRIoCLVEwd9DfApH1K+FT0WDxxu2LExkMwvNvX5yuICYjUbF4uMVHjbjZZt4ZNlZQOxvbFckLvl+LKbijKVH/8rT+R4AmfXa0zfGJin/Ivz7EQsF//rf887ffpBASVmCE7W3BXwgJJyD+8T83hbDY9PjN//xDflNCIuzP2bnONRVPH6+sIJhVBMGTWxJl7vxkRYW7A5RZ6vQU5/R8ZoXJ1cfKkbjlxp8RFRsjpAMIQGDLBFoQFadyligcReqLntuX550SFCYmRlScPD+Vk6hA9vGyxfOzk/Tx2W3n/PV+ObEUioLi2NKNbQiCbfSRG7ptUbHU/102qP9+NRnViuTkDGOTs/vV5rhEhRENoUjQd1WyBX0hGFwBHxT1VmREMxv/+0/57bd836bHfyXsSwib1UXFk3z43VwTcVdN3u/vZWQuxH7zSdxVFn/LpzfmQu6RvP9ebX5nrsn4/UNVcFSbbrQHUbERPk6GAAR2QKAVUWEkglnqFP6KHxU99hfveHmFWeZT7nOF+ZmcW5Hilsq4ZS75ciC7TKNsX/CKlteUS658QXru7FNjlTML+ZKcJb9gW1HxwvVTXXqT+/HSLAcLC/BihiO23fIIZ3hsW2uHt9vP5Tj/T19qDm4cNxOQ+5AoEsPxw/EKfnojt8stVTqRs4RPbimXX8q0uE87fsIuPeTiWNSxUD0ENpd56PPJUIw5FLlac27Zu2Y+iGY6omNR7G0ftblpjkbnL+TkOPglZCd5Lpa5rmfL9Hen9ERvaTZ6f7AdsdF578/339WT//v/5ER/v2xHOnbO10X2FjEx50Zjb3WGKXBSjuyWsomiXS0tMgJCzzpYwWFEg5850NvFearPTY+nRMkvNxtSzJ6stfzpk7x5NZSraWWaQuTutWTDTF4rvTGfXtlnVoz9P8EqZ+yxV2/kk9q3i01ExS6o0icEILAJgZZEhS8CdMHvCoqiiLBFgj5u3DKFRrnPF8hF8VIUZGWbsvDOsdg2qpAPxvGFWHm+PcueE+6r9BtRN8etXebcWID4fXZsZYvxTxWKvhDz/58KPgfn6mLMczKFou/b+1UW0L4IK3inhJ4dY4EIqBz34/hx/bUw6rM9J2QZoMv7rDDzjZbGIs2i8DNl8wt3VUvA14zn4+THFpFwKVZc+LrPRT6ajH2RL9urjGv6ipZ6Wd/qWMV+3cpZbrcyL9/M4xDnkl52WIlD7Evcqzte5lR0fEl/ztf8O2FPjf3x/yZ4/yN7KvyU/0tzIrJ1w4/HN1OhrlcIZi2qxXssKlIzGb/U7MKmx38lRUnVrtVnKm5kPBzK+CaVLHN5+vOpeA7F/GEq41dmCdSVTFOrnG7GMhyOJdlVqvs19yEq1gTHaRCAwM4ItCcqbIF2ogpuV2SExV9cfJpCo9xXKQLzwlgXda549oVKNEaOsRAAqcI61ac9L7QljkjcZ+FX3p/9bAslb1vcQ1xkmeOl/WX/5f7S76ggM03igjX/Nb44J3Hc9mwKX1Wcmn3+z9hQORb4VNrrzzHvoe36iN9259lf2YOx3f7CZt88EJtxm5DForEr+WSYxIKwGNNt6P7s+YG9ZeMkKxVPHdvyLM0qzVK3LbaTsQzP13b78xbZ79tYP8wsWsRlWX+270Lkut5i3uH4TeMWx7uwNPi3wu/dxvtxiQp/7YR7tyKgEBbV4r0QFb+55U31osFdh7Hp8UWiQs+gbFdUlFnk7vBkBEUm45uauzwhKkpgbEEAAkdFoFVR4ZdzuCIxLHqcGCgFhItCWMjHRUmyMAuKXFeo+CUhwbstBlMFSljclNkQ2VsesFu6yAqKJW2P3vbn233lUqHKL8O2YIyLutjuhM2JArliY1QoWpMS5zlT4zFzBwKflvH2Tte9+/O98Er4ZU/VsYjt0ufo7eqYlXyq8b0orPO7IOn8rQoeM05sUzl2GQPvq459vp0LFWtfoqAve3NbFT/s7iqjIP9zX2KxEPedjxAtD3R9L+ovaZPNFf8d1/aZUXSs9HZsUd2xuL/4vPU/H7Oo+JUvLXIF+wJRkS9/qhcN7jqNTY8vEhU7W/6kUufm2giKxbecZfmTAsYmBCBwVARaFhX6F/SoCAgKDh8DU0D4IiRfPhIUwlEf5rREkVvOGvh+/bs7PywMwzF9S18o1vVVFovmjLKPYH9gm18OU/oX2p6PbM/ZkahI/cpeU1jX+h/4VFfwlRSXb+mYlBzD83TcdXvTSttQd77rrVL4Vnx3fenZmTKe2obQulpWwayNtjM+P/xsxjQFfJinZRvrRyWW2r6YUXnuKlvWjloxHvZUYWsPK5uCvDEHNY9Fcas7pvoOTdn403GLCnf7Vj8L0N9rKhZcqF1kkLsLVPKuT0UbES7UVjDYhAAEjopA+6IiL6wGz8+i51QkigVbeJRFd7VQSRQSQbGyrJhKHU/tMzmRsE+lSllsup3u81kgikLRsMx2049v49/9gLGNxrboWohKgayX1mhx5/t07+kC1R0ri0p1jhmnWOYS26XarbBZsqzrT8cibqNZxMdCIyr5FDOLPweiIL+4u1LMuzGSrIp4mjaLbQstjcVydDSIgT+mOSy21Z+x7F3nRtq/socK2/yQ78O8hyJJ27uITd0xnROlHdvYOm5R4WYnvKhIzTQEQiN1IbW+DmLT4+r6jOKuVIk+V1/+JFJ/S9kVsohbyq4Ai6YQgEDfCOxFVLji2v36Wv7y74qF8lfh/PNGMxW+eC6FiQlgefFtTYFii7TwnGVFVFkI5ylixU10DUIgeOJCz/vrl/5EMzNB4RjbrQuyfPwlBbEvakvevnAN/Q4SvsLFjVuKimW8g97ywrr01x6NhGTqoYBhLJawqNhcXvBbKXwDxgke9riaMchjXOZwgwu19UxbxTadm+FF/KlrZEqaLg66SLeMtNBM2Gr61LaX/ZncjPMgyrEl/VXYFp2bfk7k5NmS/itsyrgtz4lisK1sHJWo+N9/ls+g+PVLrIjIr5ewRbwt4OPnVOhbyDoR8ltx29l4ydSmx/MH3/m7Tf0KZ1K80FhHVMjCh9+ZVPom70dDGY7ey7eazPIPv6s+66LmhA12c6H2BvA4FQIQ2AmB/YgKW9ibO+FEv67nhYpbq22KDleA+KdqVwsVV1AGhZHtIyxU7Xl+Dbl5L35djgtSxTgvIIt148U5qo3arIgK+0t0VDhVbHOFWuGvvj1rpajKRYgtSmO7o4LP2GXO1wVs9Cu7M931U/ioBJxyLdwMuJzKecUnv6xLXSuwgJ0vfhfaEIyp42dMa8hCxd8X33X5ZG3JbQ5y5/l59aLzIGcj2+JjUTys9er2yHpc71fJJczpMCjmk84l871yXILvRswxYY/vN/A7Zxf0ZRou6K/K1ves87jc5+0Pxoj693GzZ0XHyu+07nM728cmKoKnaavi3Rfsv3Jh4dqlnmmRC4f8qdt+lqM4P79Ow4+z+vHoidqFgCkvMl9LVIjI4/RKstprJhaLCncRdyZX05oLuLeTjkUviIoCBRsQgMCBENitqDgQJzEDArslcC6nCwr03Y7d896NMFsgStvw/qhERfFsibJAL8VAd/atKypEHt3Ts7NLmXxxj7prkmN/f3kro8w8PO9G2pEUIoiKJpGhDQQg0CYBREWbtBmrpwT8LMGy2YSeur9Lt/xszx5FG6KiO2LCC6D1RYVJ5keZXZsnZmcymtzJQ+J5eEXKzx/kbjKSzDxx+3rWmqAw4yMqiiiwAQEIHAgBRMWBBAIzuk7ALDeKlrt13aWDsd+Itv0JNkTFsYkKk/hz+Tody0U2lGF2IaPriXyY3sn99wd5+H4vd9MPMrkeFcfH06/Fw/Ha+togKtoizTgQgEBTAoiKpqRoB4EaAsX1B3v8Nb3GtM7vLq652eMSKETFMYqK/Kszf5DPHycyHl1IZgTGMH9lmVyMxjL5+HnxTMYOv4GIih3CpWsIQGAtAoiKtbBxEgQgcCwEEBVHLCoOOMkRFQccHEyDwJESQFQcaeBxGwIQaEYAUYGoaJYp7bZCVLTLm9EgAIHlBBAVyxnRAgIQOGICXlT8/PlTzAXA/mJg3g9TbJgYmVj9+PFDTOz6+oeo6Gtk8QsC3SWAqOhu7LAcAhBogcBsNpP7+3t5enqyosIUrbwOm4GJlYmZiV1f/xAVfY0sfkGguwQQFd2NHZZDAAItEDAzEqY4Nb968+oOAxMzE7u+/iEq+hpZ/IJAdwkgKrobOyyHwEETsHduSty1ye5P3Cmrrn3s5KKndcdt+QyBvhJAVPQ1svgFge4SQFR0N3ZYDoHDJvDyVAaV50uY53kMZDCIn+nh9p++XO4SomI5I1r0nwCiov8xxkMIdI0AoqJrEcNeCHSFgH0adiQe8n0nzwYSCIhU2xo/ERU1YNh9VAQQFUcVbpyFQCcIICo6ESaMhEAXCbjZh5MXt4XxVhA8P5fKUiczq6GXRNlZDjOj4V5agBSiImizvyduF86xAYEWCSAqWoTNUBCAQCMCiIpGmGgEAQisQ8CLCH+uERNWZEQiIhAZViwokRDNYtg+jdhQ12u4feocPyDvEOgpAURFTwOLWxDoMAFERYeDh+kQOHgCgUA4l9PiWgq9ra+n0Nuld4UYEZG0gDD9RUuqytPZgkDvCCAqehdSHIJA5wkgKjofQhyAwCETUMV+MDuhxIOdifCzDK69X/YUvOczE1ZU6KVS1n3V3yHjwDYIbIkAomJLIOkGAhDYGgFExdZQ0hEEIJAi4GcZrBiIlyyZz4HYUCIk1ZmfqUBU1NBh97EQQFQcS6TxEwLdIYCo6E6ssBQCnSTgZhZO5TS+41O+NOrUX2dhvXMzDvri7tjp9EyFESPRnabiE/kMgR4RQFT0KJi4AoGeEEBU9CSQuAGBgyVglzelnk3hlzpFYsCKjXDf7YtTOZs5D62oGOQXfOdOBxd6HywIDIPA9gggKrbHkp4gAIHtEEBUbIcjvUAAArUE3OxDcMvYvK0VA5UH5PmLsctbylbu9PTsTM5fnBS3nE31XWsOByDQAwKIih4EERcg0DMCiIqeBRR3IAABCECg/wQQFf2PMR5CoGsEEBVdixj2QgACEIDA0RNAVBx9CgAAAgdHAFFxcCHBIAhAAAIQgMBiAoiKxXw4CgEItE8AUdE+c0aEAAQgAAEIbEQAUbERPk6GAAR2QABRsQOodAkBCEAAAhDYJQFExS7p0jcEILAOAUTFOtQ4BwIQgAAEILBHAoiKPcJnaAhAIEmgkahI/ePFvv8UGMCAHCAHyAFy4FByIPl/eXZCAAIQaIkAouI/+B/iofwPETvIRXKAHCAH1s+BluoGhoEABCCQJICoQFQw40IOkAPkADnQgxxI/l+enRCAAARaIoCo6MH/SPhlb/1f9mAHO3KAHOhLDrRUNzAMBCAAgSQBRAWigl8oyQFygBwgB3qQA8n/y7MTAhCAQEsEKqKipXEZBgIQgAAEIAABCEAAAhDoCQFERU8CiRsQgAAEIAABCEAAAhDYFwFExb7IMy4EIAABCEAAAhCAAAR6QgBR0ZNA4gYEIAABCEAAAhCAAAT2RQBRsS/yjAsBCEAAAhCAAAQgAIGeEEBU9CSQuAEBCEAAAhCAAAQgAIF9EUBU7Is840IAAhCAAAQgAAEIQKAnBBAVPQkkbkAAAhCAAAQgAAEIQGBfBBAV+yLPuBCAAAQgAAEIQAACEOgJAURFTwKJGxCAAAQgAAEIQAACENgXAUTFvsgzLgQgAAEIQAACEIAABHpCAFHRk0DiBgQgAAEIQAACEIAABPZFAFGxL/KMCwEIQAACEIAABCAAgZ4QQFT0JJC4AQEIQAACEIAABCAAgX0RQFTsizzjQgACEIAABCAAAQhAoCcEEBU9CSRuQAACEIAABCAAAQhAYF8EEBX7Is+4EIAABCAAAQhAAAIQ6AkBREVPAokbEIAABCAAAQhAAAIQ2BcBRMW+yDMuBCDQCQK/fv2S2Wwm79694wWDtXLA5I/JI/4gAAEI9JkAoqLP0cU3CEBgYwKmIPzy5Yt8/fpVvn37xgsGK+WAyRuTPyaP+IMABCDQZwKIij5HF98gAIGNCZgZCiMmHh4e5PHxUf78809eMGiUAyZfTN6Y/DF5xB8EIACBPhNAVPQ5uvgGAQhsTMAUg6Y4/PHjhzw9PcnPnz95waBRDph8MXlj8gdRsfFXkQ4gAIEDJ4CoOPAAYR4EILBfAqYYNLMTRkz89ddfvGCwUg6YvDH5g6jY7/eY0SEAgd0TQFTsnjEjQAACHSZgikHza7MRFOZiW14wWCUHTN6Y/NlYVMwf5PPHiYxHF5JlQxkO81eWycVoLJOPn+Vh3uEvGqZDAAKdJ4Co6HwIcQACENglAUQFImIVERG33VxUzOXrdCwXRkhkFzK6nsiH6Z3cf3+Qh+/3cjf9IJPrUXF8PP0qaItd/otA3xCAQB0BREUdGfZDAAIQELG/MDNTgbCIxULTz5uJikeZXV/IcJjJaHK3eCZi/iB3k5Fkw6FcXM/kkW8vBCAAgZYJICpaBs5wEIBAtwgwU4GgaCogUu3WFxWPcnOdyTAbydsvfzf+0szv38soG0p2fYOwaEyNhhCAwDYIICq2QZE+IACB3hJAVCAqUmKh6b51RcXj9Eqy4aVM7ldfzDS/n8jlMJOrKfMVvf2HCccgcIAEDltUvDyVwWCQfj07k9uDAnorZ88GcvKiBatmZ3IyOJXznfl/LqeDgZy+3NkA1Y636pOzP8id55vTun1xIoNd593WOLh8DBjs2vZqVBfvsb42yDPz78AebUdUICqaCohUu7VExfxOXmdDuXz7R+I79Cif3l3J5atMsleXcvXuU3JG4o+3lzLMXsvd6pokMSa7IAABCCwncNiiQtu/58JCm5LeRlSkuTTcu61iOheioSC6lbPnm4vQzoiKvFiPBe758y0L0Y2+k0b4NbRno3Ea5t+CZogKREVKLDTdt46oePp4ZQXBrCIIntySKHPnJysq3B2gzFKnpziH5zMrTK4+Vo7ELfkMAQhAYCsEEBVbwWg6QVRshHIbosL2cSJns40sqT25G6KixVmmTYr9l+fNZ9o2Gac2ms0PICoQFU0FRKrd6qLiST78bq6JuKsm6ff3MjIXYr/5JO4qi7/l0xtzIfdI3n+vNr8z12T8/qEqOKpN2QMBCEBgYwKdFhXnz/XSKF1M+gL/3C5JcktA8uOmQPFLquIlFfkvvMVxvWTGnncq50Eb/UurH/NWtF3xr8Ui8dIc3UdNPIMxT+TsZWL5U9Bm0GC5iLO38DX41VgVprZfzdbYWPrqLdY+mz7DmQLfSr0H9tb4tCIra4OOmRpOb4a2xr6JSGDbQAZ5n4WoWJRDOZuCa5xj2hCzHYxVwyFos3iJXWFjPE7ic8ghitmSfI/P9YzMMOExnd8qrwp7XC4F+aL5mrw0n2OOEZPK8aL/zTcQFYiKlFhoum91UfFJ3rwaytW0Mk0hcvdasmEmr5XemE+v7DMrxomVt/bYqzfyafOvAT1AAAIQWEqgw6LiXE5VARkWU75gLgvGotApihNX4Oii//bFqfqVOyqAfKFTnJ+PUdjgx1TFmT2ntMEXkLqAsnYHBX0Us7x4Ks/x46hiLR7HF3aFrVGf5uPsTE7V9R+WT+GL9t2Npzk5P/z4MYeyUC5tjsZv4lOljchiVs6O2jELExblTcr2Wzl74a7HcOOXIsMLxJJNlVXItTDCbVR8zFnqfLBtVA7lQqvOTzNeaU80XvGxQcyW5ruImDZRjsX+ht9LnVfemChulVx25wTjVNrkQiayxY+w6TuiAlHRVECk2q0uKm5kPBzK+CaVuXN5+vOpeA7F/GEq41dmCdSVTFOrnG7GMhyOJdlVqnv2QQACENiAQIdFReS1Lb7CQjcorirFWV6kFoV01F9emBd9JAqZsKhKFGrRL/pxweVGjIqqyIzkOct8tX2YYkwXo1HH8cegQAyLv7AwjLhZLp572ak9p4btcp/yIrFy/iJWK/rrTQ1YunGLmPs2+bsTFaGvAZuAYX5S1L/usimH2J56tov4qJGbxMy2ifIn9i/+nPRVxyXMK2eRttltx/6mvmeVNlZsRfYqlzfZRFQgKlJioem+7YqKMpPdHZ6MoMhkfFNzlydERQmMLQhAYOcEui0qbBGjl0D5gi9RnCQKnlRxZgs9vzxqoH71TRViwb7EmIGoSB138TVjVoskc6zmnMCXVKFWnlv3i7Yd2dqv+BW/9EZ92vF8weZs8v0GRbVzx/03LjiLY018qmkTC72iT7MR2Rwciz7U5s3iPlK+6n12W+VOsQQqKe5qfAxi69qU/aRipX2r6VM3MVlVdxcrHbMgt/MO4n26vWlijysbFQuXLym+zub64/GMSKoPM7juJ3J4w4+ICkRFUwGRare6qFiw/Enl8s21ERSLbznL8icFjE0IQGDnBDorKlwB5wtdv2xlE1HhipV4bXhR7McFlQlNsC9V0Ol99UXPMlHhC/giG4LC09itOBSN6sczTZx48ryWFW6qr2DsaNaiGDvuTx9QfendQb81bRaKCndOES/dt9penDd1LF0HqWJc79PbasiazRofExyW+aQHsHGtzPDoFg1jFuR2fn68z3wuhGj8fQjHdJ9SgkBzqOEfjFPTBlEhqYKWffsXRKuLigUXahdfK3cXqORdn4o2IlyorWCwCQEI7JxAR0WFLkRyRsuKseC4O8cWgb4ACwoXdzwo9uOCyjQJ9qWK2nBfuuBL+JK7ZN6S5ywd155ZIzZqjgX+V4s/z8q8B0VuYEtpuG9f7im3lvtU4/eywrHGlnLkBOsgL8J4lee5LeuTLqLjX/2Xjh/2uD6HsJ/gk/UnJTJVqxo7g5il2sT7zGfNY+nYCf7BDFOaf8g93cbNVC3xWyFYZZOZiv0X5l0WR6uLCpH6W8qukLncUnYFWDSFAAS2QaCjoiIuOl2hMSgucE0UHkHx6NAFRVRcENkCSi1Ligsq00WwLzFmvHzJjqEu5I6L0lRE7Ri6WHIFf+mrt0O3ifnEHce25n0WBWJVVPii7eRZOI5fdqJneNyF3HE7ZUMTn9Zh5UVYZeamfE5FWMjHeZNiGV2oXTBy/qQK3oCFKZq9cFUI7OaaHEzeVWavVN/WpsQduMrnVOR+a7uS+a9mskz/Qb4nPnv+AaOSvenC8lfH7Wdlq7NdjZvnQSBeKtyW5buCs8YmogJRsYmoWUdUyMKH35kk/ibvR0MZjt7Lt5qc9g+/qz7rouYEdkMAAhDYkEBnRYVfQ+/Wm8e34oyL5nh5lKMWiApf4Pt14M/PbQFU/CofF1Smi2BfYsxYVJhzfJHkx1EFVm0s7Th+rbq/ra0qvApbfBt9h6KaXgM74tt2pkRFtSAse/bFuR9/gaDwJzXxKbCxyW1y886Dvp1NZRHuRZnZH+dN+nyfA6GAcG2r+3T/+RiLnpsR2Nowtk1yJmanrw+ypi+JmbUrlWN6n+qjEChqX57jJXszcMjn9KVrr9s4YZHnkvHV2BL7HHBrkO95aNd5Q1QgKloXFSLyOL2SrPaaicWiwl3EncnVtOYC7nW+CJwDAQhAYAmB7oiKJY5wGAIQgMAuCCAqEBX7EBUij+7p2dmlTL64R901ye+/v7yVUWYenncjSIomxGgDAQhsiwCiYlsk6QcCEOglAUQFomI/osJ8nR5ldm2emJ3JaHInD4nn4RVfuvmD3E1Gkpknbl/PEBQFGDYgAIG2CCAq2iLNOBCAQCcJICoQFfsTFeYrM5ev07FcZEMZZhcyup7Ih+md3H9/kIfv93I3/SCT61FxfDz9Wjwcr5NfOIyGAAQ6SwBR0dnQYTgEINAGAUQFomK/oiLP8vmDfP44kfHoQjIjMIb5K8vkYjSWycfPi2cy2viyMAYEIHDUBBAVRx1+nIcABJYRQFQgKg5CVCxLVI5DAAIQ2DMBRMWeA8DwEIDAYRNAVCAqEBWH/R3FOghA4DAIICoOIw5YAQEIHCgBLyp+/vwp5pkDmxSYnHtcAsXki8mbHz9+iMkj/iAAAQj0mQCios/RxTcIQGBjArPZTO7v7+Xp6cmK700NVAAAE3dJREFUClMo8oJB0xwweWPyx+QRfxCAAAT6TABR0efo4hsEILAxATO7YApC80szLxiskwMmf0we8QcBCECgzwQQFX2OLr5BAAIQgAAEIAABCECgBQKIihYgMwQEIAABCEAAAhCAAAT6TABR0efo4hsEIAABCEAAAhCAAARaIICoaAEyQ0AAAhCAAAQgAAEIQKDPBBAVfY4uvkEAAhCAAAQgAAEIQKAFAoiKFiAzBAQgAAEIQAACEIAABPpMAFHR5+jiGwQgAAEIQAACEIAABFoggKhoATJDQAACEIAABCAAAQhAoM8EEBV9ji6+QQACEIAABCAAAQhAoAUCiIoWIDMEBCAAAQhAAAIQgAAE+kwAUdHn6OIbBCAAAQhAAAIQgAAEWiCAqGgBMkNAAAIQgAAEIAABCECgzwQQFX2OLr5BAAIQgAAEIAABCECgBQKIihYgMwQEIAABCEAAAhCAAAT6TABR0efo4hsEIAABCEAAAhCAAARaIICoaAEyQ0AAAhCAAAQgAAEIQKDPBBAVfY4uvkEAAhCAAAQgAAEIQKAFAoiKFiAzBAQgAAEIQAACEIAABPpMAFHR5+jiGwQgAAEIQAACEIAABFoggKhoATJDQAACEIAABCAAAQhAoM8EEBV9ji6+QQACGxP49euXzGYzeffuHS8YrJUDJn9MHvEHAQhAoM8EEBV9ji6+QQACGxMwBeGXL1/k69ev8u3bN14wWCkHTN6Y/DF5xB8EIACBPhNAVPQ5uvgGAQhsTMDMUBgx8fDwII+Pj/Lnn3/ygkGjHDD5YvLG5I/JI/4gAAEI9JkAoqLP0cU3CEBgYwKmGDTF4Y8fP+Tp6Ul+/vzJCwaNcsDki8kbkz+Iio2/inQAAQgcOAFExYEHCPMgAIH9EjDFoJmdMGLir7/+4gWDlXLA5I3JH0TFfr/HjA4BCOyeAKJi94wZAQIQ6DABUwyaX5uNoDAX2/KCwSo5YPLG5M/GomL+IJ8/TmQ8upAsG8pwmL+yTC5GY5l8/CwP8w5/0TAdAhDoPAFERedDiAMQgMAuCSAqEBGriIi47eaiYi5fp2O5MEIiu5DR9UQ+TO/k/vuDPHy/l7vpB5lcj4rj4+lXQVvs8l8E+oYABOoIICrqyLAfAhCAgIj9hZmZCoRFLBaaft5MVDzK7PpChsNMRpO7xTMR8we5m4wkGw7l4nomj3x7IQABCLRMAFHRMnCGgwAEukWAmQoERVMBkWq3vqh4lJvrTIbZSN5++bvxl2Z+/15G2VCy6xuERWNqNIQABLZBAFGxDYr0AQEI9JYAogJRkRILTfetKyoep1eSDS9lcr/6Yqb5/UQuh5lcTZmv6O0/TDgGgQMksB9RMTuTk8FABsnXqZwfGqiXpzIYHJpd53I6GMjJi9tGtM6fG96H4MOtnD0byOnLRmZ3rNEOfDO59+xMmkV5CS6bx+H3bvM4uDzcvJ8Gtm+Lw5Kh4sOICkRFUwGRareWqJjfyetsKJdv/4jTUUQe5dO7K7l8lUn26lKu3n1Kzkj88fZShtlruVtdkyTGZBcEIACB5QT2Iyq0XVZgHEKxq42Ktg9OVJji9UTOOvmA1h0U3lG4ln28fXEig+e7kK478G1LoiIpKmdnctpQlNYzRVSkCkn2IUR8DqwjKp4+XllBMKsIgie3JMrc+cmKCncHKLPU6Sn+ks5nVphcfawciVvyGQIQgMBWCCAqmmA8QFFx20lBYWDvoPBuEkPV5thEhfV3Z7/yIyp88cg7QiKVA6uLiif58Lu5JuJO/auVb35/LyNzIfabT+KusvhbPr0xF3KP5P33avM7c03G7x+qgqPalD0QgAAENiZwmKIiWqahl/j4Aunc/NqcL59yx11x4/bFv+K7Qta3D5cBuWOmD/drrlseoscULyqCZVvV2RVrm1rSFfRRCZUvxrTdrs+gn/gX9To2uW16GYr1Jy8mPTe3jGbNsUUCRoanHq/iot0Rsj95cV5d/hRwbbCka0H7wk/NqSioQ1uM/Tp3Tl/6WOSxjcapzm6E/aV80zk1GMR5mSCm7TbL1cznwn7XPsiPwodEX3aXj3Xdcb8/9CX8jrg28bgu9r7/8PxKXgR+NciboH2ag/telsu5KmN61zZ8Z/kTYiElFpruW11UfJI3r4ZyNa1MU4jcvZZsmMlrpTfm0yv7zIpxYo2kPfbqjXza8DvA6RCAAASaEDhIUXH+XBXstrArizFf2BQFe1F8lG10MW0hRMs87PGiWC+LoaIosX2W/RXFS1Hc5ecUfeTFdnHcjOqKrcLOSjSiAjb/Bd8KH99vXtQWdtmifgkbb4M9t2xbFNvWjnXGrvosCftCN6vn+PgVPkXx9dyK42GH4sZUsck5+/a+/1IAVONg23jGSR5u0NsXp2qJmevHj+NnXMpxRPzYZZtzOVXj2OM+PrFf5nOcd7lvWlRUcntZnkV5kBrW7lv4HfG+lflk4nBmr4vxuVTGxHFQba1f6nMl5pFVDTgUQt+fuqxP326Nd0QFoqKpgEi1W11U3Mh4OJTxTSpZ5/L051PxHIr5w1TGr8wSqCuZplY53YxlOBxLsqtU9+yDAAQgsAGBgxQVoT+uMPWFWrUwc8eD4n1ZIWWKlqK4qxa+vmD0Y1aLPV8A5oVSXUETjBN6lSye4+IrnxkIfAu6Cdlou03xqc8LucUFcuRPPkbQR8I208z2qwrnwLzkOaHNwRj5yYv6XNbenhtdkB73F3/2sdC8Aj/yD8HYDXyr9LEwLxN5bDow4/hcXSfP9PkVgxbsCM4z+VKKhvAsl0shO51fYbz9uQFLv9O+N+BQs4Suvs9ggJU/ICoQFSmx0HTfdkVFmb7uDk9GUGQyvqm5yxOiogTGFgQgsHMCByoqXGFRLlcql0vYgtAXWRZPomhJFW+2CCyXShSFWl6ghEVRVNjYc9UvrWZcvU9v65Cl7CiO68Ir32n6CXxzMyAp21JsbC/WlkGln5Db6mOH5xdOhEWv2m020+foeFXjXPgVcXBdL2+fGjPeZz8HQijBI/fFFKqFTWqpUdyntq8Qo2anzQHdR5RH+The2ATnmmM6J9bJs7pzinHVhs8dv4TPx2BhHyl2ep/b1gyL7SAG3g59rt8XcfAzON5O/Z7sU/WzxiaiAlHRVECk2q0uKhYsf1L5e3NtBMXiW86y/EkBYxMCENg5gcMTFXkRVhbSughNFarhcUssKuZdYaiKOVMk+YJpW6Ki6E/FLLJDHSmWRwVFZGCXax38+rqETen7jkRFqmBL2Oz9rBbv5oiOl9suY+3PrHtf3j5V7Mf7qnalCtm8GFY+61hU+4h980uG1C/8S/NBtfUINF+97Y+b90X92mOJfvX5+YxYcB2FHktvR+elxZDmqbcrJyd2mPYJewMbVu0zMcwKuxAViIqUWGi6b3VRseBC7SJv3V2gknd9KtqIcKG2gsEmBCCwcwIHJyqqxZouQtcRFYkiJShQUoVqtM+0j5bUBDMVdYVbME4cy0RhlGi/uJAN2ZQFe7w/5rb62IG/ypVqvNTBFLfoGggr+FThrs5Obi5rb+2JBF68r2rztnjofqoxWFj8J8VtFLe18iy/3mchY2N3VMjrXKwb10ZI++xDpvdF3yXfpPY93T6MYbpNbZcbHkBUICqaCohUu9VFhUj9LWVXSGZuKbsCLJpCAALbIHBwoiIuXm0xoe4yFBYXBsGy4i0uQFzBs9WZCv9Lb1DM6sIqFarEcV3I5adoUbESm6igD7mtMXbOWV+Y7IrkqBgNXHXj6JkIKwpUPP3yoHjGJvis+7QFbrkczh56eVrchSr0050Y74s/J39tjwtpy1Nfp7Lct1AAuTysiFPlm7VLi9fc1zJX628IUMvL9u9s1f3Y3cXF2cu+I4lxowu1w/Gj/LLswjwJL4JXEPyyuSUc3HeheZ/hCKt9QlQgKlJioem+dUSFLHz4ncnfb/J+NJTh6L18q0ln//C76rMuak5gNwQgAIENCRyeqPAFer5OOr5NZ7UgXCYq/PIQv649vj1lXFAZotG+qEC3zBP7fMHs14yHhVYcqajwModNn4EwqV5ToccI2CQKN9s27y/ktt7Ynov3r9EtUqP176cvE/Gytvv4VJduxeRcQZluH/rpzqzuy4vs4hqJBI+iuM3HeX5ub6erBZIXI55H1bdyHMvqpXmSvFqGV3HML5nKxzSxq8kJP6Z5X5xn5SA6d9z5yhYvYOz3Lv6OuD7C831Bn2JX3WdjsMK1D0H7Gg5BG9P3wtmYksOqW4gKREVTAZFqt5aoMM/Nnl5JVnvNxGJR4S7izuRqWnMB96pfAtpDAAIQaEBg/6KigZE0gQAEILAvAogKREVKLDTdt66oEHl0T8/OLmXyxT3qrsl34O8vb2WUmYfn3QiSogkx2kAAAtsigKjYFkn6gQAEekkAUYGoaCogUu3WFxXm6/Qos2vzxOxMRpM7eUg8D6/40s0f5G4yksw8cft6hqAowLABAQi0RQBR0RZpxoEABDpJAFGBqEiJhab7NhMV5iszl6/TsVxkQxlmFzK6nsiH6Z3cf3+Qh+/3cjf9IJPrUXF8PP1aPByvk184jIYABDpLAFHR2dBhOAQg0AYBRAWioqmASLXbXFTkWT5/kM8fJzIeXUhmBMYwf2WZXIzGMvn4efFMRhtfFsaAAASOmgCi4qjDj/MQgMAyAogKREVKLDTdtzVRsSxROQ4BCEBgzwQQFXsOAMNDAAKHTQBRgahoKiBS7RAVh/39xjoIQGB7BBAV22NJTxCAQA8JeFHx8+dPMQViqnBkH8IjlQMmX0ze/PjxQ0we8QcBCECgzwQQFX2OLr5BAAIbE5jNZnJ/fy9PT09WVJhCkRcMmuaAyRuTPyaP+IMABCDQZwKIij5HF98gAIGNCZhfoE1BaH5p5gWDdXLA5I/JI/4gAAEI9JkAoqLP0cW3Iybgnlyun7wdP61973Dyp3gvfSJ44qnie7cdAyAAAQhAAAIQCAggKgIcfIBADwjkxfrJi9vAmfPnp3Ie7Nnww0bF/rmcDhras9E4G/rI6RCAAAQgAAEINCKAqGiEiUYQ6AoBU6wPZOmv/9twZ5Ni/+V5c4GzyTjb8JM+IAABCEAAAhBYSgBRsRQRDSDQHQK3L06k6TKn8+cD0cujAiFiCnkzk5DPerh25cxCfO7geTkHEh4rzxFJCR63TKs6trftVM5ToiKwa9DY5+5EEkshAAEIQAAC3SKAqOhWvLAWAgsJmII+XvZUPSG/3kIJAYmvb7CiQhfriXMSxb4VFKrfUOQ0EBV23BM5K26U484JhFKljYgd99mZhAu+qp6zBwIQgAAEIACB3RBAVOyGK71CYA8EEr/6p6ywRbmeQXCNrADwgiBRuIvZpwv3+LMVJnG/RhR4kbBMVDj7K6IoGKemjZ0F8eOknGYfBCAAAQhAAAK7JICo2CVd+oZAqwTqCu7QiHD2QB3TxbvZji+kjvfp9qYbe9wvWwrf3fKmZaIidTzvtxAzNW2koaBS7rIJAQhAAAIQgMD2CCAqtseSniCwdwLx8qOUQcGMhG6gRUIsIEy7eJ9unzqu+7bbKUGgxYA5nphtCMapaYOoqNBmBwQgAAEIQKBNAoiKNmkzFgR2TcAuQUoU5nrcWBzkxwKxkWoT7wuKfRF3XcaisbWA8AZpoZGeaQlnVtJt3EXgi8b24/EOAQhAAAIQgMAuCCAqdkGVPiGwRwK2CE/cVrZ8ToUrzPUdmyqCIBYQxp94X/xZUhdM38rZ8/IC6viCavtZ2epsV9dl+Ls8FcufvB2hgGgyQ7PHkDA0BCAAAQhAoPcEEBW9DzEOHiUBX4wPymsbwgugc2FRHA+L9IqAMBArIkL14S/wzpch1d6qNr+trD9++tL1oW8p60WRbWPEhBlXi4rCltK3QCAdZcBxGgIQgAAEILBfAoiK/fJndAhAAAIQgAAEIAABCHSeAKKi8yHEAQhAAAIQgAAEIAABCOyXAKJiv/wZHQIQgAAEIAABCEAAAp0ngKjofAhxAAIQgAAEIAABCEAAAvslgKjYL39GhwAEIAABCEAAAhCAQOcJICo6H0IcgAAEIAABCEAAAhCAwH4JICr2y5/RIQABCEAAAhCAAAQg0HkCiIrOhxAHIAABCEAAAhCAAAQgsF8CiIr98md0CEAAAhCAAAQgAAEIdJ4AoqLzIcQBCEAAAhCAAAQgAAEI7JcAomK//BkdAhCAAAQgAAEIQAACnSeAqOh8CHEAAhCAAAQgAAEIQAAC+yWAqNgvf0aHAAQgAAEIQAACEIBA5wkgKjofQhyAAAQgAAEIQAACEIDAfgkgKvbLn9EhAAEIQAACEIAABCDQeQKIis6HEAcgAAEIQAACEIAABCCwXwKIiv3yZ3QIQAACEIAABCAAAQh0ngCiovMhxAEIQAACEIAABCAAAQjslwCiYr/8GR0CEIAABCAAAQhAAAKdJ/B/3r17J7xgQA6QA+QAOUAOkAPkADlADpAD6+YAMxWd14U4AAEIQAACEIAABCAAgf0SQFTslz+jQwACEIAABCAAAQhAoPMEEBWdDyEOQAACEIAABCAAAQhAYL8EEBX75c/oEIAABCAAAQhAAAIQ6DwBREXnQ4gDEIAABCAAAQhAAAIQ2C8BRMV++TM6BCAAAQhAAAIQgAAEOk/g/wMEdgMsCatzPgAAAABJRU5ErkJggg==" width="640" /><br />
<br />
Na imagem acima, definimos para 500.000 o número máximo de requisições de Solicitações de Serviço Web para um espaço de trabalho específico, enquanto os outros continuam como o número máximo em 100.000.<br />
<br />
Espero que tenha gostado.<br />
<br />
Até a próxima!</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-13406654293689229002020-05-31T23:54:00.001-03:002020-06-01T00:23:17.520-03:00URL amigável do APEXOlá pessoal,<br />
<br />
há algum tempo fiz uma postagem sobre como funciona a URL "f?p=" do APEX. Na versão 20.1, surgiu a Friendly URL, que numa tradução literal seria URL amigável, mas a equipe do APEX traduziu para URL simples.<br />
<br />
Veja um exemplo da nova URL:<br />
<br />
<u><span style="color: blue;">https://apex.oracle.com/pls/apex/meu_workspace/r/minha_aplicacao/minha_pagina</span></u><br />
<u><span style="color: blue;">?P2_COD=1</span></u><br />
<u><span style="color: blue;">&P2_OUTRO_ITEM=10</span></u><br />
<u><span style="color: blue;">&debug=YES</span></u><br />
<u><span style="color: blue;">&request=minha_requisicao</span></u><br />
<u><span style="color: blue;">&clear=RR</span></u><br />
<u><span style="color: blue;">&printerFriendly=YES</span></u><br />
<u><span style="color: blue;">&session=32902354289930</span></u><br />
<u><span style="color: blue;">&cs=89A65BDFDA2EE4DF932C09E678</span></u><br />
<br />
Onde está escrito "meu_workpace" é o Prefixo de Caminho e deve ser definido no menu "Administração" que fica no canto superior direito do APEX.<br />
Após isso, selecione a opção "Gerenciar Serviço" > "Definir Preferências do Espaço de Trabalho"<br />
<br />
Veja na imagem abaixo que definimos para MEU_WORKSPACE.<br />
<i>Observação: Mesmo que o Prefixo de Caminho seja definido em maiúscula, o APEX considera minúscula na URL. Se utilizar letras maiúsuclas na URL no Prefixo de Caminho, NÃO funciona!</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibgXlY_74KGRqn7N7V3sWAZ79nXwZVE3wR8QkvYU6W39EHQcxIW6SbTDcwYsjFH5Sr18QTBwE7u3nTME302gNTb5ywCAADxLzPy5yw0svTlqrlZLZXr60yPTblYuwh84eKutv-d6QovVqf/s1600/Path+Prefix.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="888" data-original-width="1161" height="488" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibgXlY_74KGRqn7N7V3sWAZ79nXwZVE3wR8QkvYU6W39EHQcxIW6SbTDcwYsjFH5Sr18QTBwE7u3nTME302gNTb5ywCAADxLzPy5yw0svTlqrlZLZXr60yPTblYuwh84eKutv-d6QovVqf/s640/Path+Prefix.JPG" width="640" /></a></div>
<br />
O "r" é um termo obrigatório no APEX e não podemos alterar.<br />
<br />
O termo "minha_aplicacao" é o apelido da aplicação. Veja que definimos o apelido com letras maiúsculas, mas na URL utilizamos minúsculas. Neste caso, o APEX não é case sensitive (não é sensível a maiúsculas e minúsculas). Tanto faz utilizar maiúsculas ou minúsculas na URL que vai funcionar.<br />
Obs: Caso não seja definido um alias, o APEX utiliza o número da aplicação na URL.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_jM9yDdgwYCdyrvuRFDo6Fz_d-Y9Eb4CpHkckBGPZXm4GtneYKOFpyMxpaP3XPdCcgBc_rUHLzWtK-TaS04Gz3ggExr0-tNJdD_efbOnSLwU52tpvUDzMG-nbW-OJfmUX4v4JWAS5VxZh/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="572" data-original-width="937" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_jM9yDdgwYCdyrvuRFDo6Fz_d-Y9Eb4CpHkckBGPZXm4GtneYKOFpyMxpaP3XPdCcgBc_rUHLzWtK-TaS04Gz3ggExr0-tNJdD_efbOnSLwU52tpvUDzMG-nbW-OJfmUX4v4JWAS5VxZh/s640/Capture.JPG" width="640" /></a></div>
<br />
O próximo termo é o apelido da página, que também não é case sensitive.<br />
Obs: Caso não tenha definido um apelido para a página, o APEX utilizará o número de página.<br />
<br />
Repare que os outros parâmetros na URL são os mesmos que eram definidos antes de maneira posicional. Agora a ordem dos parâmetros não importa!<br />
<br />
Por que o APEX fez esta funcionalidade de URLs mais amigáveis?<br />
<br />
Não é só para ficar mais bonitinho! O principal objetivo foi permitir a indexação das aplicações pelos sites de busca.<br />
<br />
Espero que tenha gostado!<br />
<br />
Até mais!Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com1tag:blogger.com,1999:blog-5150514048465222719.post-88763267361488059802020-05-26T11:58:00.001-03:002020-05-26T11:58:43.288-03:00Criando conjunto de dados de amostra no APEXOlá,<br />
<br />
vamos mostrar como criar um <b>Conjunto de Dados de Amostra</b> (ou <b>Sample Dataset</b>) no APEX.<br />
<br />
A funcionalidade "Conjuntos de Dados de Amostra" surgiu na versão APEX 18.1 e permite a criação de tabelas e de dados de demonstração relacionados a um determinado tema, como por exemplo: Dados de RH, Dados de Projeto, EMP/DEPT, Países, Pedidos de Clientes, Planilha de Tarefas.<br />
<br />
Os dados estão disponíveis em diversos idiomas. Até a versão 20.1 infelizmente NÃO há a possibilidade do idioma Português.<br />
<br />
É possível instalar, atualizar ou remover os dados e os objetos de banco de dados.<br />
<br />
Neste post iremos instalar as tabelas EMP/DEPT em inglês e depois em espanhol, seguindo o passo a passo a seguir.<br />
<br />
1) Para acessar esta funcionalidade acesse: <b>SQL Workshop</b> > <b>Utilitários</b> > <b>Conjunto de Dados de Amostra</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE9DKxz68G5AhNiM9VWcre7HMpZmetvDzwKxFSICb4QWjVYyYFHmWzUEbvWNsPoiwyZeFk0Gk668_KR2Psio-0fM9j-qL81HRsdWw2_HKUuY4HbLx0-a6jYO5EORfWAMMGGwuHH4J7RdKB/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="794" data-original-width="1600" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE9DKxz68G5AhNiM9VWcre7HMpZmetvDzwKxFSICb4QWjVYyYFHmWzUEbvWNsPoiwyZeFk0Gk668_KR2Psio-0fM9j-qL81HRsdWw2_HKUuY4HbLx0-a6jYO5EORfWAMMGGwuHH4J7RdKB/s640/Capture.JPG" width="640" /></a></div>
<br />
2) Clique no botão "<b>Instalar</b>" a frente da linha do conjunto "EMP/DEPT".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW0cBQB-HKCtWA-E_6hyHBFSIT6qcpcEmC-27J21pnBd8TcXHiiC0rPgCKJNdl_N3LFlKOU7ylGSxz5kVyz4QFx6g4_LxrjMCQygw0oKstXgK-mpzbklSgIffm0USmGMwwTlLFPBb0wbuG/s1600/Capture1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="434" data-original-width="577" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW0cBQB-HKCtWA-E_6hyHBFSIT6qcpcEmC-27J21pnBd8TcXHiiC0rPgCKJNdl_N3LFlKOU7ylGSxz5kVyz4QFx6g4_LxrjMCQygw0oKstXgK-mpzbklSgIffm0USmGMwwTlLFPBb0wbuG/s640/Capture1.JPG" width="640" /></a></div>
<br />
3) Selecione o idioma (English) e o esquema. Clique "<b>Próximo</b>".<br />
Obs: Repare que há diversas opções de idiomas para os dados das tabelas EMP/DEPT, mas NÃO há a opção de Português.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-lxLHnJkn2eZDvn2G-Tb67Bm-OJdbvHASQnXf6ABWg5761lTcN7wj_XC1bXxdWEIc-Wpn6s4Dx6CHSMDlXqNtDGpq8TtVAlaHRzBnaDGjEH31Xv20nfQoAdwV0VW7l55A28OWowzE5J7d/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="598" data-original-width="994" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-lxLHnJkn2eZDvn2G-Tb67Bm-OJdbvHASQnXf6ABWg5761lTcN7wj_XC1bXxdWEIc-Wpn6s4Dx6CHSMDlXqNtDGpq8TtVAlaHRzBnaDGjEH31Xv20nfQoAdwV0VW7l55A28OWowzE5J7d/s640/Capture.JPG" width="640" /></a><br />
<br />
4) Confira os objetos de banco que serão instalados e clique em "<b>Instalar Conjunto de Dados</b>".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZPGkdOHf1gWfOOjz5eOZEkK4jlgarxGwdqV1SqrFg2Rof1jZPVRwe_2CSTGPCUbSo5mTyFccaCqTjucTkV-nceZ-zrGNuywaO9re1s8YEr26qAQHGP4PUIC-SmtVLkc-F9Ee_h5fk3OlZ/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="601" data-original-width="997" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZPGkdOHf1gWfOOjz5eOZEkK4jlgarxGwdqV1SqrFg2Rof1jZPVRwe_2CSTGPCUbSo5mTyFccaCqTjucTkV-nceZ-zrGNuywaO9re1s8YEr26qAQHGP4PUIC-SmtVLkc-F9Ee_h5fk3OlZ/s640/Capture.JPG" width="640" /></a></div>
<br />
5) A tela a seguir indica que os objetos foram instalados com sucesso.<br />
Há duas opções: "Criar Aplicativo" a partir destes objetos ou "Sair".<br />
Como o escopo deste post é apenas os dados, clicaremos "<b>Sair</b>".<br />
<i>Obs: Em algumas versões do APEX, caso você clique no X em vez do botão Sair, os objetos NÃO são criados! Portanto, para sair, sempre clique no botão "Sair"!</i><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijvwr2gPGMV5KFyRuWZ1rDhVs4z1C95tX11JK9gxLiGvtYBQIMeNQzu025OlBdt4yxOzjE2UFEGkabpIVj0r62rBw2ZLqlt0SNME4a2KRMBkpp3rOd32qVhRCYstQS-kKfQh1YalmGUdc3/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="598" data-original-width="996" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijvwr2gPGMV5KFyRuWZ1rDhVs4z1C95tX11JK9gxLiGvtYBQIMeNQzu025OlBdt4yxOzjE2UFEGkabpIVj0r62rBw2ZLqlt0SNME4a2KRMBkpp3rOd32qVhRCYstQS-kKfQh1YalmGUdc3/s640/Capture.JPG" width="640" /></a><br />
<br />
6) Para conferir os dados, vá para o Comandos SQL e execute consulta na tabela EMP.<br />
<br />
SELECT * FROM EMP;<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxvmOOAy2kg1zuH465oz5giB3bIVclWSFchgKPsUBRNUg9d4qiwfpgIlCTlX1HOCebQR2X4hOVWTWhIKvI5INScNpdZoDrI2F8Om8tzQzJplyJk4z4lyMnuiQWWwLfcspCRD8zKnONJ0rz/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="752" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxvmOOAy2kg1zuH465oz5giB3bIVclWSFchgKPsUBRNUg9d4qiwfpgIlCTlX1HOCebQR2X4hOVWTWhIKvI5INScNpdZoDrI2F8Om8tzQzJplyJk4z4lyMnuiQWWwLfcspCRD8zKnONJ0rz/s640/Capture.JPG" width="640" /></a></div>
<br />
7) Agora vamos alterar o idioma dos dados. Para isso, vá novamente em <b>SQL Workshop</b> > <b>Utilitários</b> > <b>Conjunto de Dados de Amostra</b> e clique no botão "<b>Atualizar</b>" a frente da linha do Conjunto EMP/DEPT.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZHDRESThUJmDfsz8057Hkt6ursJza4Z3ik3cEqbovYUPp1TOkPS9-ei2ivi0YB8Ton1DwWjgj0UAD2x-5HxfAdnDLQfoL9ToeYBed7QkdMfj11VGL5wdnxuEtnTI17jexJDDbDnhC4_O9/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="549" data-original-width="1003" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZHDRESThUJmDfsz8057Hkt6ursJza4Z3ik3cEqbovYUPp1TOkPS9-ei2ivi0YB8Ton1DwWjgj0UAD2x-5HxfAdnDLQfoL9ToeYBed7QkdMfj11VGL5wdnxuEtnTI17jexJDDbDnhC4_O9/s640/Capture.JPG" width="640" /></a></div>
<br />
8) Selecione o <b>Novo idioma (</b>Neste post vamos selecionar Spanish - Espanhol) e clique no botão <b>"Próximo".</b><br />
<br />
Obs: Caso queira <u>Remover</u> o Conjunto de Dados, há um botão no rodapé desta tela.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPiFvTnuo2oUrBPYKSsJzE7JQ_DHYJcOhoqsCbQPVm3pW40odsWmCQcxk6O6Cw73wQxI3BEc-9MVtMTQWcZL3M2YzokWF0DNYV_HVBh6wD5y-7GgG-R1IpnNWwLMZPMONt1AYZ0TcoIoDL/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="596" data-original-width="995" height="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPiFvTnuo2oUrBPYKSsJzE7JQ_DHYJcOhoqsCbQPVm3pW40odsWmCQcxk6O6Cw73wQxI3BEc-9MVtMTQWcZL3M2YzokWF0DNYV_HVBh6wD5y-7GgG-R1IpnNWwLMZPMONt1AYZ0TcoIoDL/s640/Capture.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
9) Verifique os objetos que estão sendo atualizados e clique "<b>Substituir Idioma</b>".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzkB6sa4WfAfioOfWBsuJ9m9MhhnHVP0sXRZuiiRu2bdKz_blvAx9qjNxdcOjea_ixI8ayPfkVP_foTGrr4LmHYTscyKb08sA9xpcEG_aqDOYcpVQRXVWz-Vbr_gyviwxBLnKYcjQRGxgV/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="591" data-original-width="997" height="378" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzkB6sa4WfAfioOfWBsuJ9m9MhhnHVP0sXRZuiiRu2bdKz_blvAx9qjNxdcOjea_ixI8ayPfkVP_foTGrr4LmHYTscyKb08sA9xpcEG_aqDOYcpVQRXVWz-Vbr_gyviwxBLnKYcjQRGxgV/s640/Capture.JPG" width="640" /></a></div>
<br />
10) Na tela de resultado do carregamento, verifique se ficou tudo ok e clique em "<b>Sair</b>".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDrt1g_iSabrG7Mw3yZaazJXxnDoR7CIWddRxE3mH9M8aHJ9M5neomvWKQJwfj5UsYXpT0gvy9Px4M3wH3HAL-Zg2GrtrHqjOEWTKTe2eoc4Fu9QlAb-ttDuS2MKQy2vxnf1LshLjQzWbY/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="595" data-original-width="998" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDrt1g_iSabrG7Mw3yZaazJXxnDoR7CIWddRxE3mH9M8aHJ9M5neomvWKQJwfj5UsYXpT0gvy9Px4M3wH3HAL-Zg2GrtrHqjOEWTKTe2eoc4Fu9QlAb-ttDuS2MKQy2vxnf1LshLjQzWbY/s640/Capture.JPG" width="640" /></a></div>
<br />
11) Ao executar novamente a consulta na tabela EMP no Comandos SQL, verifique que os nomes e os "jobs" dos empregados estão em espanhol. (<i>Compare com o resultado obtido no item 6</i>).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGNfxvko1c2mncm0bhCy8gTTmddHNniMFd1DEDDs99XoY_gwk_SPrCksK2CLaotM4d_xmW8TW4dGMdt6JeE8uuXqRLNMQhJeuyC9ZOJM0hirVWn9iyhUqOMOCncwvBAUJo5BZErr5rUafS/s1600/Capture.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="746" data-original-width="1600" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGNfxvko1c2mncm0bhCy8gTTmddHNniMFd1DEDDs99XoY_gwk_SPrCksK2CLaotM4d_xmW8TW4dGMdt6JeE8uuXqRLNMQhJeuyC9ZOJM0hirVWn9iyhUqOMOCncwvBAUJo5BZErr5rUafS/s640/Capture.JPG" width="640" /></a></div>
<br />
Pronto! Agora você sabe como incluir um conjunto de dados para amostra (ou teste).<br />
<br />
Espero que tenha gostado!<br />
<br />
Até a próxima!Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-16906775255672152772020-05-14T18:22:00.003-03:002020-05-26T12:03:25.502-03:00Como verificar erros pelo id de depuração<br />
Olá,<br />
<br />
espero que todos estejam bem!<br />
<br />
Estes dias recebi uma tela em que o desenvolvedor não sabia como proceder para identificar o problema.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbFRy30qPJOh1Sc-P7jYSXvkd1D1J-NOTFcaHL3BEOpG5m2lECK2T4khcz1REAtwanoMzcHRMvzGFhXcUpnFS1gMvr_mMhG7-pFUkaDtV2hZWyUQx9MS1us0nupE1_P1ltpFL0nu5MOJl/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="417" data-original-width="702" height="379" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbFRy30qPJOh1Sc-P7jYSXvkd1D1J-NOTFcaHL3BEOpG5m2lECK2T4khcz1REAtwanoMzcHRMvzGFhXcUpnFS1gMvr_mMhG7-pFUkaDtV2hZWyUQx9MS1us0nupE1_P1ltpFL0nu5MOJl/s640/Capturar.PNG" width="640" /></a></div>
Acima aparece o erro ORA, mas na mensagem mais abaixo tem um "id de depuração" de número <span style="background-color: yellow;">280691424</span>.<br />
<br />
Como consultar este erro a partir do id de depuração?<br />
<br />
Muito simples!<br />
<br />
Vá ao Comandos SQL e digite:<br />
<br />
SELECT *<br />
FROM apex_debug_messages<br />
WHERE page_view_id = <span style="background-color: yellow;">280691424</span><br />
ORDER BY id<br />
<br />
Substitua o número <span style="background-color: yellow;">280691424</span><span style="background-color: white;"> para o id de depuração do erro em seu sistema.</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Outra maneira de fazer isso é acessar </span><span style="background-color: white;">n</span><span style="background-color: white;">o "App Builder" a aplicação que gerou o erro.</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Após isso clique em Utilitários > Mensagens de Depuração e pesquise pelo id de depuração desejado.</span><br />
<span style="background-color: white;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDDCvMNTr-MdkX-dmnv_aQROW_6k8pULBwAaef4wX9cylCqIuSsykRpmI2iqlewGP1RQntPqHbiG2LfystkeRZm2V_KJ6WGMurWpC_elmtXv5HS9r9afdered9tePNQuhJH0ygXYiq4WR6/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="343" data-original-width="953" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDDCvMNTr-MdkX-dmnv_aQROW_6k8pULBwAaef4wX9cylCqIuSsykRpmI2iqlewGP1RQntPqHbiG2LfystkeRZm2V_KJ6WGMurWpC_elmtXv5HS9r9afdered9tePNQuhJH0ygXYiq4WR6/s640/Capturar.PNG" width="640" /></a></div>
<span style="background-color: white;">Clique no link com o número do id de depuração e verifique o que ocorreu.</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Até a próxima!</span>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-27624728394211536592020-02-07T12:57:00.000-03:002020-02-07T19:41:15.558-03:00Objetos de banco com tag vermelha no Browser de ObjetosOlá,<br />
<br />
algumas pessoas ficam intrigadas com o fato de no "Browser de objetos" aparecer uma <span style="color: red;"><b><u>tag vermelha</u></b></span> indicando que o objeto está inválido.<br />
<br />
Veja na figura abaixo um exemplo:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9YgKSsiVXCmTFks6CqKbQ6pkwqcirl08-J-Z-5vXOuhqeNYuXz8Y9OvJpZk-rN5iksv6xRIymg2GeIY2osJNxbByPIGJVGo9IjHG7GfVYYpBiglZUDucNTLbGMnGTNPDvK0qNTLzM2USx/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="342" data-original-width="541" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9YgKSsiVXCmTFks6CqKbQ6pkwqcirl08-J-Z-5vXOuhqeNYuXz8Y9OvJpZk-rN5iksv6xRIymg2GeIY2osJNxbByPIGJVGo9IjHG7GfVYYpBiglZUDucNTLbGMnGTNPDvK0qNTLzM2USx/s400/Capturar.PNG" width="400" /></a></div>
<br />
<br />
Este é
um comportamento padrão do Oracle. Quando modificamos um objeto, os objetos dependentes ficam inválidos, pois o Oracle espera que a gente os recompile.<br />
<br />
Se você tem certeza que a modificação que você fez, <u style="font-weight: bold;">não</u> terá impacto nos objetos dependentes, <b>não fique preocupado com isso</b>!<br />
<br />
Quando a aplicação precisar utilizar este objeto "inválido" (na verdade ainda não recompilado), a primeira coisa que o Oracle fará automaticamente é a recompilação do objeto e, caso realmente esteja tudo certo, o objeto será utilizado normalmente!<br />
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">Caso prefira, para remover a tag vermelha, você precisa recompilar o objeto!</span><br />
<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Mas se houver muitos objetos, rode o script abaixo no <b><i>Comandos SQL</i></b> para recompilar todos os objetos inválidos (A execução pode demorar alguns segundos dependendo da quantidade de objetos inválidos):</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
<i><b>BEGIN</b></i></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><i><b>DBMS_UTILITY.compile_schema(schema => :NOME_ESQUEMA, compile_all => false);<o:p></o:p></b></i></span></div>
<div class="MsoNormal">
<span style="mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><i><b>END;</b></i></span></div>
<div class="MsoNormal">
<span style="mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><i><b><br /></b></i></span></div>
<div class="MsoNormal">
Repare na imagem abaixo que a minha execução demorou mais de 6 segundos, mas este tempo pode ser maior <b>dependendo do seu ambiente</b>.</div>
<br />
<div class="MsoNormal">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtA_lwz9aF1XZMiaK_VQ9wYkEhlSg54r3xmgSYscRxhyphenhyphenim8FOpkYfvMNk9ydMam6mb7FaLsA-XJKTAm99Hzsm26fDOuCM11ubLxqVSGFLkZ9uV393k2dj63I6RU3suqgVD1RAV_YDR_B5/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="535" data-original-width="851" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtA_lwz9aF1XZMiaK_VQ9wYkEhlSg54r3xmgSYscRxhyphenhyphenim8FOpkYfvMNk9ydMam6mb7FaLsA-XJKTAm99Hzsm26fDOuCM11ubLxqVSGFLkZ9uV393k2dj63I6RU3suqgVD1RAV_YDR_B5/s400/Capturar.PNG" width="400" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Para
conferir os objetos que ainda permanecem inválidos (agora sim com <b><span style="color: red;">provável erro</span></b>), execute a seguinte consulta no <i><b>Comandos SQL</b></i>:</div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><br /></span></div>
<div class="MsoNormal">
<b><i>SELECT object_type,</i></b></div>
<br />
<div class="MsoNormal">
<b><i> object_name,</i></b></div>
<div class="MsoNormal">
<b><i> status</i></b></div>
<div class="MsoNormal">
<b><i>FROM user_objects</i></b></div>
<div class="MsoNormal">
<b><i>WHERE status = 'INVALID'</i></b></div>
<div class="MsoNormal">
<b><i>ORDER BY object_type, object_name;</i></b></div>
<br />
Espero que tenha gostado!<br />
<br />
Até a próxima!<br />
<br />
<br />Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-53339669123347821742019-09-06T14:55:00.000-03:002019-09-06T19:28:32.126-03:00Erro: ORA-00001: unique constraint (APEX_XXXXXX,WWV_FLOW_PAGE_PLUG_IDX2) violatedOlá pessoal,<br />
<br />
fizemos recentemente upgrade de versão do Oracle Apex.<br />
<br />
Recomendamos a nossos desenvolvedores que atualizassem o tema nas aplicações que foram criadas antes do upgrade.<br />
<br />
Ao tentar fazer a atualização do tema, seguindo os passos:<br />
<br />
Shared Components > Themes > Universal Theme - 42 > "Refresh Theme"<br />
<br />
<i><span style="color: red;">Observação: Não esqueça de fazer uma cópia da aplicação antes dessa operação!</span></i><br />
<br />
Ocorre o erro título deste post:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkjS44ooPRSjh2sTH2d9J0LpLyiX8jTOCKH-JdIAZBX948OZY-y7f4RWRvShaFYMXTn-HDXckLz92JLIUDXNN6AW57Hhj_PiX-rH37Z3nc0iV3kPipZk8_AlX5aR7q3a-HBNRmwUjfUEI6/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="76" data-original-width="726" height="41" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkjS44ooPRSjh2sTH2d9J0LpLyiX8jTOCKH-JdIAZBX948OZY-y7f4RWRvShaFYMXTn-HDXckLz92JLIUDXNN6AW57Hhj_PiX-rH37Z3nc0iV3kPipZk8_AlX5aR7q3a-HBNRmwUjfUEI6/s400/Capturar.PNG" width="400" /></a></div>
<br />
Esse é uma constraint interna do Apex "APEX_XXXXXX.WWV_FLOW_PAGE_PLUG_IDX2" e utiliza uma nomenclatura que depende do conhecimento do histórico do Apex para poder decifrar.<br />
<br />
<br />
<ul>
<li>APEX_XXXXXX é o owner que armazena os metadados do Apex. O XXXXXX é o número da versão. Se sua versão for Apex 19.1, então aparecerá APEX_190100.</li>
<li>WWV quer dizer que estará visível na internet (www). Há 20 anos não era comum aplicações disponibilizar informações na internet!</li>
<li>FLOW era o nome original da tecnologia que atualmente conhecemos como Apex. Veja que a ideia inicial era implementar "Fluxos de trabalho" (Flows).</li>
<li>PAGE_PLUG é como as <b>regiões </b>são conhecidas internamente.</li>
</ul>
<div>
Portanto, o erro está dizendo que há um problema de constraint única em alguma região do Tema.</div>
<br />
<br />
Para descobrir o problema, vamos em "Shared Components" > "Templates" e filtrar pelo Type = "Region".<br />
<br />
Além disso, vá em "Actions" do relatório e mova para a direita "Display in Report" todas as colunas.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNCMuUBegXCC38hKenbyVheKQhetkyEDgKzfLr2oZ-daFsCWNgfzVwZmM2-AOub6OE_DICqlcQm8ar5Bo1dEPm3ITFss1s-HJi5eqPGbU8bynzQahCfdwPBBZk3fP0_5Bu-xcQO6HU4zKA/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="443" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNCMuUBegXCC38hKenbyVheKQhetkyEDgKzfLr2oZ-daFsCWNgfzVwZmM2-AOub6OE_DICqlcQm8ar5Bo1dEPm3ITFss1s-HJi5eqPGbU8bynzQahCfdwPBBZk3fP0_5Bu-xcQO6HU4zKA/s400/Capturar.PNG" width="356" /></a></div>
Veja no relatório que há um template que está definido localmente, ou seja, <b>não</b> está inscritos no Tema (Coluna "Subscribed From" nula) e que possui o mesmo nome (Coluna "Name" = "Standard") de um template padrão do Apex.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoZhq6NqKsXuNet-AioHouSxD6hWtJUdxLb7kdRDEJOMv5iLVrhP0HsuxDmsuvP82VDgiZwBRp1Ii79toEiqowyEH0s6g0GrRY-zasGVqhHZ7Rhh10dAnvPLwlOiV1ibPgcf4XXD6jTe1z/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="714" data-original-width="1371" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoZhq6NqKsXuNet-AioHouSxD6hWtJUdxLb7kdRDEJOMv5iLVrhP0HsuxDmsuvP82VDgiZwBRp1Ii79toEiqowyEH0s6g0GrRY-zasGVqhHZ7Rhh10dAnvPLwlOiV1ibPgcf4XXD6jTe1z/s640/Capturar.PNG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
A solução para o problema foi renomear o Template localmente definido "Standard" (que está com o mesmo nome de um template padrão do Apex) e o refresh do Tema funcionou bem!!!<br />
<br />
Espero que tenha sido útil!<br />
<br />
Até a próxima!Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com3tag:blogger.com,1999:blog-5150514048465222719.post-30698896881402187722019-06-12T18:50:00.001-03:002019-09-06T19:43:02.108-03:00GUOB Tech Day - Oracle Groundbreakers Latin America Tour 2019<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv-7hyrmByUkOl15C3OXXIxxjn5v_J9iNEk207FwnZhQ8T5b9Qj58RkarRktWbbBbhV3GNA5cOFGEgyioUCJMGRAvSMIeWdxDnEbjIl_j2WE9WXnCLH2cfYEVGYabtrUBrbrncndRQCOUA/s1600/bannerGUOBTECHDAY2019.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="337" data-original-width="918" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv-7hyrmByUkOl15C3OXXIxxjn5v_J9iNEk207FwnZhQ8T5b9Qj58RkarRktWbbBbhV3GNA5cOFGEgyioUCJMGRAvSMIeWdxDnEbjIl_j2WE9WXnCLH2cfYEVGYabtrUBrbrncndRQCOUA/s320/bannerGUOBTECHDAY2019.jpg" width="320" /></a></div>
<br />
Estão abertas as inscrições para a 10ª edição do principal evento do Grupo de Usuários Oracle do Brasil: <b>GUOB Tech Day</b>. Este evento faz parte do <b>Oracle Groundbreakers Latin America Tour</b> que percorrerá diversos países da América Latina com palestrantes renomados da tecnologia Oracle.<br />
<br />
A conferência ocorrerá no dia 10 de agosto na Universidade Nove de Julho - UNINOVE em São Paulo - SP.<br />
<br />
Farei uma apresentação sobre Ações dinâmicas no Oracle Apex. A agenda completa pode ser vista no link: <a href="https://guobtechday2019.eventize.com.br/index.php?pagina=3">https://guobtechday2019.eventize.com.br/index.php?pagina=3</a><br />
<br />
Inscrições pelo site: <a href="https://guobtechday2019.eventize.com.br/index.php?inscricao">https://guobtechday2019.eventize.com.br/index.php?inscricao</a>Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-56402564908829324562019-03-08T20:57:00.003-03:002019-09-06T19:30:24.765-03:00Busca ignorando acentuação em relatóriosOlá pessoal,<br />
<br />
hoje vamos falar sobre como fazer para a busca no Apex ignorar a acentuação das palavras, o til e a cedilha.<br />
<br />
Se criarmos uma aplicação utilizando a configuração padrão e buscarmos no relatório interativo pelo termo 'Jose' (sem acento!), <b>não há dados encontrados</b> conforme imagem abaixo.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNHTP0tMzZWVKvML5xU9jbCpM6VOqvpFGjozKeb8pUhXlK1NGVkoWrLpO8zTmWVvoY-Je-rgDYjE53_uWdV6FWzZaOCVv2YfFceDqnfPyMCNZnmfwh1tDZxABnQHKikxsk_edaGHqArR4U/s1600/Dados+n%25C3%25A3o+encontrados.PNG" imageanchor="1" style="background-color: white; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="280" data-original-width="492" height="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNHTP0tMzZWVKvML5xU9jbCpM6VOqvpFGjozKeb8pUhXlK1NGVkoWrLpO8zTmWVvoY-Je-rgDYjE53_uWdV6FWzZaOCVv2YfFceDqnfPyMCNZnmfwh1tDZxABnQHKikxsk_edaGHqArR4U/s640/Dados+n%25C3%25A3o+encontrados.PNG" width="640" /></a><br />
<br />
Entretanto, se buscarmos pelo termo 'José' (<u><b>com acento</b></u>) resultados são apresentados.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaS2jUl7KFoKL73BbrkYle1hyphenhyphen5Eb0tUobf5wkopWZHHj8aAHwytYZDVuBsj-vY6MG-fxU03e6HcegB5KN_BoQxVP8YJL9IGxAwJp5xjvluTYWRxVAv6MGcotlwaNM2LTGh84kmqLyhb6P1/s1600/Busca+Jos%25C3%25A9+com+acento.PNG" imageanchor="1" style="background-color: white; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="235" data-original-width="460" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaS2jUl7KFoKL73BbrkYle1hyphenhyphen5Eb0tUobf5wkopWZHHj8aAHwytYZDVuBsj-vY6MG-fxU03e6HcegB5KN_BoQxVP8YJL9IGxAwJp5xjvluTYWRxVAv6MGcotlwaNM2LTGh84kmqLyhb6P1/s640/Busca+Jos%25C3%25A9+com+acento.PNG" width="640" /></a><br />
<br />
Isso é mui<span style="font-family: inherit;">to chato para o usuário, pois é difícil saber quando um nome foi escrito com ou sem acento. Não é mesmo?</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Para resolver isto, basta seguir os seguintes passos:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>Passo 1) </b>Em Componentes Compartilhados, clique em "<b>Atributos de Globalização</b>".</span><br />
<span style="background-color: white; color: #252525;"><span style="font-family: inherit;"><br /></span></span>
<a class="image" href="https://contas.tcu.gov.br/wikiti/index.php?title=Arquivo:Globalizacao.png" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0b0080; text-decoration-line: none;"><img alt="Globalizacao.png" height="159" src="https://contas.tcu.gov.br/wikiti/images/2/20/Globalizacao.png" style="-webkit-tap-highlight-color: transparent; border: none; margin: 5px; vertical-align: middle;" width="359" /></a><br />
<br />
<br />
<span style="background-color: white; color: #252525;"><span style="font-family: inherit;"><b>Passo 2)</b> No campo "<b>Comparação de Valor do Caractere</b>" digite "BINARY_AI" e no campo "<b>Procedimento de Comparação de Valor do Caractere</b>" selecione "Linguístico".</span></span><br />
<span style="background-color: white; color: #252525;"><span style="font-family: inherit;"><br /></span></span>
<a class="image" href="https://contas.tcu.gov.br/wikiti/index.php?title=Arquivo:Valores.png" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0b0080; text-decoration-line: none;"><img alt="Valores.png" height="403" src="https://contas.tcu.gov.br/wikiti/images/c/c4/Valores.png" style="-webkit-tap-highlight-color: transparent; border: none; margin: 5px; vertical-align: middle;" width="640" /></a><br />
<br />
<span style="background-color: white; color: #252525;"><span style="font-family: inherit;"><b>Passo 3)</b> Clique em "<b>Aplicar Alterações</b>"</span></span><br />
<span style="background-color: white; color: #252525;"><span style="font-family: inherit;"><br /></span></span>
<br />
<blockquote class="tr_bq" style="color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<span style="background-color: #eeeeee; font-family: inherit;"><strong style="color: black;">Nota:</strong><span style="color: black;"> a função não funciona para o item "Campo de Texto com preenchimento automático" (</span>“Text Field with autocomplete”<span style="color: black;">)</span></span></blockquote>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<br /></div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<span style="font-family: inherit;">Agora ao pesquisar por "Jose" (<u><b>sem acento</b></u>), repare que aparecem resultados. </span></div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<br /></div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikOJWe8VH68cKy_NO_pVmegqEq6M-KHTr-0UrDPi9Npp6QuZwkJSmDK2bK8cfcLoXewAPJ9D4KWMfqoa-LqCjrMyT35iHKsgN9U-epD1Lk7mIaIxcHlg05jndC7ByvyMEjpXqZyLqe7vyU/s1600/Jose+sem+acento+traz+resultados.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="292" data-original-width="558" height="331" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikOJWe8VH68cKy_NO_pVmegqEq6M-KHTr-0UrDPi9Npp6QuZwkJSmDK2bK8cfcLoXewAPJ9D4KWMfqoa-LqCjrMyT35iHKsgN9U-epD1Lk7mIaIxcHlg05jndC7ByvyMEjpXqZyLqe7vyU/s640/Jose+sem+acento+traz+resultados.PNG" width="640" /></a></div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
Essa configuração resolve também o problema da cedilha e do til.</div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<br /></div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<span style="font-family: inherit;">Espero que tenha gostado!</span></div>
<div style="background-color: white; color: #252525; line-height: 22.4px; margin-bottom: 0.5em; margin-top: 0.5em;">
<span style="font-family: inherit;">Até a próxima.</span></div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com3tag:blogger.com,1999:blog-5150514048465222719.post-61972205337378646802018-09-30T21:12:00.000-03:002019-09-06T19:31:05.028-03:00Criando colunas de auditoria em tabelas OracleOlá pessoal,<br />
<br />
é comum a inclusão de colunas de auditoria quando se cria um sistema.<br />
<br />
As colunas de auditoria são as que armazenam informações sobre a criação e alteração do registro que se encontra na tabela. Os nomes de coluna mais comuns em Português são: CRIADO_POR, CRIADO_EM, ALTERADO_POR e ALTERADO_EM.<br />
<br />
Primeiramente temos que criar essas 4 colunas em todas as tabelas (Caso já não existam).<br />
<br />
Calma! Você não precisará entrar em todas as suas dezenas (ou centenas) de tabelas e alterar.<br />
<br />
Segue um script para fazer esta atividade de forma automática.<br />
<br />
Copie e cole o script abaixo no Comandos SQL e pressione "Executar" (ou "Run")<br />
<br />
<i>--------------------INICIO SCRIPT---------------------</i><br />
<i>----------------Inclui colunas de auditoria-------------</i><br />
<i>BEGIN</i><br />
<i><br /></i>
<i>FOR cur IN (select * from user_tables) LOOP</i><br />
<i><br /></i>
<i> EXECUTE IMMEDIATE 'alter table ' || cur.table_name || ' add (CRIADO_POR VARCHAR2(255))';</i><br />
<i> EXECUTE IMMEDIATE 'alter table ' || cur.table_name || ' add (CRIADO_EM DATE)';</i><br />
<i> EXECUTE IMMEDIATE 'alter table ' || cur.table_name || ' add (ALTERADO_POR VARCHAR2(255))';</i><br />
<i> EXECUTE IMMEDIATE 'alter table ' || cur.table_name || ' add (ALTERADO_EM DATE)';</i><br />
<i><br /></i>
<i>END LOOP;</i><br />
<i><br /></i>
<i>END;</i><br />
<i>------------------------FIM SCRIPT-------------------------</i><br />
<div class="MsoNormal">
<br />
Ao final da execução, aparecerá uma mensagem de sucesso, conforme imagem abaixo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitP8YVY1ej3i6dB5T3gvsQ7j3F5E4r03j6AFFPDrGEeNTg3KqwueZ2n0N5n8gsxE1AsHS9rLS2skX4uPibM31g8691yjg7RJI2rsdImS5jPl5_J85jgAqetr_XBx5YvObbI_lIykKNmp8m/s1600/Script+Adiciona+Colunas+de+auditoria.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="920" data-original-width="1320" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitP8YVY1ej3i6dB5T3gvsQ7j3F5E4r03j6AFFPDrGEeNTg3KqwueZ2n0N5n8gsxE1AsHS9rLS2skX4uPibM31g8691yjg7RJI2rsdImS5jPl5_J85jgAqetr_XBx5YvObbI_lIykKNmp8m/s640/Script+Adiciona+Colunas+de+auditoria.JPG" width="640" /></a></div>
<br />
<br />
Para ter certeza de que deu certo, vá ao Browser de Objetos e confira se as colunas foram criadas.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVt1Z-AIpSwfoRhf8i4rpQQgD2wFDy5h5DRoBMySO7Q_eAOoh_OczbCkqR2PxCq94oQgyblaCXSLzqjibPWicltXOI2h4p2qlWFuIVfq9DpE14Mb7v1EJ7PwA2vNonXigJxtzeexUj16T/s1600/Browser+de+objetos.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="943" data-original-width="1460" height="411" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVt1Z-AIpSwfoRhf8i4rpQQgD2wFDy5h5DRoBMySO7Q_eAOoh_OczbCkqR2PxCq94oQgyblaCXSLzqjibPWicltXOI2h4p2qlWFuIVfq9DpE14Mb7v1EJ7PwA2vNonXigJxtzeexUj16T/s640/Browser+de+objetos.JPG" width="640" /></a></div>
<br />
<br />
A melhor maneira de garantir que suas colunas de auditoria serão preenchidas corretamente, é por meio de trigger no banco de dados.<br />
<br />
Para facilitar o trabalho, segue um script que cria as triggers para as tabelas com tamanho menor que 26 (<b>As tabelas com tamanho maior que 26 deverão ser criadas manualmente</b>).<br />
<br />
O script deve ser executado no Comandos SQL também.<br />
<br />
<span style="color: red;">Observação: O trecho que utiliza APEX$SESSION funciona apenas a partir do Apex 5, portanto deve ser alterado para versões anteriores do Apex.</span><br />
<br /></div>
<div class="MsoNormal">
<i>--------------------INICIO SCRIPT---------------------</i><br />
<i>DECLARE</i><br />
<i> v_comando VARCHAR2(4000);</i><br />
<i><br /></i>
<i>BEGIN</i><br />
<i><br /></i>
<i>FOR cur IN (select * from user_tables where length(table_name) <=26) LOOP </i><br />
<i> v_comando := 'create or replace trigger BIU_'||cur.table_name||' before insert or update on "'||cur.table_name||'" </i><br />
<i>for each row </i><br />
<i>begin</i><br />
<i> if inserting then</i><br />
<i> :new.criado_em := sysdate;</i><br />
<i> :new.criado_por := nvl(sys_context(''APEX$SESSION'',''APP_USER''),user);</i><br />
<i> end if;</i><br />
<i> :new.alterado_em := sysdate;</i><br />
<i> :new.alterado_por := nvl(sys_context(''APEX$SESSION'',''APP_USER''),user);</i><br />
<i>end;';</i><br />
<i>htp.p(v_comando);</i><br />
<i>EXECUTE IMMEDIATE v_comando;</i><br />
<i><br /></i>
<i>END LOOP;</i><br />
<i><br /></i>
<i>END;</i><br />
<i>------------------------FIM SCRIPT-------------------------</i></div>
<div class="MsoNormal">
<i><br /></i>
Verifique se o comando foi executado corretamente. Você pode ir também ao Browser de Objetos e conferir se as triggers foram criadas sem problemas.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge1h1JEIyLtxpk_c8Zw10J7cdeShE-Jr0GzKypCLhSgdJS2e-0QPrwvk10wprCmVW8FYCCP1391L_o8MxsPbxhm11LmQN8undVRPCaQnhZNAV7Kt7r80kBrGChtUPp63U6UlLHZNXciUsf/s1600/Script+triggers.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="948" data-original-width="1462" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge1h1JEIyLtxpk_c8Zw10J7cdeShE-Jr0GzKypCLhSgdJS2e-0QPrwvk10wprCmVW8FYCCP1391L_o8MxsPbxhm11LmQN8undVRPCaQnhZNAV7Kt7r80kBrGChtUPp63U6UlLHZNXciUsf/s640/Script+triggers.JPG" width="640" /></a></div>
<i><br /></i>
Para verificar quais tabelas devem ter as triggers criadas manualmente, execute o SELECT abaixo no Comandos SQL.</div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #1f497d; mso-fareast-language: EN-US;"><br /></span>
<span lang="EN-US" style="color: #1f497d; mso-fareast-language: EN-US;">select * from user_tables
where length(table_name) >26<o:p></o:p></span></div>
<div class="MsoNormal">
<br />
<br />
Utilize o CREATE TRIGGER abaixo no Comandos SQL substituindo as tags <<nome_tabela_abreviada>> e <<nome_tabela>> pelo nome desejado.<br />
<br />
<i>create or replace trigger BIU_<<nome_tabela_abreviado>> before insert or update on <<nome_tabela>> </i><br />
<i>for each row </i><br />
<i>begin</i><br />
<i> if inserting then</i><br />
<i> :new.criado_em := sysdate;</i><br />
<i> :new.criado_por := nvl(sys_context('APEX$SESSION','APP_USER'),user);</i><br />
<i> end if;</i><br />
<i> :new.alterado_em := sysdate;</i><br />
<i> :new.alterado_por := nvl(sys_context('APEX$SESSION','APP_USER'),user);</i><br />
<i>end; </i><br />
<br />
Pronto! Agora basta inserir algum registro por algum formulário ou fazer algum comando DML diretamente no banco que as colunas serão preenchidas.<br />
<br />
Espero que tenha gostado!<br />
<br />
Até a próxima.</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com1tag:blogger.com,1999:blog-5150514048465222719.post-84351470530159874262018-06-21T17:52:00.002-03:002019-09-06T19:31:40.272-03:00O que é essa tabela HTMLDB_PLAN_TABLE? Posso apagar?Olá pessoal,<br />
<br />
hoje vamos falar sobre a tabela HTMLDB_PLAN_TABLE que aparecem em esquemas Oracle associados a algum workspace do Apex.<br />
<br />
Afinal, para que serve esta tabela? Posso apagá-la?<br />
<br />
Ao realizar uma busca por HTMLDB_PLAN_TABLE na documentação da Oracle e do Apex: <span style="color: red;"><b>No results found</b></span>.<br />
<br />
Caso a tabela HTMLDB_PLAN_TABLE já exista, execute o comando de dropar e após isso faça uma consulta para confirmar a não existência.<br />
<span style="color: red;"><b>Observe que o Comandos SQL informa que "a tabela ou view não existe", quando um comando de SELECT é executado.</b></span><br />
<br />
Seguem os comandos executados:<br />
<i>DROP TABLE htmldb_plan_table;</i><br />
<i>SELECT * FROM htmldb_plan_table;</i><br />
<br />
Após isso, digite um comando de SELECT qualquer. Utilizei o comando abaixo:<br />
<br />
<i>SELECT * </i><br />
<i>FROM emp e</i><br />
<i>JOIN dept d ON e.deptno = d.deptno</i><br />
<br />
Clique em "Explicação" e verifique que o Comandos SQL apresenta o resultado equivalente ao Explain Plan da Oracle.<br />
Veja referência para o Explain Plan na documentação da Oracle: <a href="https://docs.oracle.com/database/121/SQLRF/statements_9010.htm#SQLRF01601">https://docs.oracle.com/database/121/SQLRF/statements_9010.htm#SQLRF01601</a><br />
Caso prefira um artigo em português, segue o do colega Tércio Costa (Oracle ACE Associate): <a href="https://oraclepress.wordpress.com/2017/01/16/explain-plan/">https://oraclepress.wordpress.com/2017/01/16/explain-plan/</a><br />
<br />
<br />
Após isso, veja que o Apex criou a tabela htmldb_plan_table com o resultado do explain plan.<br />
<br />
<b><u>Conclusão</u></b><br />
<br />
A tabela HTMLDB_PLAN_TABLE é utilizada pelo Apex para armazenar os resultados da "Explicação" (Explain plan) de consultas e <b><u>pode ser apagado</u></b> sem medo.<br />
<br />Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-36584051008481292442018-05-09T15:00:00.001-03:002019-09-06T19:32:21.945-03:00Cursos de Oracle SQL grátis<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
<span style="font-size: 13px;"></span>Olá pessoal,</div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
quando fiquei sabendo da notícia não pude deixar de compartilhar aqui no blog.</div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
No Oracle Dev Gym há dois cursos de SQL <b><span style="text-decoration-line: underline;">gratuitos</span> </b>de excelente qualidade.</div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
Só por curiosidade, repare na URL do Dev Gym e perceba que o site foi todo desenvolvido utilizando o Oracle Application Express... YAAA<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEPzT-0_oIphd4fy0kpBv0AP_ATguX2f9dGQTI3NDHCAe-zQq7PVZvgA9fQm1MIbxyYNHxlFy78ND3uVUbf2_wlvsfEP_EnMP8dx_LaIfbZz8Tr0oRL4NNSV7dssTPACEAYYgzh6cmOAHZ/s1600/DfD+url.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="785" data-original-width="1211" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEPzT-0_oIphd4fy0kpBv0AP_ATguX2f9dGQTI3NDHCAe-zQq7PVZvgA9fQm1MIbxyYNHxlFy78ND3uVUbf2_wlvsfEP_EnMP8dx_LaIfbZz8Tr0oRL4NNSV7dssTPACEAYYgzh6cmOAHZ/s400/DfD+url.PNG" width="400" /></a></div>
<br />
Para dar uma ideia da qualidade, o curso é oferecido pela Oracle e ministrado pelo instrutor <b>Chris Saxon</b> (do site "Ask Tom" e do "Magic of SQL").</div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
Para quem é desenvolvedor Apex, o conhecimento de SQL é fundamental! Sugiro investir um tempinho para realizá-los.</div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
Para quem tem dificuldade com o inglês, infelizmente os cursos <b>não estão disponíveis em português</b>, mas pode ser adicionada uma legenda, pois os vídeos estão no YouTube.</div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
O primeiro treinamento chamado de "<strong>Databases for Developers: Foundations</strong>" está disponível na forma "On Demand". Este curso é mais básico e pode ser encontrado no seguinte link: <a href="https://devgym.oracle.com/devgym/database-for-developers.html" style="color: #663399; text-decoration-line: none;">https://devgym.oracle.com/devgym/database-for-developers.html</a></div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
Está sendo lançado agora o "<strong>Databases for Developers: Next Level</strong>" que iniciará no dia 14 de maio de 2018 e permite ajudar a melhorar as habilidades com Oracle SQL. Este curso possui certificado desde que você complete todos os exercícios de maneira satisfatória e está disponível no seguinte link: <a href="https://devgym.oracle.com/pls/apex/dg/class/databases-for-developers-next-level.html" style="color: #663399; text-decoration-line: none;">https://devgym.oracle.com/pls/apex/dg/class/databases-for-developers-next-level.html</a></div>
<div style="background-color: rgba(255, 255, 255, 0.85); color: #444444; font-family: "Segoe UI", Segoe, Tahoma, Helvetica, Arial, sans-serif; line-height: 1.6; margin-bottom: 10px;">
Deixe seu comentário sobre o que achou dos cursos.<br />
<br />
Bons estudos!<br />
<br /></div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com1tag:blogger.com,1999:blog-5150514048465222719.post-54236234117518605472018-05-09T14:05:00.002-03:002022-02-03T14:52:13.196-03:00Migrando os dados utilizando o Comandos SQLOlá pessoal,<br />
<br />
vamos para nossa última postagem da "trilogia" de posts sobre colocar uma aplicação Apex em operação.<br />
<br />
O post de hoje é sobre a <b>migração dos dados de um ambiente para outro</b>.<br />
<br />
Normalmente quando estamos colocando uma aplicação em operação, queremos migrar alguns dados. Os <b>principais dados</b> que normalmente tem que ser migrados <b>são os de tipo</b>, por exemplo: TIPO_ALUNO, TIPO_PROCESSO, etc.<br />
<br />
Entretanto, em ambientes onde o desenvolvedor consegue fazer alterações diretamente na operação (produção), é comum que ele comece a <b>fazer as alterações diretamente na operação</b> e abandone o ambiente de desenvolvimento. <b>Cuidado com essa má prática!</b><br />
<br />
Vamos abordar duas situações para essa migração de dados:<br />
<b>1) </b>Ambiente de origem e destino no <b>mesmo banco</b><br />
<b>2)</b> Ambiente de origem e destino em <b>bancos diferentes</b><br />
<br />
<div style="text-align: center;">
<b><u>MIGRAÇÃO DE DADOS COM AMBIENTES NO MESMO BANCO</u></b></div>
<br />
Segue um passo a passo para a migração.<br />
<br />
<b><u>Passo 1)</u></b> Entrar no Comandos SQL do <b><u>ambiente que contém os dados</u></b>. (Tenha atenção neste passo, para não errar o ambiente). <b>"SQL Workshop" > "Comandos SQL"</b><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfSQp4UtmiYhTV3tCAiUgcdn7VgypEYGBhC50lEC0smnrJH_DuHU9qEU9HlnXoMY_DB5fCL1S-inbcDL8HeV0vmDd8waLyh_nIhyeki-dWu26v5ZXG3MCnz8bl07UeXY2utL08TJbi7hVd/s1600/Capturar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="727" data-original-width="1540" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfSQp4UtmiYhTV3tCAiUgcdn7VgypEYGBhC50lEC0smnrJH_DuHU9qEU9HlnXoMY_DB5fCL1S-inbcDL8HeV0vmDd8waLyh_nIhyeki-dWu26v5ZXG3MCnz8bl07UeXY2utL08TJbi7hVd/s400/Capturar.PNG" width="400" /></a></div>
<br />
<br />
<b>Passo 2)</b> Copie e cole o script abaixo no Comandos SQL para fornecer os grants de SELECT para seu ambiente de destino. <b><span style="color: red;">Não esqueça de trocar a variável "v_ambiente_destino" para o nome do seu ambiente de destino!</span></b><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">-----INICIO SCRIPT-----</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DECLARE</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">v_comando VARCHAR2(200);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">v_ambiente_destino VARCHAR2(30) := 'APEX_ANDERSON'; --INSIRA SEU AMBIENTE DE DESTINO</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">BEGIN</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">--Fornece permissão de leitura em todas as tabelas deste owner</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">FOR cur IN (SELECT * FROM USER_TABLES) LOOP</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> v_comando := 'GRANT SELECT ON "'||cur.table_name||'" TO '||v_ambiente_destino;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> htp.p(v_comando);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> EXECUTE IMMEDIATE v_comando;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">END LOOP;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">END;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">-----TERMINO SCRIPT-----</span><br />
<br />
<b>Passo 3)</b> Clique em "<b>Executar</b>" ("<b>Run</b>" para versão em inglês) (1) e confirme que tudo ocorreu bem no painel inferior (2).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR1-xtfYdrtFnnLeLw3s63I2bsgR5tiK_Hzd8VKc26CVuO-CHrTPqqnpwhpswPoC9IDqgSKCexXJhVSGGRu9lwHYxqwgWsTPBDCC9JZebX7lQV1dAf0RCFbrNO7begfbj14Shd1nwOqUoj/s1600/Comando+de+permiss%25C3%25A3o.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="589" data-original-width="1080" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR1-xtfYdrtFnnLeLw3s63I2bsgR5tiK_Hzd8VKc26CVuO-CHrTPqqnpwhpswPoC9IDqgSKCexXJhVSGGRu9lwHYxqwgWsTPBDCC9JZebX7lQV1dAf0RCFbrNO7begfbj14Shd1nwOqUoj/s400/Comando+de+permiss%25C3%25A3o.PNG" width="400" /></a></div>
<br />
<br />
<b>Passo 4)</b> Entre no Comandos SQL do <b><u>ambiente de destino</u></b> onde os dados serão carregados. (<span style="color: red;"><b>ATENÇÃO para entrar no ambiente correto!</b></span>)<br />
<br />
<b>Passo 5)</b> Copie e cole o script abaixo no Comandos SQL e clique em "<b>Executar</b>" (ou "Run") para carregar os dados que se encontram no seu ambiente de origem. <b><span style="color: red;">Não esqueça de trocar a variável "v_ambiente_origem" para o nome do seu ambiente de origem!</span></b><br />
<div>
<br />
<span style="font-family: "courier new" , "courier" , monospace;">-----INICIO SCRIPT-----</span></div>
<div>
<span style="background-color: white; color: #222222; font-family: "courier new" , "courier" , monospace;">DECLARE</span></div>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">v_comando VARCHAR2(200);</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">v_ambiente_origem VARCHAR2(30) := 'APEX_ANDERSON_DEV';--INSIRA SEU AMBIENTE DE ORIGEM DOS DADOS</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">BEGIN</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">--Primeiro desabilite todas as constraints </span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">FOR i IN (SELECT constraint_name, table_name FROM user_constraints </span></span><span style="background-color: white; color: #222222; font-family: "courier new" , "courier" , monospace;">WHERE constraint_type = 'R'</span><span style="background-color: white; color: #222222; font-family: "courier new" , "courier" , monospace;">) LOOP</span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;">v_comando := 'alter table "'||i.table_name||'" disable constraint "'||i.constraint_name||'"';</span><br />
<div>
<br /></div>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">htp.p(v_comando);</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">EXECUTE IMMEDIATE v_comando;</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">END LOOP;</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">--Para todas as tabelas do ambiente de origem serão carregadas as informações. Caso não queira que alguma tabela seja carregada, acrescente ao NOT IN</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">FOR cur IN (SELECT * FROM ALL_TABLES where owner = v_ambiente_origem AND upper(table_name) NOT IN ('HTMLDB_PLAN_TABLE', 'OUTRA_TABELA')) LOOP</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"> v_comando := 'INSERT INTO "'||cur.table_name||'" SELECT * FROM "'||v_ambiente_origem||'"."'||cur.table_name||'"';</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"> htp.p(v_comando);</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"> EXECUTE IMMEDIATE v_comando;</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">END LOOP;</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">--Ao final habilite novamente todas as constraints </span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">FOR i IN (SELECT constraint_name, table_name FROM user_constraints WHERE constraint_type = 'R') LOOP</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">v_comando := 'alter table "'||i.table_name||'" enable constraint '||i.constraint_name||'';</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">htp.p(v_comando);</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">EXECUTE IMMEDIATE v_comando;</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">END LOOP;</span></span><br />
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: "courier new" , "courier" , monospace;"><span style="background-color: white;">END;</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;">-----TERMINO SCRIPT-----</span><br />
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div class="MsoNormal" style="background-color: white; line-height: 14.2667px; margin: 0cm 0cm 8pt;">
<br />
<br />
Pronto! Seu novo <span style="font-family: inherit;">ambiente </span>está com os dados desejados.<br />
<br />
<br />
Caso seu banco de origem e destino dos dados sejam diferentes, segue outro passo a passo.<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<b><u>MIGRAÇÃO DE DADOS COM AMBIENTES EM BANCOS DIFERENTES</u></b></div>
<br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Este procedimento apenas no Apex (sem utilizar ferramenta) com bancos diferentes utiliza um processo bem mais manual. Só vale a pena executá-lo caso você queira migrar um número pequeno de tabelas.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Outro detalhe é que caso sua tabela tenha milhões de registros, como a exportação é web, as vezes não funciona bem.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Ressalto que o procedimento é para <u><b>bancos diferentes</b></u>. Caso sua aplicação esteja em workspaces e esquemas diferentes, mas está no <u>mesmo banco</u>, o <u><b>melhor procedimento é o descrito acima</b></u>.</span><br />
<br />
<b>Passo 1)</b> Logue no ambiente Apex que contém os dados que deseja exportar (ambiente de origem).<br />
<br />
<b>Passo 2)</b> Acesse o Data Workshop. "<b>SQL Workshop > Utilities > Data Workshop</b>"<br />
<br />
<b>Passo 3)</b> Na seção "<b>Data Unload</b>", você pode escolher entre gerar um arquivo TXT ou XML com os dados de uma tabela. Para este tutorial, vamos selecionar "<b>to XML</b>"<br />
<b><span style="color: red;">Nota: Este é um dos pontos ruins da descarga de dados, pois você tem que fazer tabela a tabela.</span></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtGyXzFMIQl14KPsQGSRtJ2BJjCjijGU8tSGtPyg_18-FeMKreS6mqqMfSjpaq7Qp7Md63OL-hDXQ4BOXp4rh6p7_o19d1pe0h_9h5rlqGl0jcyYDe9d_Ge453ngqeZLLMCqPQFZewuqNI/s1600/Data+Unload.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="573" data-original-width="1494" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtGyXzFMIQl14KPsQGSRtJ2BJjCjijGU8tSGtPyg_18-FeMKreS6mqqMfSjpaq7Qp7Md63OL-hDXQ4BOXp4rh6p7_o19d1pe0h_9h5rlqGl0jcyYDe9d_Ge453ngqeZLLMCqPQFZewuqNI/s400/Data+Unload.png" width="400" /></a></div>
<br />
<br />
Passo 4) Selecione as informações que devem ser incluídas no arquivo: <b>owner</b>, nome da <b>tabela </b>e as <b>colunas </b>que serão incluídas.<br />
Essa seleção das colunas é um dos pontos de dificuldade dos desenvolvedores. Caso queira selecionar todas as colunas, clique na primeira coluna, mantenha pressionado o "Shift" no teclado e clique na última coluna ou clique em qualquer coluna e pressione "Ctrl"+A. Caso queira colunas específicas, mantenha pressionado "Ctrl" e vá clicando sobre as colunas desejadas.<br />
Ao final, caso queira que os dados sejam gerados de maneira condicional, adicione algum comando no campo "Where Clause". Por exemplo, podemos descarregar somente os dados que foram criados pelo login "ANDERSONRF" com o comando CREATED_BY = 'ANDERSONRF' conforme mostra a figura abaixo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW07Ym6oKb9vMPS99a1WkRYjgzNeuLC2vJwIiAWvzkYezlUdfXtc0F6sfgUDkcKTH-afcj8UiKCSapAr-octqeBUesALv_6asxDlgq-QYRAgOPBJSaJZhv-n36kv5LQc8cemB_fcEwjxt3/s1600/Unload+to+XML.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="735" data-original-width="1023" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW07Ym6oKb9vMPS99a1WkRYjgzNeuLC2vJwIiAWvzkYezlUdfXtc0F6sfgUDkcKTH-afcj8UiKCSapAr-octqeBUesALv_6asxDlgq-QYRAgOPBJSaJZhv-n36kv5LQc8cemB_fcEwjxt3/s400/Unload+to+XML.PNG" width="400" /></a></div>
<br />
<br />
<br />
<b>Passo 5</b>) Pressione "<b>Unload Data</b>" e o arquivo (XML ou TXT) será gerado.<br />
<b><span style="color: red;">Nota: Essa ação pode demorar um pouco dependendo da quantidade de dados.</span></b><br />
<br />
<br />
<b>Passo 6)</b> Logue no ambiente de destino dos dados. <span style="color: red;"><b>Fique atento para não errar o ambiente!</b></span><br />
<br />
<br />
<b>Passo 7)</b> Acesse "<b>SQL Scripts</b>" > "<b>Data Workshop</b>"<br />
<br />
<br />
<b>Passo 8)</b> Na seção "<b>Data Load</b>" escolha o mesmo tipo de arquivo selecionado no <b>Passo 3</b>). (Seguindo nosso tutorial, devemos selecionar "XML Data").<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihibLk8KLVXS8uHBaQGOfv4jUy5o3_r3APwrBSeWPiyz8DgAfJUiOsUzIRge9iFm9V1SIs2yADwTkoPiC1a6DxFRkQgx03HZmvG8QVKfKUSn9-sg6_BRm3o0eES3pUvNKIlt7PRgctL-Na/s1600/Data+Load.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="406" data-original-width="1125" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihibLk8KLVXS8uHBaQGOfv4jUy5o3_r3APwrBSeWPiyz8DgAfJUiOsUzIRge9iFm9V1SIs2yADwTkoPiC1a6DxFRkQgx03HZmvG8QVKfKUSn9-sg6_BRm3o0eES3pUvNKIlt7PRgctL-Na/s400/Data+Load.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<b>Passo 9</b>) Selecione o esquema, tabela e o arquivo gerado no passo <b>Passo 5</b>) e pressione o botão "Load Data".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7e6RbKDtF3iDegrW0_1b9NEH-twyJfUUbRgZoMs5CcK0-BNi3kK4mOQDg2BdBQcVIYCj8DYxyPGG-Z9XaJ03Byi5KDaZkVcW6eydPC9Nb7UTeNYtv-mvq_9hgAcVZz-quIsfpJKiHHurl/s1600/Load+XML+Data.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="497" data-original-width="877" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7e6RbKDtF3iDegrW0_1b9NEH-twyJfUUbRgZoMs5CcK0-BNi3kK4mOQDg2BdBQcVIYCj8DYxyPGG-Z9XaJ03Byi5KDaZkVcW6eydPC9Nb7UTeNYtv-mvq_9hgAcVZz-quIsfpJKiHHurl/s400/Load+XML+Data.PNG" width="400" /></a></div>
<br />
<br />
<br />
Pronto! Agora seus dados foram carregados.<br />
<br />
<br />
<span style="font-family: inherit;">Espero que tenha gostado.</span></div>
<div class="MsoNormal" style="background-color: white; line-height: 14.2667px; margin: 0cm 0cm 8pt;">
<br /></div>
<div class="MsoNormal" style="background-color: white; line-height: 14.2667px; margin: 0cm 0cm 8pt;">
Qualquer problema, poste nos comentários.</div>
<div class="MsoNormal" style="background-color: white; line-height: 14.2667px; margin: 0cm 0cm 8pt;">
<br /></div>
<div class="MsoNormal" style="background-color: white; line-height: 14.2667px; margin: 0cm 0cm 8pt;">
Até a próxima!</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-4937304068880520002018-03-14T10:41:00.002-03:002019-09-06T19:33:25.281-03:00Como apagar todos os objetos de um esquema utilizando o Comandos SQLOlá pessoal,<br />
<br />
este post é para apresentar um script muito interessante que apaga todos os objetos de um esquema, ou seja, deixa o esquema do seu espaço de trabalho vazio.<br />
<br />
Lembro que ele <b><u>não</u> </b>apaga as <b>aplicações</b>, mas <b>apaga </b>todos os <b><u>objetos</u> </b>e <b><u>dados</u> </b>do banco<b>.</b><br />
<b><br /></b>
<b><u>Passo 1</u></b>: Logue no espaço de trabalho, entre no "SQL Workshop" > "Comandos SQL"<br />
<br />
<br />
<b><u>Passo 2</u></b>: Copie o comando abaixo e cole na área de texto do Comandos SQL<br />
<br />
<i><span style="font-family: inherit;">------INÍCIO SCRIPT-----</span></i><br />
<i><span style="font-family: inherit;">--MUITO CUIDADO--</span></i><br />
<i><span style="font-family: inherit;">--Este script DROPA todos os objetos do banco de dados</span></i><br />
<br />
<i>DECL<span style="font-family: inherit;">ARE </span></i><br />
<i><span style="font-family: inherit;">v_coma</span>ndo VARCHAR2(200);</i><br />
<i><br /></i>
<i>BEGIN</i><br />
<i>--Primeiro dropamos as views materializadas, pois internamente o Oracle cria um objeto do tipo TABLE e só permite dropar esse objeto com o comando DROP MATERIALIZED VIEW.</i><br />
<i>FOR cur IN (SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = 'MATERIALIZED VIEW') LOOP</i><br />
<i><br /></i>
<i> v_comando := 'DROP MATERIALIZED VIEW "'||cur.object_name||'"';</i><br />
<i> htp.p(v_comando);</i><br />
<i> EXECUTE IMMEDIATE v_comando;</i><br />
<i><br /></i>
<i>END LOOP;</i><br />
<i><br /></i>
<i>--Depois dropamos as tabelas, pois devemos utilizar o comando cascade constraints para excluir em cascata as constraints da tabela</i><br />
<i>FOR cur IN (SELECT * FROM USER_TABLES) LOOP</i><br />
<i><br /></i>
<i> v_comando := 'DROP TABLE "'||cur.table_name||'" cascade constraints';</i><br />
<i> htp.p(v_comando);</i><br />
<i> EXECUTE IMMEDIATE v_comando;</i><br />
<i><br /></i>
<i>END LOOP;</i><br />
<i><br /></i>
<i>--A seguir dropamos os outros objetos (lembrando que package body e jobs são dropados de outra maneira)</i><br />
<i>FOR cur IN (SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE NOT IN ('PACKAGE BODY', 'JOB', 'LOB') ) LOOP</i><br />
<i><br /></i>
<i> v_comando := 'DROP ' || cur.object_type || ' "'||cur.object_name||'"';</i><br />
<i> htp.p(v_comando);</i><br />
<i> EXECUTE IMMEDIATE v_comando;</i><br />
<i><br /></i>
<i>END LOOP;</i><br />
<i><br /></i>
<i>--Comando para dropar as jobs (scheduler jobs)</i><br />
<i>FOR cur IN (SELECT * FROM USER_scheduler_jobs ) LOOP</i><br />
<i><br /></i>
<i> v_comando := 'DBMS_SCHEDULER.drop_job(job_name =>''' ||cur.job_name||''')';</i><br />
<i> htp.p(v_comando);</i><br />
<i> DBMS_SCHEDULER.drop_job(job_name => cur.job_name);</i><br />
<i><br /></i>
<i>END LOOP;</i><br />
<i><br /></i>
<i>--Observação: Caso tenha jobs do tipo JOBS que estão deprecated, consulte a documentação de como dropá-las.</i><br />
<i><br /></i>
<i>END;</i><br />
<br />
------FIM SCRIPT-----<br />
<div>
<br />
<span style="color: red;">Observação: Caso esteja utilizando colunas em tabela do tipo LOB, os objetos do tipo LOB continuarão ocupando espaço em disco. Caso queira liberar o espaço, a tabela que contém o objeto do tipo LOB deve ser "purgada" da lixeira (RECYCLE BIN) com o comando:</span><br />
<span style="color: red;"><br /></span>
<i><span style="color: red;">PURGE TABLE <<nome tabela>></span></i><br />
<br /></div>
<div>
<b><u>Passo 3)</u></b> Clique no botão "<b>Executar</b>"</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijTuq_PnUOM5qwvMgrzbQNqn0Ocs2Vag3siwu7mIWmZ-q-gN12Y_nL2S5_GmTqOmLztvNH1GLbMlMwxjpmacsve6xxmW67vmYgVLkuXEWlr_TJTiOYcVNZscmtrCw2kSpVgyD0OUmZDYHZ/s1600/Comandos+SQL+-+script+dropar+tabelas.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="806" data-original-width="1597" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijTuq_PnUOM5qwvMgrzbQNqn0Ocs2Vag3siwu7mIWmZ-q-gN12Y_nL2S5_GmTqOmLztvNH1GLbMlMwxjpmacsve6xxmW67vmYgVLkuXEWlr_TJTiOYcVNZscmtrCw2kSpVgyD0OUmZDYHZ/s400/Comandos+SQL+-+script+dropar+tabelas.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 4)</u></b> Confira o resultado da execução no painel de Resultados localizado na parte inferior. Caso tenha ocorrido algum problema, tente identificar o motivo.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSaoWEY_AkCYsjRBOoiUXstubXNEJ9QQoiLdwVxn9UwGRw0rXK8VeAXbmnnMOa7qx1q8ai51ukfsG0WCnqV9nqnO8zehM-y64W0bruZQKHZTKFWobyQrm2ABzdWCCY5diSWezI1yNxRjg9/s1600/Resultados.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="807" data-original-width="1599" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSaoWEY_AkCYsjRBOoiUXstubXNEJ9QQoiLdwVxn9UwGRw0rXK8VeAXbmnnMOa7qx1q8ai51ukfsG0WCnqV9nqnO8zehM-y64W0bruZQKHZTKFWobyQrm2ABzdWCCY5diSWezI1yNxRjg9/s400/Resultados.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<i><span style="color: red;">Observação: Normalmente o feedback final do Apex é de "<span style="background-color: white; font-family: "menlo" , "consolas" , monospace , serif; font-size: 1.2rem; white-space: pre-wrap;">Tabela eliminada.</span>". Esse feedback é incorreto, pois o Comandos SQL do Apex informa apenas o resultado do primeiro comando executado.</span></i></div>
<div>
<i><span style="color: red;"><br /></span></i></div>
<div>
Espero que tenha gostado!<br />
Qualquer dúvida ou, sugestão, deixe no comentário!</div>
<div>
<br /></div>
<div>
Até a próxima!</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com1tag:blogger.com,1999:blog-5150514048465222719.post-31949336271973813892018-03-14T10:26:00.001-03:002019-09-06T19:34:16.381-03:00Como gerar o DDL dos objetos de banco e importar em outro ambienteOlá pessoal,<br />
<br />
seguindo a série de posts "<b><i>Como colocar uma aplicação Apex em operação utilizando o App Builder e o SQL Workshop</i></b>", vamos hoje falar sobre a geração do DDL (Data Definition Language) dos objetos de banco e a importação desses objetos em outro ambiente.<br />
<br />
Antes de entrarmos propriamente no objetivo do post, gostaria de esclarecer uma dúvida comum de desenvolvedores iniciantes sobre a separação no Apex entre a <b>aplicação </b>e os <b>objetos de banco</b> (tabelas, views, functions, procedures etc).<br />
<br />
A <b>aplicação </b>é manipulada no "<b>App Builder</b>", enquanto os <b>objetos de banco</b> e os <b>dados</b> são manipulados pelo desenvolvedor no "<b>SQL Workshop</b>". Apesar do nome SQL Workshop, nesta área é possível também manipular PL/SQL... :)<br />
<br />
Veja a imagem abaixo com a identificação de onde manipulamos <b>aplicações </b>e <b>objetos de banco</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ2r-9Uo4u_zHDNGAhiE3w9J_574AXEEu16sTX9Qkw3Eq99pfYboMDXJL4irgDtkZPHhwKFO6yCztxEweQl97MKFpJ2ZUKAG2ITZkSR-UrMOs0lMjHoX_OKMUaGfgRjqPBiBfMsjV8afbG/s1600/Tela+inicial+Apex.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="546" data-original-width="1261" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ2r-9Uo4u_zHDNGAhiE3w9J_574AXEEu16sTX9Qkw3Eq99pfYboMDXJL4irgDtkZPHhwKFO6yCztxEweQl97MKFpJ2ZUKAG2ITZkSR-UrMOs0lMjHoX_OKMUaGfgRjqPBiBfMsjV8afbG/s400/Tela+inicial+Apex.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Adivinha onde podemos gerar o DDL dos objetos de banco?<br />
<br />
Isso mesmo, no SQL Workshop!<br />
<br />
Vamos seguir um passo a passo para fazermos essa migração do DDL de um ambiente para outro.<br />
<br />
<b><u>Passo 1)</u></b> Logar no ambiente que contém os objetos de banco (provavelmente seu ambiente de desenvolvimento) e acessar o SQL Workshop<br />
<br />
<b><u>Passo 2)</u></b> Clicar em "<b>Utilities</b>" e em "<b>Generate DDL</b>"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpI2469UFqfUw3npXdEwZutoJ1h74jchABZl49aEVmNSkofNTAB8SMW4CtGDUL4TpIbdep0Etj0yjLuXYYlOO92NBWNgNyoJ6G4maR-Wedp9Tw2FIFSQnclysWSZpAGrJjZYoS1ZVuS2t1/s1600/Generate+DDL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="1277" height="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpI2469UFqfUw3npXdEwZutoJ1h74jchABZl49aEVmNSkofNTAB8SMW4CtGDUL4TpIbdep0Etj0yjLuXYYlOO92NBWNgNyoJ6G4maR-Wedp9Tw2FIFSQnclysWSZpAGrJjZYoS1ZVuS2t1/s400/Generate+DDL.png" width="400" /></a></div>
<br />
<br />
<b><u>Passo 3)</u></b> Clique no botão "<b>Create Script></b>"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7yBJ8ONBh7BfgVqJCnodxsdW5CM8q1_5wsb5lNANn-Ca-Prar6iU_qz-25TQQmdjCLUslk7mQvjb8FqA6D40Moi1XERodRpBsx188L8R42mlIEPvOnV3dNMhZs_lmiU376j_O_uybSAa7/s1600/Create+script.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="40" data-original-width="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7yBJ8ONBh7BfgVqJCnodxsdW5CM8q1_5wsb5lNANn-Ca-Prar6iU_qz-25TQQmdjCLUslk7mQvjb8FqA6D40Moi1XERodRpBsx188L8R42mlIEPvOnV3dNMhZs_lmiU376j_O_uybSAa7/s1600/Create+script.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 4)</u></b> Selecione o esquema onde os objetos se encontram e clique "<b>Next >"</b>.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqmwPub9DU0blsFGukEpXGac-wqSQejoCd8T5gXzo4XZQ-As-nTW2kz7Cx2r62BNaINj1EvyZZ6WKRQ9NEykkMtrrIcUy6H19ZxyWHwVvHaan9eAK7Ur0D6QfFEPjl5_qFZi5nQorjBulm/s1600/Select+Schema.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="471" data-original-width="794" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqmwPub9DU0blsFGukEpXGac-wqSQejoCd8T5gXzo4XZQ-As-nTW2kz7Cx2r62BNaINj1EvyZZ6WKRQ9NEykkMtrrIcUy6H19ZxyWHwVvHaan9eAK7Ur0D6QfFEPjl5_qFZi5nQorjBulm/s400/Select+Schema.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 5)</u></b> Selecione o tipo de "Output", sugiro "Save As Script File", pois gerará um arquivo que você poderá importar no outro ambiente. Caso deseje que todos os objetos sejam exportados, clique em "Check all" e no botão "<b>Generate DDL</b>". Caso contrário, selecione individualmente cada tipo de objeto que deseja exportar e clique "<b>Next ></b>" para refinar a seleção dos objetos a serem exportados. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_GbzIUqzFTn9r59R5JrFyGsy5fOVKZ91Ksz3SSTFIfXYSnV9S-KvS5WiBXNz63BZJDXZRiI7c3MOQ0LW3aZ3_TZb47oUSHMPsLJIHEywVEB027EdtWGjiSdHVF_eZnz7Vb-y9B8kePA-S/s1600/Generate+DDL+-+select+objects.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="524" data-original-width="819" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_GbzIUqzFTn9r59R5JrFyGsy5fOVKZ91Ksz3SSTFIfXYSnV9S-KvS5WiBXNz63BZJDXZRiI7c3MOQ0LW3aZ3_TZb47oUSHMPsLJIHEywVEB027EdtWGjiSdHVF_eZnz7Vb-y9B8kePA-S/s400/Generate+DDL+-+select+objects.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 6)</u></b> Digite o nome do Script e uma descrição para o script que será criado no repositório do "SQL Scripts" (componente que fica dentro do "SQL Workshop") e clique "<b>Create Script</b>"</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvAoCZshXvfYVuU5spJepKTXqpfzhjJ_B9mQqVVr-OO2Fd2BWlzndyV2hLN5EcSWIpjl_gfX0MFEGDRCtEtpegErYhLw4zZtJakLWJZPUCa6eU849FdTMvxJ5kPequ4XeipiGx2rnYPVZy/s1600/Generate+DDL+-+name+description.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="470" data-original-width="791" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvAoCZshXvfYVuU5spJepKTXqpfzhjJ_B9mQqVVr-OO2Fd2BWlzndyV2hLN5EcSWIpjl_gfX0MFEGDRCtEtpegErYhLw4zZtJakLWJZPUCa6eU849FdTMvxJ5kPequ4XeipiGx2rnYPVZy/s400/Generate+DDL+-+name+description.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<i><span style="color: red;">Observação: Ao clicar em "Create Script", a geração do script pode ser uma operação bem lenta. No ambiente do apex.oracle.com é tão l</span></i><i><span style="color: red;">ento que as vezes dá timeout!!! Aparentemente a lentidão é maior quanto maior a quantidade de objetos no banco todo.</span></i></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 7)</u></b> Ao finalizar a criação do script, clique no lápis logo abaixo da coluna "Edit"</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUxdRNa4kMCbULebqhlHwur2PcnTl2DqSDO7UK5G9QVroT7KsRp1-RVvS3lU1zjk5QW8qz9NJ7hnr0ylT4MHVF4PdL3skeJ37btVQ9FRQBcxZGpgo96rJg8r8f0iqwXKBuSEZHKv2RIA8p/s1600/Script+criado.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="394" data-original-width="1401" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUxdRNa4kMCbULebqhlHwur2PcnTl2DqSDO7UK5G9QVroT7KsRp1-RVvS3lU1zjk5QW8qz9NJ7hnr0ylT4MHVF4PdL3skeJ37btVQ9FRQBcxZGpgo96rJg8r8f0iqwXKBuSEZHKv2RIA8p/s400/Script+criado.PNG" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 8)</u> </b> Clique em Download para baixar o arquivo.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhanYmlO10qTH1pfThR4BQR7fZnugv85Wz5jvJf-SkBFPm_DVUTe-1wpdzrWZ2p4HGPJH7yg0D-vUw63jAuDyeLehnFK8pDjNv_QIFLLcqa_TorxaLkLkw_lO4pusdvDrJEwlfm4kRmNxLi/s1600/Download+do+script.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="575" data-original-width="1072" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhanYmlO10qTH1pfThR4BQR7fZnugv85Wz5jvJf-SkBFPm_DVUTe-1wpdzrWZ2p4HGPJH7yg0D-vUw63jAuDyeLehnFK8pDjNv_QIFLLcqa_TorxaLkLkw_lO4pusdvDrJEwlfm4kRmNxLi/s400/Download+do+script.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Pronto! Você já gerou o arquivo que será necessário para a criação do DDL no outro ambiente.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: red;"><i>Obs: Fique atento que a partir de agora os passos serão executados em outro ambiente Apex (normalmente o de operação)!!!</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 9)</u></b> Agora, faça o login no <b><u>ambiente Apex onde este arquivo será importado</u></b> e acesse "<b>SQL Workshop</b>" > "<b>SQL Scripts</b>". </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMJVL5lb-fB6wD_Ku-Gduekzep32W22AtHZPZ06Mx8-LdF1jqUeRGVWOwmU70LcNB7iEGF_iA3clu6naa87UATzuDMvamP5m9WGztkGolU_kwh2ZG080MV1vowfsVgrIaEVBpk4LD38YQX/s1600/SQL+Scripts.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="349" data-original-width="1126" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMJVL5lb-fB6wD_Ku-Gduekzep32W22AtHZPZ06Mx8-LdF1jqUeRGVWOwmU70LcNB7iEGF_iA3clu6naa87UATzuDMvamP5m9WGztkGolU_kwh2ZG080MV1vowfsVgrIaEVBpk4LD38YQX/s400/SQL+Scripts.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 10)</u></b> Em SQL Scripts, clique no botão "<b>Upload ></b>".</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGDT8BlRaVFZRJWeosxbcWDXplH1xrOb6l4pzcvVGa_SEz5WBf6gPC-_hQJ0Y0S2fI0_VTicxm8st2GyXy-5aQAbYiFjqtFnQGQ7sogvfyFz8r_QUGmuNnN1ZACWkbmijNAaIPZr2bCPO/s1600/Upload+no+SQL+Scripts.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="1037" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGDT8BlRaVFZRJWeosxbcWDXplH1xrOb6l4pzcvVGa_SEz5WBf6gPC-_hQJ0Y0S2fI0_VTicxm8st2GyXy-5aQAbYiFjqtFnQGQ7sogvfyFz8r_QUGmuNnN1ZACWkbmijNAaIPZr2bCPO/s400/Upload+no+SQL+Scripts.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 11)</u></b> Selecione o arquivo gerado no passo 8), digite o nome do script e clique "<b>Upload</b>"</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisLromYbrVSSF4vr2ofmzNY0H7zkWCPynwMUmOIcYm2TRmx5KRv1DzVrBspMe7GEUa2oCCdQOHFZqkzpBguXfzcs_MI67EcIi_PmfLWAp3HVSL8Sfb9xKv1j_hXxDkPbMHgFA2py8uUvPf/s1600/Upload+do+arquivo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="1007" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisLromYbrVSSF4vr2ofmzNY0H7zkWCPynwMUmOIcYm2TRmx5KRv1DzVrBspMe7GEUa2oCCdQOHFZqkzpBguXfzcs_MI67EcIi_PmfLWAp3HVSL8Sfb9xKv1j_hXxDkPbMHgFA2py8uUvPf/s400/Upload+do+arquivo.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 12)</u></b> Após o upload, clique no "<b>Run</b>" para executar o script.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuejO2pshBzIbcFwg9XhyphenhyphenxBaWngDx62YfC3dLgbbLn8GcMRDtCIwA6ym6CbeXZu2bDJp2Zx5S9KxBay1addbzlg2TaGVyjucGC_jI6evJMVp5JuBVTjmLx8XuMG8_Z4dOZe7Q7-tWEIR8c/s1600/Executar+script.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="304" data-original-width="1143" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuejO2pshBzIbcFwg9XhyphenhyphenxBaWngDx62YfC3dLgbbLn8GcMRDtCIwA6ym6CbeXZu2bDJp2Zx5S9KxBay1addbzlg2TaGVyjucGC_jI6evJMVp5JuBVTjmLx8XuMG8_Z4dOZe7Q7-tWEIR8c/s400/Executar+script.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Passo 13)</b> Antes de executar, o Apex faz um "parse" do seu script e informa a quantidade de comandos. Confira se está ok, e clique em "<b>Run Now</b>"</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXT3ugfh7jSYbaYeWA8eNHUPvtiCobKNXWrKK4HYYFtOTPEOORLmx1PLerRm8dt_f4Rti5Om83TtbuOUhZOggo_ukcx3MZs_0D2Z424b7yuu-AmGwIZxY_nG9Vb79kmXF_GlOjo2oHzwoH/s1600/Parse+do+script.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="621" data-original-width="823" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXT3ugfh7jSYbaYeWA8eNHUPvtiCobKNXWrKK4HYYFtOTPEOORLmx1PLerRm8dt_f4Rti5Om83TtbuOUhZOggo_ukcx3MZs_0D2Z424b7yuu-AmGwIZxY_nG9Vb79kmXF_GlOjo2oHzwoH/s400/Parse+do+script.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<b><u>Passo 14</u></b>) Confira os erros e caso necessário, utilize o procedimento do post indicado a seguir para "limpar" todo o esquema.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Link: <a href="https://desenvolvedorapex.blogspot.com/2018/03/como-apagar-todos-os-objetos-de-um.html">https://desenvolvedorapex.blogspot.com/2018/03/como-apagar-todos-os-objetos-de-um.html</a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxPIJ28V7yMN0y8sOrihZ7qhxljKAJGcyZW4IfNaAZNwZ6PnyewPrNSc52toizxZaPIbv_uPePjF5kyKVUtM-ILocLIUb8IvDd51wMxLCtMx5_Rr3gd408oQRIeqZSD4xGidWBcdGkIC80/s1600/Confirma%25C3%25A7%25C3%25A3o+de+execucao+script.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="787" data-original-width="1095" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxPIJ28V7yMN0y8sOrihZ7qhxljKAJGcyZW4IfNaAZNwZ6PnyewPrNSc52toizxZaPIbv_uPePjF5kyKVUtM-ILocLIUb8IvDd51wMxLCtMx5_Rr3gd408oQRIeqZSD4xGidWBcdGkIC80/s400/Confirma%25C3%25A7%25C3%25A3o+de+execucao+script.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<i><span style="color: red;">Observação: Alguns erros acontecem, pois às vezes o script gerado pelo Apex cria o mesmo objeto duas vezes e ocorre o erro de nome já utilizado em outro objeto ("name is already used by an existing object"). Acontece muito com índices de chave primária e índices de LOB.</span></i></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Pronto! Agora seus objetos estão todos no esquema desejado!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Para conferir os objetos criados, você pode acessar o "SQL Workshop > Browser de objetos".</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Lembrando que os dados não foram migrados. Em breve, postaremos como migrar os dados de outro esquema. Não perca!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Espero que tenha gostado.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Deixe seu comentário!</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-65145229479267344972018-02-28T22:47:00.001-03:002019-09-06T19:36:06.582-03:00Colocando uma aplicação Apex em operação apenas com o App Builder e SQL CommandsOlá pessoal,<br />
<br />
muitos iniciantes tem dúvidas de como colocar uma aplicação em operação (produção) no Apex.<br />
<br />
<i><span style="color: red;">Observação: Em diversos lugares utiliza-se o termo <b><u>em produção </u></b>para as aplicações que o usuário final já está operando. Prefiro utilizar o termo <b><u>em operação</u></b>, pois está previsto no ITIL e não confunde. Muitas pessoas acham que um sistema <u>em produção</u> é um sistema que <u>ainda está sendo produzido</u>, mas no jargão da TI este termo na verdade significa um sistema já em operação/uso.</span></i><br />
<div>
<br /></div>
Primeiro, gostaria de ressaltar que na verdade toda <b>aplicação Apex já é acessível pelo usuário final</b> como se estivesse em operação (Talvez seja necessário criar um usuário para que ele possa autenticar/logar). Basta divulgar o link!<br />
<br />
Segundo, este post e os subsequentes da série abordarão como realizar as operações utilizando apenas o App Builder e o SQL Commands do Apex. Sei que há maneiras melhores de se fazer essas operações utilizando ferramentas!<br />
<br />
A boa prática preza que a aplicação deve ser desenvolvida em um <b><u>ambiente diferente</u></b> do ambiente de operação.<br />
<br />
Portanto, quando você terminar de desenvolver e quiser colocar em operação basicamente deve executar <b style="text-decoration-line: underline;">3 ações</b> de cópia do ambiente de desenvolvimento para o de operação:<br />
<br />
<b>1)</b> <a href="http://desenvolvedorapex.blogspot.com.br/2018/03/como-gerar-o-ddl-dos-objetos-de-banco-e.html" target="_blank">Copiar o <b><u>DDL (Data definition language)</u> </b>dos objetos de banco</a><br />
<br />
<b>2)</b> Copiar a <b><u>aplicação</u></b><br />
<br />
<b>3)</b> <a href="http://desenvolvedorapex.blogspot.com.br/2018/05/migrando-os-dados-utilizando-o-comandos.html" target="_blank">Copiar os <b><u>dados</u></b></a><br />
<br />
Até mais!Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-43321184166042619512017-11-30T19:22:00.002-02:002019-09-06T19:36:20.163-03:00Nomeação Oracle ACE Associate<div class="MsoNormal">
Prezados,<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
É com grande satisfação e orgulho que informo que esta semana fui
nomeado <b>Oracle ACE Associate</b>, sendo o primeiro do Brasil especialista na
tecnologia Apex e único do setor público!<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Atualmente apenas 20 profissionais contam com o
reconhecimento de Oracle ACE no Brasil.</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Segundo a própria Oracle: “<i>o programa ACE é o reconhecimento
pela excelência dentro da comunidade Oracle mundial, reconhecendo indivíduos
que demonstraram tanto proficiência técnica quanto participação ativa na
comunidade</i>”<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Agradeço a todos os que acompanham o blog por fazerem parte desta conquista!<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Segue meu perfil na lista de ACEs: <a href="https://apex.oracle.com/pls/apex/f?p=19297:4:::NO:4:P4_ID:17120">https://apex.oracle.com/pls/apex/f?p=19297:4:::NO:4:P4_ID:17120</a><o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2X1hoVw1I-IsUAuxKgCyl_LmeOA40YKFX9KZ_eucA6tXQmWmDeYHMNOXMh1iM-ek7k97-k9JZ_IUsHSrYsjZjR15Lr1xHbIGQ6dkZYZg6v5EWnN6XoYPtcrxxtEAt_mYIO972OzZHtIsC/s1600/ACE+profile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="776" data-original-width="762" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2X1hoVw1I-IsUAuxKgCyl_LmeOA40YKFX9KZ_eucA6tXQmWmDeYHMNOXMh1iM-ek7k97-k9JZ_IUsHSrYsjZjR15Lr1xHbIGQ6dkZYZg6v5EWnN6XoYPtcrxxtEAt_mYIO972OzZHtIsC/s400/ACE+profile.png" width="392" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Obrigado a todos!</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com0tag:blogger.com,1999:blog-5150514048465222719.post-12604489047533444522017-11-21T20:47:00.002-02:002019-09-06T19:37:02.811-03:00Utilizando comentários de coluna como texto de ajuda no Default de UIOlá pessoal,<br />
<br />
em diversas instituições as colunas de tabelas já possuem comentários que informam o significado delas.<br />
<br />
Por que não utilizar esses comentários no texto de ajuda de itens?<br />
<br />
A melhor prática diz que devemos criar primeiro os Defaults de UI antes de criarmos os formulários e relatórios.<br />
<br />
Portanto, este tutorial mostrará uma maneira de incluirmos os comentários de coluna de tabela como texto de ajuda.<br />
<br />
Como exemplo utilizaremos a tabela EMP.<br />
<br />
Para iniciar iremos incluir os comentários nas colunas da tabela EMP conforme abaixo:<br />
<br />
<span style="color: red;">(OBS: Execute cada comando no SQL Commands individualmente ou crie e execute um Script no SQL Scripts do Apex)</span><br />
<span style="color: red;"><br /></span>
<i>COMMENT ON COLUMN emp.empno is 'Código do empregado';<br />COMMENT ON COLUMN emp.ename is 'Nome do empregado';<br />COMMENT ON COLUMN emp.job is 'Função do empregado';<br />COMMENT ON COLUMN emp.mgr is 'Gerente do empregado';<br />COMMENT ON COLUMN emp.hiredate is 'Data de contratação do empregado';<br />COMMENT ON COLUMN emp.sal is 'Salário bruto do empregado';<br />COMMENT ON COLUMN emp.comm is 'Comissão de vendas do empregado';<br />COMMENT ON COLUMN emp.deptno is 'Departamento de alocação do empregado';</i><br />
<i><br /></i>
Verifique se os comentários foram inseridos corretamente:<br />
<br />
<i>SELECT * </i><br />
<i>FROM user_col_comments</i><br />
<i>WHERE table_name = 'EMP'</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjywVkpAmCb9Z8ltUB5WqgXS4EmnfkkROnEO7DKp9LXiRQ6L84qxAcae276NWEdKa5T-FrByownc9N5v5nNGWOaeyBtUv4frhOCDD1mla24pbe5i0x80DgbUMv6rPKeM6Lgh6sL6VLK7gqd/s1600/Coment%25C3%25A1rios+na+tabela+EMP.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="312" data-original-width="943" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjywVkpAmCb9Z8ltUB5WqgXS4EmnfkkROnEO7DKp9LXiRQ6L84qxAcae276NWEdKa5T-FrByownc9N5v5nNGWOaeyBtUv4frhOCDD1mla24pbe5i0x80DgbUMv6rPKeM6Lgh6sL6VLK7gqd/s400/Coment%25C3%25A1rios+na+tabela+EMP.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Agora temos que inserir esses comentários no Default de UI da tabela. Para isso podemos utilizar o seguinte código:<br />
<br />
BEGIN<br />
<br />
--Comando para sincronizar o default de UI da tabela<br />
APEX_UI_DEFAULT_UPDATE.SYNCH_TABLE (<br />
p_table_name => '<b><i>EMP</i></b>');<br />
<br />
--Cursor para percorrer os comentários da tabela que são acessíveis pela view Oracle user_col_comments<br />
FOR cur IN (SELECT table_name, column_name, comments<br />
FROM user_col_comments<br />
WHERE table_name = '<b><i>EMP</i></b>')<br />
LOOP<br />
<br />
--Função da API do Apex para atualizar o help do item correspondente àquela coluna<br />
APEX_UI_DEFAULT_UPDATE.UPD_ITEM_HELP (<br />
p_table_name => cur.table_name,<br />
p_column_name => cur.column_name,<br />
p_help_text => cur.comments);<br />
<br />
END LOOP;<br />
<br />
END;<br />
<br />
Pronto! Agora ao criar um formulário a partir desta tabela, a ajuda (help) do item será o comentário correspondente na tabela.<br />
<br />
Veja um exemplo de um formulário e relatório criado após a inserção da ajuda nos defaults de UI na tabela EMP utilizando o comando acima.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpOT1w7oadPk8cg6hvWr-hec5_nRi3jAKMRXBPx5f4rZ9DPQW-HI-Xpd1BXuWUMqViMBFSoRG-i5ovu7EbSywFNr_1ASWEbVEURXIQRDSmoxJh1LIV5mT0JGHTDSwQJ04eH9X5LL0RIJgL/s1600/Ajuda+na+coluna+ENAME.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="555" data-original-width="1385" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpOT1w7oadPk8cg6hvWr-hec5_nRi3jAKMRXBPx5f4rZ9DPQW-HI-Xpd1BXuWUMqViMBFSoRG-i5ovu7EbSywFNr_1ASWEbVEURXIQRDSmoxJh1LIV5mT0JGHTDSwQJ04eH9X5LL0RIJgL/s640/Ajuda+na+coluna+ENAME.PNG" width="640" /></a></div>
<br />
<br />
Repare que o comentário que originalmente estava na coluna ENAME agora está na ajuda do item.<br />
<br />
Os mesmo ocorre para todos os outros itens.<br />
<br />
Por hoje é isso! Espero que tenha gostado.<br />
<br />
Deixe seu comentário sobre o que achou.<br />
<br />
Até a próxima!<br />
<br />
<br />
<br />
<b><br /></b>
<b><br /></b>
<br />
<div>
<b><br /></b></div>
<div>
<b><br /></b></div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com2tag:blogger.com,1999:blog-5150514048465222719.post-40292422592471316472017-11-03T23:56:00.001-02:002017-11-03T23:56:19.752-02:00Premiação de reconhecimento utilizando Oracle ApexOlá pessoal,<br />
<br />
gostaria de compartilhar minha imensa alegria e satisfação por ter sido premiado na semana passada em 3 categorias no prêmio <b>Reconhe-Ser </b>concedido pelo Tribunal de Contas da União como reconhecimento aos servidores que se destacaram durante o ano.<br />
<br />
Fui agraciado nas categorias:<br />
<br />
<b><u>1) Instrutor destaque</u></b><br />
<b><u><br /></u></b>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr-G8cHkXCTJ_UsoXo-uSAo57G7UGulk9f2ivi5rTtfebRXErixN0g-0tUgECgnNdUMgNsFJAKKH0_cySTDtHpHwVi-77JQHqbnWsLxcxq-zQgnGxr_bQKAkazn6cv0zcQneW9p52rXAB6/s1600/_IMG_6612.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="620" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr-G8cHkXCTJ_UsoXo-uSAo57G7UGulk9f2ivi5rTtfebRXErixN0g-0tUgECgnNdUMgNsFJAKKH0_cySTDtHpHwVi-77JQHqbnWsLxcxq-zQgnGxr_bQKAkazn6cv0zcQneW9p52rXAB6/s320/_IMG_6612.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Esse prêmio foi concedido por ter sido muito bem avaliado como instrutor no curso "<b>Desenvolvendo aplicações web utilizando Oracle Application Express 5</b>".<br />
<br />
Obrigado a todos os alunos pela excelente avaliação!!!<br />
<br />
<br />
<b><u>2) Trabalho de destaque</u></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwyNZO0-Lniq60I6TgSmSBHfeDvgTf_3G9t5NkVxzRmr5m8kxZNCub61GGnY8o5wXZWEbsx8RR1BD1bPxwGLJdUCiqRudNDLfAw-MVBjq46AI0g2rOib47026HEKMjOgEKs45bVEcVO6yd/s1600/_IMG_6611.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="432" data-original-width="612" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwyNZO0-Lniq60I6TgSmSBHfeDvgTf_3G9t5NkVxzRmr5m8kxZNCub61GGnY8o5wXZWEbsx8RR1BD1bPxwGLJdUCiqRudNDLfAw-MVBjq46AI0g2rOib47026HEKMjOgEKs45bVEcVO6yd/s320/_IMG_6611.jpg" width="320" /></a></div>
<br />
Este prêmio foi concedido pela atuação no projeto do "<b>Portfólio/Catálogo de Serviços de TI</b>" desenvolvido na tecnologia <b>Oracle Application Express.</b><br />
<br />
Agradeço aos colegas da TI do Tribunal pela oportunidade de trabalhar neste projeto!<br />
<br />
<br />
<b>3) Trabalho inovador</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7jrm8Ta-attTdpfW4OlAH5inx_AIi7gC7_49sAcGFW020DZP6Dd4j-aKosyX53mzdT9hGkqN5KTAXKe4wzJB-cdyer68U9DxOM0IQIh7rCOQEU8j7mwXwIsRwo6PKCS4im5jMqib2-aVd/s1600/_IMG_6609.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="453" data-original-width="640" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7jrm8Ta-attTdpfW4OlAH5inx_AIi7gC7_49sAcGFW020DZP6Dd4j-aKosyX53mzdT9hGkqN5KTAXKe4wzJB-cdyer68U9DxOM0IQIh7rCOQEU8j7mwXwIsRwo6PKCS4im5jMqib2-aVd/s320/_IMG_6609.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Este prêmio foi concedido pela atuação no "<b>Sistema de certidão negativa de inabilitados e inidôneos</b>" que em menos de um ano já se tornou a aplicação da tecnologia <b>Oracle Application Express </b>mais acessada do TCU!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Obrigado à equipe da Semec pela oportunidade!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Repare que todos os prêmios foram relativos a trabalhos envolvendo a tecnologia <b>Oracle Application Express!</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: left;">
Compartilho minha alegria e agradeço a todos que de alguma forma contribuíram para essa conquista,</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Obrigado!</div>
Anderson Ferreirahttp://www.blogger.com/profile/10919910774989715630noreply@blogger.com1