SET SERVEROUTPUT ON SIZE 1000000
SET ECHO OFF
SET VERIFY OFF
SET DEFINE '~'
SET ESCAPE ON
WHENEVER SQLERROR EXIT
REM $Id: cp_analyzer.sql, 200.24 2017/03/31 09:10:25 WILLIAM.BURBAGE@ORACLE.COM Exp $
REM +=========================================================================+
REM | Copyright (c) 2001 Oracle Corporation |
REM | Redwood Shores, California, USA |
REM | All rights reserved. |
REM +=========================================================================+
REM | Framework 4.0.1 |
REM | |
REM | FILENAME |
REM | cp_analyzer.sql |
REM | |
REM | DESCRIPTION |
REM | |
REM | HISTORY |
REM +=========================================================================+
REM REM
REM ANALYZER_BUNDLE_START
REM
REM COMPAT: 11i 12.0 12.1 12.2
REM
REM MENU_TITLE: Concurrent Processing Analyzer
REM
REM MENU_START
REM
REM SQL: Run Concurrent Processing Analyzer
REM FNDLOAD: Load Concurrent Processing Analyzer as a Concurrent Program
REM
REM MENU_END
REM
REM
REM HELP_START
REM
REM Concurrent Processing Analyzer Help [Doc ID: 1411723.1]
REM
REM Compatible with: [11i|12.0|12.1|12.2]
REM
REM Explanation of available options:
REM
REM (1) Runs cp_analyzer.sql as APPS user to create an HTML report
REM
REM (2) Install Concurrent Processing Analyzer as Concurrent Program
REM o Runs FNDLOAD as APPS
REM o Defines the analyzer as a concurrent executable/program
REM o Adds the analyzer to default request group: "System Administrator Reports"
REM
REM HELP_END
REM
REM FNDLOAD_START
REM
REM PROD_TOP: FND_TOP
REM PROG_NAME: CP_ANALYZER_SQL
REM DEF_REQ_GROUP: System Administrator Reports
REM PROG_TEMPLATE: CPAZ.ldt
REM PROD_SHORT_NAME: FND
REM CP_FILE: cp_analyzer_cp.sql
REM APP_NAME: Application Object Library
REM
REM FNDLOAD_END
REM
REM DEPENDENCIES_START
REM
REM
REM
REM DEPENDENCIES_END
REM
REM OUTPUT_TYPE: UTL_FILE
REM
REM ANALYZER_BUNDLE_END
declare
apps_version FND_PRODUCT_GROUPS.RELEASE_NAME%TYPE;
BEGIN
SELECT max(release_name) INTO apps_version
FROM fnd_product_groups;
apps_version := substr(apps_version,1,4);
-- Validation to verify analyzer is run on proper e-Business application version
if apps_version NOT IN ('11.5','12.0','12.1','12.2') then
dbms_output.put_line('***************************************************************');
dbms_output.put_line('*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***');
dbms_output.put_line('***************************************************************');
dbms_output.put_line('*** This instance is eBusiness Suite version '|| apps_version ||' ');
dbms_output.put_line('*** This Analyzer script is compatible for following version(s): ');
dbms_output.put_line('*** 11i,12.0,12.1,12.2 ');
dbms_output.put_line('*** Note: the error below is intentional ');
raise_application_error(-20001, 'ERROR: The script requires eBusiness versions 11i,12.0,12.1,12.2');
end if;
END;
/
PROMPT ===========================================================================
PROMPT (Optional) Minimum acceptable volume of closed runtime FND_CONCURRENT_REQUEST data
PROMPT ===========================================================================
PROMPT
ACCEPT p_min_volume NUMBER DEFAULT '3500' PROMPT 'Enter the Minimum acceptable volume of FND_CONCURRENT_REQUEST data (3500): '
PROMPT
PROMPT ===========================================================================
PROMPT (Optional) Maximum acceptable volume of closed runtime FND_CONCURRENT_REQUEST data
PROMPT ===========================================================================
PROMPT
ACCEPT p_max_volume NUMBER DEFAULT '5000' PROMPT 'Enter the Maximum acceptable volume of FND_CONCURRENT_REQUEST data (5000): '
PROMPT
PROMPT
PROMPT
Prompt Concurrent Processing Analyzer is running...
PROMPT
DECLARE
l_debug_mode VARCHAR2(1) := 'Y';
p_min_volume NUMBER := '~p_min_volume';
p_max_volume NUMBER := '~p_max_volume';
TYPE section_rec IS RECORD(
name VARCHAR2(255),
result VARCHAR2(1), -- E,W,S
error_count NUMBER,
warn_count NUMBER,
success_count NUMBER,
print_count NUMBER);
TYPE rep_section_tbl IS TABLE OF section_rec INDEX BY BINARY_INTEGER;
TYPE hash_tbl_2k IS TABLE OF VARCHAR2(2000) INDEX BY VARCHAR2(255);
TYPE hash_tbl_4k IS TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(255);
TYPE hash_tbl_8k IS TABLE OF VARCHAR2(8000) INDEX BY VARCHAR2(255);
TYPE col_list_tbl IS TABLE OF DBMS_SQL.VARCHAR2_TABLE;
TYPE varchar_tbl IS TABLE OF VARCHAR2(255);
TYPE results_hash IS TABLE OF NUMBER INDEX BY VARCHAR(1);
TYPE parameter_rec IS RECORD(
pname VARCHAR2(255),
pvalue VARCHAR2(2000));
TYPE parameter_hash IS TABLE OF parameter_rec;
TYPE signature_rec IS RECORD(
sig_sql VARCHAR2(32000),
title VARCHAR2(255),
fail_condition VARCHAR2(4000),
problem_descr VARCHAR2(32000),
solution VARCHAR2(4000),
success_msg VARCHAR2(4000),
print_condition VARCHAR2(8),
fail_type VARCHAR2(1),
print_sql_output VARCHAR2(2),
limit_rows VARCHAR2(1),
extra_info HASH_TBL_4K,
child_sigs VARCHAR_TBL := VARCHAR_TBL(),
include_in_xml VARCHAR2(1));
TYPE signature_tbl IS TABLE OF signature_rec INDEX BY VARCHAR2(255);
TYPE colsType IS TABLE OF VARCHAR(126) INDEX BY VARCHAR(126);
TYPE hyperlinkColType IS RECORD(
cols colsType
);
TYPE sourceToDestType IS TABLE OF hyperlinkColType INDEX BY VARCHAR2(126);
TYPE destToSourceType IS TABLE OF hyperlinkColType INDEX BY VARCHAR2(126);
TYPE resultType IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(32);
TYPE sig_record IS RECORD(
sig_id VARCHAR2(320),
sig_name VARCHAR2(320),
sig_result VARCHAR2(10)
);
TYPE signatures_tbl IS TABLE OF sig_record;
TYPE section_record IS RECORD(
name VARCHAR2(320),
title VARCHAR (320),
sigs signatures_tbl,
results results_hash
);
TYPE section_record_tbl IS TABLE OF section_record;
----------------------------------
-- Global Variables --
----------------------------------
g_sect_no NUMBER := 1;
g_log_file UTL_FILE.FILE_TYPE;
g_out_file UTL_FILE.FILE_TYPE;
g_is_concurrent BOOLEAN := (to_number(nvl(FND_GLOBAL.CONC_REQUEST_ID,0)) > 0);
g_debug_mode VARCHAR2(1);
g_max_output_rows NUMBER := 10;
g_family_result VARCHAR2(1);
g_errbuf VARCHAR2(1000);
g_retcode VARCHAR2(1);
g_section_id VARCHAR2(300);
g_query_start_time TIMESTAMP;
g_query_elapsed INTERVAL DAY(2) TO SECOND(3);
g_analyzer_start_time TIMESTAMP;
g_analyzer_elapsed INTERVAL DAY(2) TO SECOND(3);
g_signatures SIGNATURE_TBL;
g_sections REP_SECTION_TBL;
g_sql_tokens HASH_TBL_2K;
g_rep_info HASH_TBL_2K;
g_parameters parameter_hash := parameter_hash();
g_exec_summary HASH_TBL_2K;
g_item_id INTEGER := 0;
g_sig_id INTEGER := 0;
g_parent_sig_id VARCHAR2(320);
analyzer_title VARCHAR2(255);
g_mos_patch_url VARCHAR2(255) :=
'https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=';
g_mos_doc_url VARCHAR2(255) :=
'https://support.oracle.com/epmos/faces/DocumentDisplay?parent=ANALYZER&sourceId=1411723.1&id=';
g_hidden_xml XMLDOM.DOMDocument;
g_dx_summary_error VARCHAR2(4000);
g_preserve_trailing_blanks BOOLEAN := false;
g_sec_detail section_record_tbl := section_record_tbl();
g_level NUMBER := 1;
g_result resulttype;
g_cloud_flag BOOLEAN := FALSE;
g_sig_count NUMBER := 0;
g_hypercount NUMBER := 1;
g_dest_to_source destToSourceType;
g_source_to_dest sourceToDestType;
g_results results_hash;
beginmin number;
beginmax number;
maxitems number;
cls_cnt number;
g_reqid_cnt number;
g_min_vol number;
g_max_vol number;
g_cp_status VARCHAR2(15);
g_nodename VARCHAR2(30);
g_cp_start_date DATE;
g_logfile_name VARCHAR2(240);
g_last_update_date DATE;
g_apps_invalid_cnt number;
g_fnd_invalid_cnt number;
g_CU1 varchar2(15);
g_CU2 varchar2(15);
g_RUP4 varchar2(15);
g_RUP6 varchar2(15);
g_run_alone_cnt number;
g_run_alone_now_cnt number;
g_std_mgr VARCHAR2(30);
g_enabled VARCHAR2(1);
g_cache NUMBER(3);
----------------------------------------------------------------
-- Debug, log and output procedures --
----------------------------------------------------------------
PROCEDURE enable_debug IS
BEGIN
g_debug_mode := 'Y';
END enable_debug;
PROCEDURE disable_debug IS
BEGIN
g_debug_mode := 'N';
END disable_debug;
PROCEDURE print_log(p_msg IN VARCHAR2) is
BEGIN
-- print only when debug flag is 'Y'
IF g_debug_mode = 'Y' THEN
IF NOT g_is_concurrent THEN
utl_file.put_line(g_log_file, p_msg);
utl_file.fflush(g_log_file);
ELSE
fnd_file.put_line(FND_FILE.LOG, p_msg);
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line(substr('Error in print_log: '||sqlerrm,1,254));
raise;
END print_log;
PROCEDURE debug(p_msg VARCHAR2) is
l_time varchar2(25);
BEGIN
-- print only when debug flag is 'Y'
IF (g_debug_mode = 'Y') THEN
l_time := to_char(sysdate,'DD-MON-YY HH24:MI:SS');
IF NOT g_is_concurrent THEN
utl_file.put_line(g_log_file, l_time||'-'||p_msg);
ELSE
fnd_file.put_line(FND_FILE.LOG, l_time||'-'||p_msg);
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in debug');
raise;
END debug;
PROCEDURE print_out(p_msg IN VARCHAR2
,p_newline IN VARCHAR DEFAULT 'Y' ) is
BEGIN
IF NOT g_is_concurrent THEN
IF (p_newline = 'N') THEN
utl_file.put(g_out_file, p_msg);
ELSE
utl_file.put_line(g_out_file, p_msg);
END IF;
utl_file.fflush(g_out_file);
ELSE
IF (p_newline = 'N') THEN
fnd_file.put(FND_FILE.OUTPUT, p_msg);
ELSE
fnd_file.put_line(FND_FILE.OUTPUT, p_msg);
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_out');
raise;
END print_out;
PROCEDURE print_error
(p_msg VARCHAR2,
p_sig_id VARCHAR2 DEFAULT '',
p_section_id VARCHAR2 DEFAULT '')
IS
BEGIN
print_out('<div class="data sigcontainer signature E section print analysis" level="1" id="'||p_sig_id||'" style="display: none;">'||p_msg);
print_out('</div>');
-- ER #124 Show in unix session the error if parameter or additional validation failed.
IF NOT g_is_concurrent THEN
IF p_msg LIKE 'INVALID ARGUMENT:%' THEN
-- from Parameters validations if exist
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** ERROR ERROR ERROR ERROR ERROR ERROR ****');
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** The analyzer did not run to completion!');
dbms_output.put_line('**** '||p_msg);
dbms_output.put_line('**** Please rerun the analyzer with proper parameter value.');
ELSIF p_msg LIKE 'PROGRAM ERROR%' THEN
-- from calls in run_sig_sql and run_stored_sig which are seen in output only
null;
ELSE
-- from Additional Validation if exist
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** ERROR ERROR ERROR ERROR ERROR ERROR ****');
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** The analyzer did not run to completion!');
dbms_output.put_line('**** '||p_msg);
END IF;
END IF;
END print_error;
----------------------------------------------------------------
--- Time Management ---
----------------------------------------------------------------
PROCEDURE get_current_time (p_time IN OUT TIMESTAMP) IS
BEGIN
SELECT localtimestamp(3) INTO p_time
FROM dual;
END get_current_time;
FUNCTION stop_timer(p_start_time IN TIMESTAMP) RETURN INTERVAL DAY TO SECOND IS
l_elapsed INTERVAL DAY(2) TO SECOND(3);
BEGIN
SELECT localtimestamp - p_start_time INTO l_elapsed
FROM dual;
RETURN l_elapsed;
END stop_timer;
FUNCTION format_elapsed (p_elapsed IN INTERVAL DAY TO SECOND) RETURN VARCHAR2 IS
l_days VARCHAR2(3);
l_hours VARCHAR2(2);
l_minutes VARCHAR2(2);
l_seconds VARCHAR2(6);
l_fmt_elapsed VARCHAR2(80);
BEGIN
l_days := EXTRACT(DAY FROM p_elapsed);
IF to_number(l_days) > 0 THEN
l_fmt_elapsed := l_days||' days';
END IF;
l_hours := EXTRACT(HOUR FROM p_elapsed);
IF to_number(l_hours) > 0 THEN
IF length(l_fmt_elapsed) > 0 THEN
l_fmt_elapsed := l_fmt_elapsed||', ';
END IF;
l_fmt_elapsed := l_fmt_elapsed || l_hours||' Hrs';
END IF;
l_minutes := EXTRACT(MINUTE FROM p_elapsed);
IF to_number(l_minutes) > 0 THEN
IF length(l_fmt_elapsed) > 0 THEN
l_fmt_elapsed := l_fmt_elapsed||', ';
END IF;
l_fmt_elapsed := l_fmt_elapsed || l_minutes||' Min';
END IF;
l_seconds := EXTRACT(SECOND FROM p_elapsed);
IF length(l_fmt_elapsed) > 0 THEN
l_fmt_elapsed := l_fmt_elapsed||', ';
END IF;
l_fmt_elapsed := l_fmt_elapsed || l_seconds||' Sec';
RETURN(l_fmt_elapsed);
END format_elapsed;
----------------------------------------------------------------
--- Set Cloud flag ---
----------------------------------------------------------------
PROCEDURE set_cloud_flag IS
l_response VARCHAR2(2000);
BEGIN
BEGIN
SELECT '1'
INTO l_response
FROM dual
WHERE EXISTS (
SELECT 1
FROM (SELECT db_domain AS domain FROM fnd_databases
UNION ALL
SELECT domain AS domain FROM fnd_nodes) domains
WHERE UPPER(domains.domain) LIKE '%ORACLECLOUD.%');
-- If a row is selected we are on the cloud
IF SQL%ROWCOUNT > 0 THEN
g_cloud_flag := TRUE;
RETURN;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
g_cloud_flag := FALSE;
WHEN OTHERS THEN
g_cloud_flag := FALSE;
dbms_output.put_line('Exception: '||sqlerrm||' in initialize_files');
END;
BEGIN
-- set transfertimeout to 15 seconds, we don’t want the analyzer waiting more than that
UTL_HTTP.set_transfer_timeout(15);
SELECT Utl_http.request('http://192.0.0.192/latest/meta-data')
INTO l_response
FROM dual;
-- Check if the response is indeed from an Oracle cloud 192.0.0.192 service
IF lower(l_response) LIKE '%local-hostname%' THEN
g_cloud_flag := TRUE;
RETURN;
END IF;
EXCEPTION
WHEN OTHERS THEN
-- we are NOT on the cloud
g_cloud_flag := FALSE;
RETURN;
END;
END set_cloud_flag;
----------------------------------------------------------------
--- File Management ---
----------------------------------------------------------------
PROCEDURE initialize_files is
l_date_char VARCHAR2(20);
l_log_file VARCHAR2(200);
l_out_file VARCHAR2(200);
l_file_location V$PARAMETER.VALUE%TYPE;
l_instance VARCHAR2(40);
l_host VARCHAR2(40);
NO_UTL_DIR EXCEPTION;
BEGIN
get_current_time(g_analyzer_start_time);
IF NOT g_is_concurrent THEN
SELECT to_char(sysdate,'YYYY-MM-DD_hh_mi') INTO l_date_char from dual;
SELECT instance_name, host_name
INTO l_instance, l_host
FROM v$instance;
l_log_file := 'CP_Analyzer_'||l_instance||'_'||l_date_char||'.log';
l_out_file := 'CP_Analyzer_'||l_instance||'_'||l_date_char||'.html';
SELECT decode(instr(value,','),0,value,
SUBSTR (value,1,instr(value,',') - 1))
INTO l_file_location
FROM v$parameter
WHERE name = 'utl_file_dir';
-- Set maximum line size to 10000 for encoding of base64 icon
IF l_file_location IS NULL THEN
RAISE NO_UTL_DIR;
ELSE
g_out_file := utl_file.fopen(l_file_location, l_out_file, 'w',32000);
IF g_debug_mode = 'Y' THEN
g_log_file := utl_file.fopen(l_file_location, l_log_file, 'w',10000);
END IF;
END IF;
dbms_output.put_line('Files are located on Host : '||l_host);
dbms_output.put_line('Output file : '||l_file_location||'/'||l_out_file);
IF g_debug_mode = 'Y' THEN
dbms_output.put_line('Log file : '||l_file_location||'/'||l_log_file);
END IF;
END IF;
EXCEPTION
WHEN NO_UTL_DIR THEN
dbms_output.put_line('Exception: Unable to identify a valid output '||
'directory for UTL_FILE in initialize_files');
raise;
WHEN OTHERS THEN
dbms_output.put_line('Exception: '||sqlerrm||' in initialize_files');
raise;
END initialize_files;
PROCEDURE close_files IS
BEGIN
debug('Entered close_files');
print_out('</BODY></HTML>');
IF NOT g_is_concurrent THEN
debug('Closing files');
IF g_debug_mode = 'Y' THEN
utl_file.fclose(g_log_file);
END IF;
utl_file.fclose(g_out_file);
END IF;
END close_files;
----------------------------------------------------------------
-- REPORTING PROCEDURES --
----------------------------------------------------------------
----------------------------------------------------------------
-- UTILITIES --
----------------------------------------------------------------
----------------------------------------------------------------
-- Replace invalid chars in the sig name (so we can use the --
-- the sig name as CSS class --
----------------------------------------------------------------
FUNCTION replace_chars(p_name VARCHAR2) RETURN VARCHAR2 IS
l_name VARCHAR2(512);
BEGIN
-- replace existing _ with double _ and spaces with _ (to avoid multi-word section and signature names)
-- replace also existing - with double - and . with _ (as Firefox does not accept . in the css class name)
l_name := REPLACE(p_name, '%', '_PERCENT_');
l_name := REPLACE(l_name, ':', '_COLON_');
l_name := REPLACE(l_name, '/', '_SLASH_');
l_name := REPLACE(l_name, '&', '_AMP_');
l_name := REPLACE(l_name, '<', '_LT_');
l_name := REPLACE(l_name, '>', '_GT_');
l_name := REPLACE(l_name, '(', '__');
l_name := REPLACE(l_name, ')', '__');
l_name := REPLACE(l_name, '_', '__');
l_name := REPLACE(l_name, '-', '--');
l_name := REPLACE(l_name, '.', '-');
l_name := REPLACE(l_name, ',', '----');
RETURN REPLACE(l_name, ' ', '_');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_page_header: '||sqlerrm);
return p_name;
END replace_chars;
----------------------------------------------------------------
--- Escape HTML characters (< , > ) ---
----------------------------------------------------------------
FUNCTION escape_html_chars(p_text VARCHAR2) RETURN VARCHAR2 IS
l_out_text VARCHAR2(32767);
BEGIN
l_out_text := REPLACE(REPLACE(p_text, '>', '>'), '<', '<');
RETURN l_out_text;
EXCEPTION
WHEN OTHERS THEN
print_log('Exception: '||sqlerrm||' in escape_html_chars');
END escape_html_chars;
----------------------------------------------------------------
-- Prints the Cloud image in the page header and --
-- also in the Execution Details pop-up page, --
-- if the domain like “%oraclecloud.internal%” --
----------------------------------------------------------------
PROCEDURE print_cloud_image IS
BEGIN
IF (g_cloud_flag = TRUE) THEN
print_out ('<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAepJREFUeNq01U9IVFEUx/FxHEFNNAPdCEGMKLQJpVwIokYzJYpiCNGqchEIQiBUIu0E/4DgQlwVBq2Cgv4oBQOC/6hAWrQIXAilhC5caCL+qcX4PfJb2HDHec9mLnx478277553z5x7XzAejwcyKRjIcMuKRCLJ7p3FA3SgHL/xDeN47zVAdjgcdv1+EQtoQylCKIB1vo0LOMAfBU7aXCkqwkecxxc0Ig9leIhd3MEHrGAGl/wE6NHgn1GvAfaxhhG0YhoxbKuP9b3qJUA+bum8TylIbDb4NVzXrJ5phq8wpoDOAPfwE5W6/uThP9zBfQU9h27N+C0KjwcYxgRKsIj+JG/vanHcRbOe21JxvLEisjJt4WRSA9qf9/I/S98qbF7p67QZPNKN3jQMbu0HHuv8KEC1Lp6ncQFP6VhlAbJ14cr5rHJ8khnHc3s65gS1/K3dcHTM9/C2rj6XdVy2AC90MYjihI5XbL9KoSZxf8MTnb+zAE9VmhXaGlq0cPymKEt72Gs0YQOjFuCv6vargljJLvlI0RkdB/AdN7GJdgsS0s111KLLSgu5x1IU8LHgfukFh7Ca6ntgbQ51KQa2NDb42U3/+V54ePOcE79o9t10tWg06mtlxWKxU81g7pQLzXOAUMZSlK52KMAAKSLBDAvj51YAAAAASUVORK5CYII=" class="smallimg" title="This is a Cloud instance">');
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_cloud_image: '||sqlerrm);
END print_cloud_image;
----------------------------------------------------------------
-- Prints HTML page header and auxiliary Javascript functions --
-- Notes: --
-- Looknfeel styles for the o/p must be changed here --
----------------------------------------------------------------
PROCEDURE print_page_header is
BEGIN
-- HTML header
print_out('
<HTML><HEAD>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta http-equiv="X-UA-Compatible" content="IE=edge">');
-- Page Title
print_out('<TITLE>CP Analyzer Report</TITLE>');
-- Styles
print_out('
<STYLE type="text/css">
* {
font-family: "Segoe UI";
color: #505050;
font-size: inherit;
}
a {
color: #3973ac;
border: none;
text-decoration: none;
}
img {
border: none;
}
a.hypersource {
color: blue;
text-decoration: underline;
}
a.nolink {
color: #505050;
text-decoration: none;
}
.successcount {
color: #76b418;
font-size: 20px;
font-weight: bold;
}
.warncount {
color: #fcce4b;
font-size: 20px;
font-weight: bold;
}
.errcount {
color: #e5001e;
font-size: 20px;
font-weight: bold;
}
.infocount {
color: #000000;
font-size: 20px;
font-weight: bold;
}
input[type=checkbox] {
cursor: pointer;
border: 0;
display:none;
}
.exportcheck {
margin-bottom: 0;
padding-bottom: 0;
}
.export2Txt {
padding-left: 2px;
}
.pageheader {
position: fixed;
top: 0;
width: 100%;
height: 75px;
background-color: #F5F5F5;
color: #505050;
margin: 0px;
border: 0;
padding: 0;
box-shadow: 10px 0px 5px #888888;
z-index: 1;
}
.header_s1 {
margin-top: 6px;
}
.header_img {
float: left;
margin-top: 8px;
margin-right: 8px;
}
.header_title {
display: inline;
font-weight: 600;
font-size: 20px;
}
.header_subtitle {
font-weight: 300;
font-size: 13px;
}
.menubox_subtitle {
font-weight: 300;
font-size: 13px;
}
.header_version {
height: 16px;
lenght: 32px;
opacity: 0.85;
}
td.hlt {
padding: inherit;
font-family: inherit;
font-size: inherit;
font-weight: bold;
color: #333333;
background-color: #FFE864;
text-indent: 0px;
}
.blacklink:link, .blacklink:visited, .blacklink:link:active, .blacklink:visited:active {
color: #505050;
}
.blacklink:hover{
color: #808080;
}
.error_small, .success_small, .warning_small {
vertical-align:middle;
display: inline-block;
width: 24px;
height: 24px;
}
.h1 {
font-size: 20px;
font-weight: bold;
}
.background {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAIElEQVQIW2P49evX27dvf4EBhMGAzIEwGNCUQFWRpREAFU9npcsNrzoAAAAASUVORK5CYII=");
}
.body {
top: 30px;
width: 100%;
padding: 0;
font-size: 14px;
}
.footerarea {
height: 35px;
bottom: 0;
position: fixed;
width: 100%;
background-color: #F5F5F5;
border-top: 1px solid #D9DFE3;
z-index:100;
}
.footer {
visibility: visible;
max-height: 29px;
min-height: 29px;
background-color: #F5F5F5;
color: #145c9e;
font-weight: normal;
font-size: 14px;
}
.separator {
border-left: 1px solid #D6DFE6;
margin-left: 10px;
margin-right: 10px;
height: 22px;
width: 0px;
vertical-align: middle;
display: inline-block;
}
body {
color: #505050;
margin: 0;
padding: 0;
background-color: #F5F5F5;
overflow-y: auto;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAIElEQVQIW2P49evX27dvf4EBhMGAzIEwGNCUQFWRpREAFU9npcsNrzoAAAAASUVORK5CYII=");
}
.header, .footer { padding: 0 1em;}
.icon {
border: none;
vertical-align:middle;
width: 32px;
height: 32px;
display: inline-block;
}
.table1 {
vertical-align: middle;
text-align: left;
padding: 3px;
margin: 1px;
min-width: 1200px;
font-size: small;
border-spacing: 1px;
border-collapse: collapse;
}
tr.tdata td{
border: 1px solid #f2f4f7;
}
.topmenu {
position: absolute;
right: 50px;
float: right;
bottom: 10;
font-size: 12px;
color: #505050;
font-weight: bold;
text-shadow: none;
background-color: #f7f8f9;
background-image: none;
}
.fullsection {
padding-right: 5px;
}
.menubutton {
border: 1px solid;
cursor: pointer;
style: inline;
float: left;
background-color: #fafafa;
background-image: none;
padding: 4px 15px 1px 10px;
height: 28px;
border-color: #d9dfe3;
filter: none;
border-left-color: rgba(217, 223, 227, 0.7);
border-right-color: rgba(217, 223, 227, 0.7);
text-shadow: none;
vertical-align: middle;
font-weight: 600;
font-size: 14px;
}
.menubutton:hover {
background-color: #EEEEEE;
}
.smallimg {
padding: 0px 2px 1px 0px;
vertical-align: middle;
height: 18px;
width: 18px;
opacity: 0.75;
}
.menubox {
border: 1px solid lightblue;
background-color: #FFFFFF;
style: inline;
width: 250px;
height: 290px;
float: left;
padding: 10px;
border-radius:2px;
border: 1px solid #E7E7E9;
}
.menuboxitem {
white-space: nowrap;
font-size: 18px;
cursor: pointer;
padding: 10px 0 10px 0;
}
.menuboxitem:hover {
background-color: #EEEEEE;
}
.menuboxitemt {
white-space: nowrap;
font-size: 18px;
padding: 10px 0 10px 0;
}
.mboxelem {
margin-left:8px;
text-align:left;
display:inline-block;
}
.mboxinner {
margin-left: 15px;
margin-top: 6px;
}
.mainmenu {
scroll-y: auto;
padding: 50px 100px 50px 100px;
}
.maindata {
display: none;
width: auto;
overflow: visible;
min-height: 600px;
height: 100%;
}
.leftcell {
width:200px;
vertical-align:top;
padding: 0;
}
.rightcell {
vertical-align:top;
padding: 0;
}
.floating-box {
display: inline-block;
width: 277px;
height: 120px;
margin: 5px;
padding: 10px;
border: 1px solid #E7E7E9;;
background-color: #FFFFFF;
text-align: center;
border-radius:2px;
font-size: 16px;
}
.floating-box:hover {
background-color: #bfdde5;
font-weight: 600;
}
.textbox {
text-align: center;
height: 60px;
width: 100%;
}
.counternumber {
padding: 5px;
vertical-align: top;
height: 100%;
display: inline;
vertical-align:middle;
}
.counterbox {
padding-top: 10px;
height: 30px;
font-size:20px;
font-weight:bold;
width: 100%;
border: none;
}
.popup {
width:100%;
height:100%;
display:none;
position:fixed;
top:0px;
left:0px;
background:rgba(0,0,0,0.75);
border: solid 1px #8794A3;
border-color: #c4ced7;
color: #333333;
}
.popup-inner {
max-width:700px;
width:90%;
padding:0;
position:absolute;
top:50%;
left:50%;
-webkit-transform:translate(-50%, -50%);
transform:translate(-50%, -50%);
box-shadow:0px 2px 6px rgba(0,0,0,1);
border-radius:3px;
background:#fff;
font-size: 14px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAIElEQVQIW2P49evX27dvf4EBhMGAzIEwGNCUQFWRpREAFU9npcsNrzoAAAAASUVORK5CYII=");
}
');
print_out('
.popup-title {
display: table-cell;
vertical-align: top;
top: 10px;
padding: 10px;
border-bottom: 1px solid lightblue;
background-color: #F5F5F5;
}
.close-button {
display: inline-block;
padding: 4px 7px 1px 7px;
margin-right:20px;
margin-bottom:20px;
float:right;
vertical-align: bottom;
min-height: 18px;
border: 1px solid #c4ced7;
border-radius: 2px;
background-color: #E4E8EA;
font-size: 12px;
color: #000000;
text-shadow: 0px 1px 0px #FFFFFF;
font-weight: bold;
}
.close-button:hover {
background-color: #FFFFFF;
}
.popup-paramname {
display: table-cell;
width: 33%;
text-align: left;
vertical-align: top;
padding: 10px 5px 5px 10px;
}
.popup-paramval {
display: table-cell;
width: 67%;
text-align: left;
vertical-align: top;
padding: 10px 10px 5px 5px;
}
.close-link {
padding: 0 12px 10px 10px;
text-align: right;
float: right;
font-color: blue;
}
.popup-value {
display: table-cell;
vertical-align: top;
top: 10px;
border-bottom: 1px solid lightblue;
background-color: #F5F5F5;
}
.sectionmenu {
border-top: 1px solid #E7E7E9;
border-radius: 5px 0 0 5px;
margin: 0 0 2px 7px;
left:0px;
width:200px;
z-index: 3;
}
.sectionbutton {
cursor: pointer;
background-color: #e7ecf0;
border-left: 1px solid #D6DFE6;
border-bottom: 1px solid #D6DFE6;
border:right: 2px solid white
font-weight: normal;
font-size: 14px;
border-top: 0;
border-right: 0;
border-radius: 5px 0 0 5px;
padding: 5px;
display: none;
margin-right: 0;
word-wrap: break-word;
}
.sigcontainer {
font-weight: normal;
font-size: 12px;
background-color: #FFFFFF;
border: 1px solid #D6DFE6;
border-radius: 3px;
padding: 5px;
margin: 5px 5px 5px 5px;
width: auto;
display: block;
z-index:2;
}
.containertitle {
font-weight: bold;
font-size: 25px;
text-align: center;
padding-bottom: 10px;
padding-top: 5px;
}
.searchbox {
width:100%;
font-size: 14px;
display:block;
padding-left: 5px;
}
.search{
display:block;
font-weight: normal;
font-size: 12px;
color: #333333;
border-radius: 2px;
background-color: #FCFDFE;
border: 1px solid #DFE4E7;
padding: 6px 5px 5px 5px;
height: 28px;
margin-top: 5px;
}
.expcoll {
display:block;
padding-left:5px;
padding-top:5px;
padding-bottom:5px;
margin-left:10px;
float:left;
font-size: 12px;
}
.sigtitle {
font-size: small;
}
.sigdetails {
font-size: 12px;
margin-bottom: 2px;
padding: 6px;
}
.signature {
border-style: 1px solid #EAEAEA;
padding: 6px;
font-size: 12px;
font-weight: normal;
}
.divtable {
overflow-x: hidden;
width: 100%;
z-index:3;
margin: 3px;
margin-right: 10px;
}
.results {
z-index:4;
margin: 5px;
}
.divitemtitle{
text-align: left;
font-size: 18px;
font-weight: 600;
color: #336699;
border-bottom-style: dotted;
border-bottom-width: 1px;
border-bottom-color: #336699;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.divitemtitlet{
font-size: 16px;
font-weight: 600;
color: #336699;
border-bottom-style: none;
}
.arrowright, .arrowdown {
display: inline-block;
cursor: context-menu;
font-size: 12px;
color: #336699;
padding: 2px 0px 10px 2px;
vertical-align: middle;
height: 18px;
width: 18px;
}
.divwarn {
color: #333333;
background-color: #FFEF95;
border: 0px solid #FDC400;
padding: 9px;
margin: 0px;
font-size: small;
min-width:1200px;
}
.divwarn1 {
font-size: small;
font-weight: bold;
color: #9B7500;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.solution {
font-weight: normal;
color: #0572ce;
font-size: small;
font-weight: bold
}
.detailsmall {
text-decoration:none;
font-size: xx-small;
cursor: pointer;
display: inline;
}
.divuar {
border: 1px none #00CC99;
font-size: small;
font-weight: normal;
background-color: #ffd6cc;
color: #333333;
padding: 9px;
margin: 3px;
min-width:1200px;
}
.divuar1 {
font-size: small;
font-weight: bold;
color: #CC0000;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.divok {
border: 1px none #00CC99;
font-size: small;
font-weight: normal;
background-color: #d9f2d9;
color: #333333;
padding: 9px;
margin: 3px;
min-width:1200px;
}
.divok1 {
font-size: small;
font-weight: bold;
color: #006600;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.anchor{
padding-top: 100px;
color: #505050;
}
.tabledata tr[visible=''false''],
.no-result{
display:none;
}
.exportAll {
display:inline;
}
.exportAllImg {
display:inline;
}
.tabledata tr[visible=''true'']{
display:table-row;
}
.counter{
padding:8px;
color:#ccc;
}
.tablesorter-default .header,
.tablesorter-default .tablesorter-header {
background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
background-position: center right;
background-repeat: no-repeat;
cursor: pointer;
white-space: normal;
padding: 4px 20px 4px 4px;
}
.tablesorter-default thead .headerSortUp,
.tablesorter-default thead .tablesorter-headerSortUp,
.tablesorter-default thead .tablesorter-headerAsc {
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
border-bottom: #CC6666 1px solid;
}
.tablesorter-default thead .headerSortDown,
.tablesorter-default thead .tablesorter-headerSortDown,
.tablesorter-default thead .tablesorter-headerDesc {
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
border-bottom: #CC6666 1px solid;
}
.tablesorter-default thead .sorter-false {
background-image: none;
cursor: default;
padding: 4px;
}
');
print_out('
.brokenlink {
display: inline-block;
height: 15px;
width: 10px;
background-image: url("data:image/false;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAABLSURBVChTY/wPBAxEACYoTRCgKrw3h+GTrCrDO+85DH+hQjBApol4AHaFGkoMzFAmDNDaaiUlnDqJNpHMmNlTzvCO0gCndqJgYAAAyhkXWDyo/t0AAAAASUVORK5CYII=");
}
');
print_out('
.siginfo_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXNJREFUeNqUU80uA1EYPXNHSliMaJPZ6EITi5LY8ARiUSuPYFOKjXTjISxYo30ADyCxaDyENGLVkJakSYsR/RlFnXvvVCYzpvRLzvzdc858Ofe7BraLCNQCkSXWiTnvW4W4JArEjZ885nuOEUfELuJJgSmLq+N6peem0XbSaFb3+XZG5ImO30CKL2DZa0gkEarYhMa0LWiSw0t93uvwXXiU40hxsOLkWPaq1y2kwSKRQ2I2xO0fLCmESnN3pFaowBJJEzDw/yJXaZCVGWQwaf1OO7yO9lCaakYapH7SDrQ/1EhrUiKyyWF/V3/oY7ALFXy4GLm05l6oCWs7oxt0XuW1JA2KaFQ/2VNkBuGtJFdpUJAhlokTNGp7/kEamkGjBqWhdhBiHk69RNe/W2+S49SvvPMAE8sb8i7bOYfbmsHz4wpM04DJ5oSp0+51gbcn4OH2C93WKbmbhKtHKnyc5WhvqQGTM8KtIu5kYN5xLvvJ3wIMAEduatirqrxIAAAAAElFTkSuQmCC");
}
');
print_out('
.export_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2QUVENDk5NjdGMjM2ODExODIyQURBRDlDNkZERTUzMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBOTRBQzQzMTQ3NjkxMUU0OTZEMEZDMjFEMDE4Q0VDRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBOTRBQzQzMDQ3NjkxMUU0OTZEMEZDMjFEMDE4Q0VDRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTM0ODVEQ0I0ODIwNjgxMTgyMkFCMTdDQzcxMzg3NzIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkFFRDQ5OTY3RjIzNjgxMTgyMkFEQUQ5QzZGREU1MzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6s1KKrAAAAf0lEQVR42mI07fb79+PvT0YGMgAXM8c/FpBmCRVpcvQzvLjzlImJgUIw8AYw7tix47+trS1Zmg8fPjwIvMCCTzJgey6G2AbPyaS5oNk8H4UmygXINteenIhCEx0GMBthTkZ3OkEDYDbCXIMtPHB6AZdtNEuJ74G0AJn63wAEGACAQStffMHfsAAAAABJRU5ErkJggg==");
}
');
print_out('
.export_txt_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADaGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjZBRUQ0OTk2N0YyMzY4MTE4MjJBREFEOUM2RkRFNTMzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE5NEFDNDMxNDc2OTExRTQ5NkQwRkMyMUQwMThDRUNGIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE5NEFDNDMwNDc2OTExRTQ5NkQwRkMyMUQwMThDRUNGIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzQ4NURDQjQ4MjA2ODExODIyQUIxN0NDNzEzODc3MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2QUVENDk5NjdGMjM2ODExODIyQURBRDlDNkZERTUzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqzUoqsAAABNSURBVDhPY7T3OPOfgQIANiBqohyUSxpYlv+IgQnKJhsMvAGMO3bs+G9rawvlkgYOHz48HMJg1IDBYADjnj17/v/58wfKJQ2wsbExAABtqBQh7LAlsQAAAABJRU5ErkJggg==");
}
');
print_out('
.sort_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALhJREFUeNpi/P//PwMMtO15wQikVgMxiA6pcpFASELkwXygOCNMjIkBFdQBcTAQBwFxPQMRgAnJ9AA0TXVAsSCiDAAq1AFSi6BOhwEQeyFQTpcYFywEYl4s8jxAvBifASzQQDHGF1BEhQG5YNQAaCzgA8BYOQukjLAlaSC4SIwLEoD4MxbxL0AcS9AAYHq4DKTigRg5Y4HY8SA5osIAqHA9kGpEEmoCiq0jKgyQNQGxLjSPwA0DCDAAMMM1IrHFpIQAAAAASUVORK5CYII=");
}
');
print_out('
.information_ico {
display: inline-block;
height: 32px;
width: 32px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdhJREFUeNrEl70vA3EYx69NK5VSFjpLu0lKLF0s0kXKZmEn5i5qtHmJhD+AmYENsTSWiq2RSzppY2660FKSDvV95Fuheud3516+yWe5l+f53u/tniewvX+oKWoILIA5MA0mwAjvPYNHcA9uwCV4UQkaUngmCfJgBUQNnhknabAOXsEJ2AUVs+BBk3sRsAPKYNUkeT9F+U6ZJiJWDSTAHb98QLMveXeDsZKqBmbALefZKUmsImObGhCX1yCuOa84YyeNDAyCMzCmuSeJfc5cvwxsgSnNfaWY64cBWXQ5i4ECPVhRrjsVXQObIKx5pzBzfhoY5iHjtZYltxjIWjxknJLkzMpRnLEZoOOAiUyQq9IvpULcAVZXv1MjkpARiPk4ArGgzbnvOOVADDR8HIGGGKj6aKAqBnQfDehioOCjgYIYuGIN57VaklsMNMGpjb+g6nUjSdHa7G5DKT7bHn59m8Xq1+9YSucDi+eAESqSZuShX0XkxY7Q+1VEojewBOouJq8zR8uoKpapmAc1F5LXGLvyV19QArMOT4fOmCXVzqjCPm/vn7ujzRhpox7R7G/4ztZsEhx9nzcFyXo65rt5xrLdHct2WWMpvdjTno/ymaee9vxCtT3/EGAAeihgXfXnZOsAAAAASUVORK5CYII=");
}
');
print_out('
.warn_ico {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA15JREFUeNqsV81qFEEQ7umZjbuLgqgg69/Bg+bgQb1kD3qQmFXEJxB8Ah9AxLN4SbyYTR5AyAsoimZzioLJQfAgmlwUwRVNIoG4ycrOTPt9szPLZDI/PZMtqMxmuru+r6q7aqqN3odbIkm63X+D35ZlHldKPFBKTUDP4FUVT8kxwzBcPLbx/A6dNwzx2LadX+XyAZElRhYBAI+7rmq6rnveNKWQUhJwoBQQGSjmCcdxOW9FSuOeZVkLhQjYtn0YBl/BWB1GSETkEUSANgRIL4HoTdjYjJsnE8CvAbiNhXWGMS+4v2WCa2FjjLZgc1yLACbewYKWaZoVer5foQ3ags03tJ1KgCwx8RnYSw2vO9AL0IvQv1nRoE3ajkZChsCPYMJzsJVQHeeaOKSfoB/xezprMm3SNjBeEGsPARy4lxivaO43PZ4M/T+ZFYUgEsAoE2sXAf/QjeXYc3q/FkrXDZ0oBGeCWMFWeASQ57M5wOnpVMx7RmFLlwQwZzwCYFJjkcmRatNh74tFwWTBOkdsieJ1nxUuh/eDvUeeL1JD41O6USAmsUFA3WB5zeH9Ruj/K76Go/BUxxAxPWz8ORXU9AzZipz8JHmiEwViEhuuq6omgaj3SR8wrSj0MVWVZ0BqEEg6+YWj0I+A0N58Le+LZAS8Fy6/40P0XisjiElsRMDYziDAqreeMPYW+i4lCs00AsQ2Ou8nPiMnRxM+QPT+bFzh0RHUiKN4fIUeio45jsOS/IUH8DXbqASZKQqeFQViEtvYWW7U0D61YxrIju/97xQPF32gqxlR+AY9GNNvnkDjYf1EVVplDxeR2TTwcEblzQhiEZPYXlPKTyNetiJROInFbTEEgd1jeKxFvG+AwLz0P48L7F7ZxYbkkhieXA51XvwQLRN8V1vut2Q/kA3lIl2wbquO098FgdMgsL6rJcOLPxi4jQkuU2TY0k87xyVGAL6nK/a34i6YujGHcl+e0yZtR29KMqZdmsPEBkMVORMFwe0g7Dx0c1o3Iz8SNZTLJZ7YItHgGq6lDdpKuiPKlMZxs38vNBuoWis01uv1vL1EQynC34/+pVR5Y5zDuVizyrWlUqmedC/0cDQ8YbqM+tfzhyB1XSmH1/NK5Hq+41/PW5j7iNfzkZHs6/l/AQYA4OEjjlxSJk0AAAAASUVORK5CYII=");
}
');
print_out('
.error_ico {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA8BJREFUeNq0V81rE0EUf7PpponWCnoRoSJa0VKoCtKDVuvFkxar9SJePNRDBS3mj1BEeip4MRdBq4cKgiKCIH6hIFoVRYVWCuIH4snSNEmT7Ph7u5O63c7sbmI68JL9mvf7vTfvvXkjvtEGMo0cyYXrFSRWlYkyDsl+h2gT3rRALH4niBxIHvIVD+4JEhfnSf5eyW8ihogiAOBtJZJXKkS7oc5KQCmjWh6wO6QSEKMyrvAvE0Rv8e1gE9FEGAEr5F2qmcS1AsmPUN6DaysFSBsvEj5w5QFXURNPwl2ahMCznfDCa8hd93GNBNoxcbpI8oQNZc3K6riDCSXxy/NA/iD0fIdXOmMRwIRuTHiPy3Vwv2tVvYM9xSRAaA0MmgCJnigCW/DhE0xIJb2JDRlJz4NJ6H4IEh0mAmkF3pxsGPQSEjYC+iljLSGAFMuW4HZ7MTiCn0YhhyAXIKUYWEXIechhyGWVIAskcLMWSq4vSkM83Ipo/8QBF1jzUaTi2eoN8pqJ3HJ16UcBcgRz7vvmMIkhv0WIMYls6YL1H1wPwC1ZXAhNwD0I1AVOqQHIfBxwnY6El64C9SLrLgGsb+UiY+vXfY+mODGJYwESJnAee4MPmoCFJe8G9moLF8Nc4Qx5fk65PUjijo+EERxzj+LvjC71LNcLlBFfqO2NRWKHbQ4qBhlQlgcB+ngFQ8BvmOKl5JZu+U5MUtsfRGdrIjyyjSR0Iwq8GoxI+xmOgRYrThoj+nXLUQ94dRlcbN5SRdxaEkEiLnh1v5Dm2DMO6dUs4yjVWiHZekfG+5YrXL8h1XTZEWkJYzOBnNMA8FpJOB6BHK/BtFMnONZ8IEadMBJgbBAQtyskw9LPCI6/MRWYfbWSYEzGtlCXR8DGMXjhUgR4Usl4CIkRnfUwWTI2x8AMLl6U9F54FQHuT1EtCdI0pYyFwvecsS21OZziTlaTXwdigEeR2O+/KXsekNj8Bkk1shwM3AvcxD593FrcgA5BIXvsMWQXJAOxI4oVkxhRljP4aX/qAYP7xDFY/zl4LkijikxJkuuXoyXzItpd5p/Q347/uWBPmIdpvfikME9yWcChNQ/w3iq4riue4g+qJBpBw/kHPgfX78PtZOi5AM5/iQ+7cPlrDtPK/wHOc/PQgQb/B3Ru12WVaTOahCc2crAgZWTRO+/FHqrx5HTj5vMqlnYze7fWs2GBj2ZQ0AmvPONOtuAq9QBkYGOpqK2QLYbLHWTTI8ztQL6fVG1bfafjGo7ns7iZAvC47bXzs3GO538FGABlYXzRnnOThQAAAABJRU5ErkJggg==");
}
');
print_out('
.success_ico {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZJREFUeNqsl8tLFVEcx2fOqHgjKoIyQwyiUqJFi8AbBCWmlhpFG0PoH6igVkW0iSCiZYuK1j0gSFpkDx+ZRYusv0A3QfQgiLCNWXln+nzHuXKdOzN3HO+Bn+c6c8738z2POQ/7/FCDFZf+/vu3+NsxpsGzrIuW53WSN3uet4rHJnjt2rY9a1vWJ8u2R8mvFVz3e11trVUp1VQqALgD2E0EW4wxlgKYxR/LDsp4MuJ5qym30yUoe9bY9lShUDjtOM7LTAaovA7Yc8TyiFh1xsSK+EZkiPBLUV6G0RjD3CTvD6ExE1XXxMDbaclXKubVjU4CPKHnLNVFo01aaHakMkDBAdyP0fqcWr7SJA1poTki7UQDcknBuzWOY7K0Oqk3pCntcE+YEvh6uuoJjo2pInwRhKa0YQyJVWaAyfKMmZtzqgt/S7QTN4o9AaNerCUG/Ennum3VGPOS9IboZi2ZIM7x+0pxTohVHArfAN/v7SrDXxOHAc+WPLtMfCyagHnLN4CTRsalpYpdL3hPCK60jdhUHAqYO8Q2jMeFKk66iSg468EWsjEiVzopfTZ90W1su1rw3gh4E9k40bzkqxBTbFw02eUG5ol3xJ8VwjcH8K1lyzdMsY12tZCB2UBsL/l+4ldG+EYybUTbI/cPGYBtIpbjAcRGgu14kqwzwcSrGPiGAN5acX2KaVHpmeBDjAnB+yLgWuXUgF2pVkgdJkLP7iDiVDAxHgNfSzZM7E45d1yjkwxjUfqwn7iXYOIxcSQCvobsBbEnDVlMsQ3T73PIgNKJOBPE8Qi4jmdPiXzab9Y3AFvnq2G33ECsiXAqge9bzqLhM2GrB66zOcSVSzTB8/pgSA4sd9USU2zDxvCNiTBdSDZxP2yC/+vIBomu5cLFEtNnB4vCKTaGpDr9pSYC+EOt+1nWbLFgnlncjnV0ZnOYTGFiELha/Ig4lhUO6z3M0SXHcsajh4nxhcGpT9iajwaRKanrYczR/b1lRzIc/eRFHw7dhEmZOUlT2mLA+hF5KtZQ0PqT8xQsVNGEtKQp7fBNyUSc4x9QsAvHcxXmROoxl5Y0pZ3qZuRPSttu1LVKF9QsvaE6qisNacXdEU3CjWbG1b0Q557rTklsfqE1VsTS7T9zF7p6Aey606rLhSQfdy9MdTumJfpcWoPr+SUgB4PreS50Pf8dXM/HKHvVv57XVJS3/gswABvS7PkJ4jDUAAAAAElFTkSuQmCC");
}
');
print_out('
.error_small {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRJREFUeNqcVstLFXEU/uY392ZlZdd7vXZ7mKhBaWjLNgX6J7QoaudGCSKCgjYSFj02QkEQlhEEtuwvSG6LNhLSLh9JaGXm28TMzHn0nXHGZsaZrnbgMO/vO7/vnN85o42hAnH2HdaxBVg3f8I+vQw7bcBO2LyfgGYUQVvYDq13F7T2fdD74jC0KIJfsKsmYL6cgXkiBR0pKBRDQ5Ku8TmJQFIJAJMwUQo1WAr9DI8DBQn4UfMXGF27ofQcwYscyHiz6GOknIVl74feVg79rv+58l8w4o6PMJ4xGr2SQhQC9wAq+O4B6NonGHfGYXZGElDri59hXj3EqPkytmpZflNDEbmaVsp2PSCRaP4Bq8Np6MoFl1w+p3+jt9DTMbjT9KfOIoALgjfFnHAVVhUStXughhLyliSUF8oXeXcvVprl5CSKXvCQd4IM2gS9iT7gU+O8rIQVp2ZgCeZxxaTWSrXkgrJ89U5I9N4FmvoHOJxcu8ZkM+lm3TyxhaA9tbFaWhl5bQxJFHi9K6VjUs5S2ouw2pRsolSwmMRS9NckqYsgaeJ5GLyHXhIE0LEEu1ExwZni6HIUzfNhkhjwsvDH3OGSizLFXakn4+t9A8lmwD2ZBFtJPRbYTpbrYTPdco7uQe5DRSbzd/x7ktDGkCyeRVXXuq0SU7AVO+LMUjSBBz7o3aBU9SG5YkkEk9izisnIzzqrDdhcFLireT6CpJE+7wfgHsBOaG9UCdTtBbItB1fxOATe4Eto1t3ZfpJ+epd3Ia18jgR7oW4IQX8W6t1kcBUVIfBXoWqJIqn0TgSrHKqPBP1Os1thsxtisytjs8v9bXbdbh5awpsoMD6AJ/TD9LNSPGx00iaso0jWMMkj6wOHS7oyAuO+tOvsf7RrL/IxejUSlxn9Qzjj1TWOuwcW9IOjnAkiVm6LJDLVpqk723SHBx4gEMtAv8ZVDo/DeETZ1GZGppSjRM4iMY8geYlV2Vlw6LMKqqfWhn6Df+hvo9vuJlqkS3n/4JF/FW85i88x2tFN/VWEfltukfAUI8wQWNfW+oyxA9o0fwx6KMc9kg/EYfwRYABD0jtDqxO2xwAAAABJRU5ErkJggg==");
}
');
print_out('
.warning_small {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAxVJREFUeNqclktvElEUxy+XGZgGqBQsLdpSibFd2LhRE2NcunLha4MfQvsBjAsXvl9RUxJNdKELbeNr4dKVpjFGbWO0JpJaG7AttbWAlLEwPMb/wdIM41yoPck/XO6Z+zuXO/ecg1QcO8BENpPM7NGKpdMFrbRLK5a9pVLFbrMxXZbsRUniWadDGnXI0rnNQe8rEcNmFYDA6rI2lFPzPR3trczjUpiiyEyWONN1xhCUaVqZLal5NjefZR63Ene1OI4h0JumARIzqTOLafVkMLDBRnDsuKlRkOT8L93ndUV7unwnjD7J+GXq++LTVFo9si0cYK0exYoVgSrQI+NkZ6CVuV1OW2zyx/FKRe8Oh/yHaz5eG8SnU9cJvr0vKIJ/IPDox8RjfI6ZnQjA+vs2sVRGPUSsugB05nAM9G7tYIpTFp3ERcD1lfEFqwecTokRg1jEXA2AF/qQztyDXQjsq+lYnkATVg8Sg1hgDlcDINLepVx+C51jA7uM3Zd37gh9gmIY03u4JHqYWGCGiM1x5U51tjeEJ6F7K+NuqHdlfB+aFQYBk9gcSbQb97hRgGvYccE8iTmNfKJFxCQ2R8K0tSjCF5uBbjUIfhtKWzmISWxeKlfsSHsRIIqd5hoEIN+glYOYxOYNFi9DN0xz09A309xN6LcIIkl2XqYiJst2s+8udr9gOvd+C8ZP6A40YJwEkxGbOxz2zHK+aF5Ugq6YJ3FFX0AjFkGuQnUQYoKd5ii5b3FnzQuGsNu4VfUVnEQCemCcICbY7zjV87mFrHmBZRIh6H5onyBI3S8mJrE5avgI7myCSq7BKuz/TTOWb2ISu1qu0SwiqOevqeS6/9ajcZw1W4/l1EK1NwT8nshqsaNOhGYxiHrO8oUiW68hcxkxiFXrbqt5gE404GtzPfscS7LsUn5dOx//Mkvw58T6p+GQhbv9R9v97rOT8QXd9E6atsyJqXl9o88dRTc7uNamP0wll0ovNX2qLbWSQklE99zQ9BP0HtfU9IV/WzT8bUFtqaY/MpQSFPf8vSxL57uC3pcixh8BBgBX2nwB4HBekwAAAABJRU5ErkJggg==");
}
');
print_out('
.success_small {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNJREFUeNqclstrE1EUxu/cmWTyzjRWK0pbce/CF4qCRRHqRutjUVcuXEtXIoIVilZdCeJj48KVqAWpSOtCdOGL4vMfUPFRbYttSNM0zWTefmdM4jhO0jYXPs5k5s7vzL3nnnMinRptY/XGXE7dbpnOgGVYW2AV27ZFxgRHlASDc6EghsQPkiRcTGWiL+oxpHpgQ7PuaarZmVQiLJ4MMynEGRc5Y44jWJYdNk2nVVfN7vl8uVvXrO8hWTyazkRf+1ncfyOfVQcXCvqYHJU6165XWCoTYbhmosSZIOD7uQBnIovgHj2jOTR3YU4fy8+UrjVcwex0abhU1A+tWB1nkViILXXQKuWIJMxMFk84DmtvWRU7+N8K4P0KwdvaU8uCV0c4IjF6F4weYv3jgPa8VDT6Wtck3L1uYnyFTuLdcWIQi5g1Bwjo3WSLLGCZzcA/Q7ugy1AXGFPEAnPIdVDIqTtwWtbRPjYJ3w39rPz+Br0hFpgdxOY4bv1JRW4G/skHp3Ec6vkTeJkRmyOJtoajoWbge3zwY9BNSHCDDiaxOTK0JfQ3sDp0Grq6THgvdAsSqzeISWyJ0t/N0MpXTHzJu8FBAmVhzgVtC+ZMUIJVxhHothfuBhdMl+0DvKxeAHIe5mwQ3HNvP3SnXslxHWFYtmVXf4/gyzIeJ4MVJx8D4Pug+7TdQWBiEpujMuZNo+ZgE/QkwMlmLxzP98IM14O7uQUm2LMcJfetphreZ+Tkqc9J0QPvgnkIRRsdMx1MsN9xqufzec3/fKPfSQW+E2YUii12jolJbI5m8Qrldhx1vaET2G0wj6DE4vAylfBxYrunCM2id35Wc7SyGeTkGeBnYB9D6cXgxCAWMWvFjjpRLBG6np0sMk/Aq2MDNLgUOL1LDGJVu1stD5SVsb5YIvzg148CK5eMZRcmHV9O74IxQqzAlolOdDieki/kpktOQEwa7nl2asFB774BxoGGTV9pjfYLnI2i3A4VcvkOtx2i/9aafiWJaDswpxbQeDrcG9T0A1O8MrGTupJp2gNaTvX8bXHT36IExTl/n1DkS5j/vN7qfgswAFMPc0H/GzIVAAAAAElFTkSuQmCC");
}
</STYLE>');
-- JS and end of header
print_out('<script type="text/javascript">
/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */');
print_out('!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,o=/^-ms-/,p=/-([\\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);');
print_out('for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)');
print_out('if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\\\x20\\\\t\\\\r\\\\n\\\\f]",N="(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+",O=N.replace("w","w#"),P="\\\\["+M+"*("+N+")(?:"+M+"*([*^$|!\~]?=)"+M+"*(?:''((?:\\\\\\\\.|[^\\\\\\\\''])*)''|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\"|("+O+"))|)"+M+"*\\\\]",Q=":("+N+")(?:\\\\(((''((?:\\\\\\\\.|[^\\\\\\\\''])*)''|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|"+P+")*)|.*)\\\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+\~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\\\]''\\"]*?)"+M+"*\\\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\("+M+"*(even|odd|(([+-]|)(\\\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\\\d+)|))"+M+"*\\\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+\~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\("+M+"*((?:-\\\\d)?\\\\d*)"+M+"*\\\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\\d$/i,$=/^[^{]+\\{\\s*\\[native \\w/,_=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ab=/[+\~]/,bb=/''|\\\\/g,cb=new RegExp("\\\\\\\\([\\\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;');
print_out('if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\\\$&"):b.setAttribute("id",s),s="[id=''"+s+"''] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(\~b.sourceIndex||D)-(\~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(');
print_out('function(a){return a.innerHTML="<div class=''a''></div><div class=''a i''></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''''><option selected=''''></option></select>",a.querySelectorAll("[msallowclip^='''']").length&&q.push("[*^$]="+M+"*(?:''''|\\"\\")"),a.querySelectorAll("[selected]").length||q.push("\\\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");');
print_out('b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!\~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='''']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);');
print_out('while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"=''$1'']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"\~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"\~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];');
print_out('return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"\~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;');
print_out('return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||\~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();');
print_out('return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}');
print_out('function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;');
print_out('return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--)');
print_out('{if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href=''#''></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,v=/^.[^:#\\[\\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];');
print_out('return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);');
print_out('var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c)');
print_out('{return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:');
print_out('function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c)');
print_out('{return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");');
print_out('if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a)');
print_out('{return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);');
print_out('m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();');
print_out('if(b.innerHTML=" <link/><table></table><a href=''/a''>a</a><input type=''checkbox''/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type=''radio'' checked=''checked'' name=''t''/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\\.(.+)|)$/;function ab(){return!0}');
print_out('function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\\\.)"+p.join("\\\\.(?:.*\\\\.|)")+"(\\\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));');
print_out('i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\\\.)"+q.join("\\\\.(?:.*\\\\.|)")+"(\\\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);');
print_out('var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;');
print_out('return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;');
print_out('this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:');
print_out('function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};');
print_out('m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);');
print_out('return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\\d+="(?:null|\\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\\\s/>]","i"),hb=/^\\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,jb=/<([\\w:]+)/,kb=/<tbody/i,lb=/<|&#?\\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ob=/^$|\\/(?:java|ecma)script/i,pb=/^true\\/(.*)/,qb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,rb={option:[1,"<select multiple=''multiple''>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);');
print_out('e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}');
print_out('m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));');
print_out('h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,');
print_out('function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];');
print_out('return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};');
print_out('function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder=''0'' width=''0'' height=''0''/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();');
print_out('var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:');
print_out('function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href=''/a''>a</a><input type=''checkbox''/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\\([^)]*\\)/i,Nb=/opacity\\s*=\\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).');
print_out('toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;');
print_out('if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){');
print_out('return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")');
print_out('},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}');
print_out('function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function()');
print_out('{if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function()');
print_out('{m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=');
print_out('function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href=''/a''>a</a><input type=''checkbox''/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:');
print_out('function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:');
print_out('function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");');
print_out('return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\\t\\r\\n\\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))');
print_out('return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:');
print_out('function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\\?/,xc=/(,)|(\\[|{)|(}|])|"(?:[^"\\\\\\r\\n]|\\\\["\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\\/\\//,Gc=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));');
print_out('if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:');
print_out('function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};');
print_out('if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");');
print_out('function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;');
print_out('while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\\[\\]$/,Sc=/\\r?\\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,');
print_out('function(a){return{name:b.name,value:a.replace(Sc,"\\r\\n")}}):{name:b.name,value:c.replace(Sc,"\\r\\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});');
print_out('function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\\?(?=&|$)|\\?\\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];');
print_out('return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});');
print_out('var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");');
print_out('return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});');
print_out('</script>');
print_out('<script type="text/javascript">
/*!
* TableSorter 2.15.3 min - Client-side table sorting with ease!
* Copyright (c) 2007 Christian Bach
*/');
print_out('!function(g){g.extend({tablesorter:new function(){function d(){var a=arguments[0],b=1<arguments.length?Array.prototype.slice.call(arguments):a;if("undefined"!==typeof console&&"undefined"!==typeof console.log)console[/error/i.test(a)?"error":/warn/i.test(a)?"warn":"log"](b);else alert(b)}function u(a,b){d(a+" ("+((new Date).getTime()-b.getTime())+"ms)")}function m(a){for(var b in a)return!1;return!0}function p(a,b,c){if(!b)return"";var h=a.config,e=h.textExtraction,f="",f="simple"===e?h.supportsTextContent? b.textContent:g(b).text():"function"===typeof e?e(b,a,c):"object"===typeof e&&e.hasOwnProperty(c)?e[c](b,a,c):h.supportsTextContent?b.textContent:g(b).text();return g.trim(f)}function t(a){var b=a.config,c=b.$tbodies=b.$table.children("tbody:not(."+b.cssInfoBlock+")"),h,e,w,k,n,g,l,z="";if(0===c.length)return b.debug?d("Warning: *Empty table!* Not building a parser cache"):"";b.debug&&(l=new Date,d("Detecting parsers for each column"));c=c[0].rows;if(c[0])for(h=[],e=c[0].cells.length,w=0;w<e;w++){k= b.$headers.filter(":not([colspan])");k=k.add(b.$headers.filter(''[colspan="1"]'')).filter(''[data-column="''+w+''"]:last'');n=b.headers[w];g=f.getParserById(f.getData(k,n,"sorter"));b.empties[w]=f.getData(k,n,"empty")||b.emptyTo||(b.emptyToBottom?"bottom":"top");b.strings[w]=f.getData(k,n,"string")||b.stringTo||"max";if(!g)a:{k=a;n=c;g=-1;for(var m=w,y=void 0,x=f.parsers.length,r=!1,t="",y=!0;""===t&&y;)g++,n[g]?(r=n[g].cells[m],t=p(k,r,m),k.config.debug&&d("Checking if value was empty on row "+g+", column: "+ m+'': "''+t+''"'')):y=!1;for(;0<=--x;)if((y=f.parsers[x])&&"text"!==y.id&&y.is&&y.is(t,k,r)){g=y;break a}g=f.getParserById("text")}b.debug&&(z+="column:"+w+"; parser:"+g.id+"; string:"+b.strings[w]+"; empty: "+b.empties[w]+"\\n");h.push(g)}b.debug&&(d(z),u("Completed detecting parsers",l));');
print_out('b.parsers=h}function v(a){var b=a.tBodies,c=a.config,h,e,w=c.parsers,k,n,q,l,z,m,y,x=[];c.cache={};if(!w)return c.debug?d("Warning: *Empty table!* Not building a cache"):"";c.debug&&(y=new Date);c.showProcessing&&f.isProcessing(a, !0);for(l=0;l<b.length;l++)if(c.cache[l]={row:[],normalized:[]},!g(b[l]).hasClass(c.cssInfoBlock)){h=b[l]&&b[l].rows.length||0;e=b[l].rows[0]&&b[l].rows[0].cells.length||0;for(n=0;n<h;++n)if(z=g(b[l].rows[n]),m=[],z.hasClass(c.cssChildRow))c.cache[l].row[c.cache[l].row.length-1]=c.cache[l].row[c.cache[l].row.length-1].add(z);else{c.cache[l].row.push(z);for(q=0;q<e;++q)k=p(a,z[0].cells[q],q),k=w[q].format(k,a,z[0].cells[q],q),m.push(k),"numeric"===(w[q].type||"").toLowerCase()&&(x[q]=Math.max(Math.abs(k)|| 0,x[q]||0));m.push(c.cache[l].normalized.length);c.cache[l].normalized.push(m)}c.cache[l].colMax=x}c.showProcessing&&f.isProcessing(a);c.debug&&u("Building cache for "+h+" rows",y)}function A(a,b){var c=a.config,h=c.widgetOptions,e=a.tBodies,w=[],k=c.cache,d,q,l,z,p,y,x,r,t,s,v;');
print_out('if(m(k))return c.appender?c.appender(a,w):"";c.debug&&(v=new Date);for(r=0;r<e.length;r++)if(d=g(e[r]),d.length&&!d.hasClass(c.cssInfoBlock)){p=f.processTbody(a,d,!0);d=k[r].row;q=k[r].normalized;z=(l=q.length)?q[0].length- 1:0;for(y=0;y<l;y++)if(s=q[y][z],w.push(d[s]),!c.appender||c.pager&&!(c.pager.removeRows&&h.pager_removeRows||c.pager.ajax))for(t=d[s].length,x=0;x<t;x++)p.append(d[s][x]);f.processTbody(a,p,!1)}c.appender&&c.appender(a,w);c.debug&&u("Rebuilt table",v);b||c.appender||f.applyWidget(a);g(a).trigger("sortEnd",a);g(a).trigger("updateComplete",a)}function D(a){var b=[],c={},h=0,e=g(a).find("thead:eq(0), tfoot").children("tr"),f,d,n,q,l,m,u,p,s,r;for(f=0;f<e.length;f++)for(l=e[f].cells,d=0;d<l.length;d++){q= l[d];m=q.parentNode.rowIndex;u=m+"-"+q.cellIndex;p=q.rowSpan||1;s=q.colSpan||1;"undefined"===typeof b[m]&&(b[m]=[]);for(n=0;n<b[m].length+1;n++)if("undefined"===typeof b[m][n]){r=n;break}c[u]=r;h=Math.max(r,h);g(q).attr({"data-column":r});for(n=m;n<m+p;n++)for("undefined"===typeof b[n]&&(b[n]=[]),u=b[n],q=r;q<r+s;q++)u[q]="x"}a.config.columns=h+1;return c}function C(a){return/^d/i.test(a)||1===a}function E(a){var b=D(a),c,h,e,w,k,n,q,l=a.config;');
print_out('l.headerList=[];l.headerContent=[];l.debug&&(q=new Date); w=l.cssIcon?''<i class="''+(l.cssIcon===f.css.icon?f.css.icon:l.cssIcon+" "+f.css.icon)+''"></i>'':"";l.$headers=g(a).find(l.selectorHeaders).each(function(a){h=g(this);c=l.headers[a];l.headerContent[a]=g(this).html();k=l.headerTemplate.replace(/\\{content\\}/g,g(this).html()).replace(/\\{icon\\}/g,w);l.onRenderTemplate&&(e=l.onRenderTemplate.apply(h,[a,k]))&&"string"===typeof e&&(k=e);g(this).html(''<div class="''+f.css.headerIn+''">''+k+"</div>");l.onRenderHeader&&l.onRenderHeader.apply(h,[a]);this.column= b[this.parentNode.rowIndex+"-"+this.cellIndex];this.order=C(f.getData(h,c,"sortInitialOrder")||l.sortInitialOrder)?[1,0,2]:[0,1,2];this.count=-1;this.lockedOrder=!1;n=f.getData(h,c,"lockedOrder")||!1;"undefined"!==typeof n&&!1!==n&&(this.order=this.lockedOrder=C(n)?[1,1,1]:[0,0,0]);h.addClass(f.css.header+" "+l.cssHeader);l.headerList[a]=this;h.parent().addClass(f.css.headerRow+" "+l.cssHeaderRow).attr("role","row");l.tabIndex&&h.attr("tabindex",0)}).attr({scope:"col",role:"columnheader"});G(a);l.debug&& (u("Built headers:",q),d(l.$headers))}function B(a,b,c){var h=a.config;h.$table.find(h.selectorRemove).remove();t(a);v(a);H(h.$table,b,c)}');
print_out('function G(a){var b,c,h=a.config;h.$headers.each(function(e,d){c=g(d);b="false"===f.getData(d,h.headers[e],"sorter");d.sortDisabled=b;c[b?"addClass":"removeClass"]("sorter-false").attr("aria-disabled",""+b);a.id&&(b?c.removeAttr("aria-controls"):c.attr("aria-controls",a.id))})}function F(a){var b,c,h,e=a.config,d=e.sortList,k=f.css.sortNone+" "+e.cssNone,n=[f.css.sortAsc+ " "+e.cssAsc,f.css.sortDesc+" "+e.cssDesc],q=["ascending","descending"],l=g(a).find("tfoot tr").children().removeClass(n.join(" "));e.$headers.removeClass(n.join(" ")).addClass(k).attr("aria-sort","none");h=d.length;for(b=0;b<h;b++)if(2!==d[b][1]&&(a=e.$headers.not(".sorter-false").filter(''[data-column="''+d[b][0]+''"]''+(1===h?":last":"")),a.length))for(c=0;c<a.length;c++)a[c].sortDisabled||(a.eq(c).removeClass(k).addClass(n[d[b][1]]).attr("aria-sort",q[d[b][1]]),l.length&&l.filter(''[data-column="''+ d[b][0]+''"]'').eq(c).addClass(n[d[b][1]]));e.$headers.not(".sorter-false").each(function(){var a=g(this),b=this.order[(this.count+1)%(e.sortReset?3:2)],b=a.text()+": "+f.language[a.hasClass(f.css.sortAsc)?"sortAsc":a.hasClass(f.css.sortDesc)?"sortDesc":"sortNone"]+f.language[0===b?"nextAsc":1===b?"nextDesc":"nextNone"];a.attr("aria-label",b)})}function L(a){if(a.config.widthFixed&&0===g(a).find("colgroup").length){var b=g("<colgroup>"),c=g(a).width();g(a.tBodies[0]).find("tr:first").children("td:visible").each(function(){b.append(g("<col>").css("width", parseInt(g(this).width()/c*1E3,10)/10+"%"))});');
print_out('g(a).prepend(b)}}function M(a,b){var c,h,e,f=a.config,d=b||f.sortList;f.sortList=[];g.each(d,function(a,b){c=[parseInt(b[0],10),parseInt(b[1],10)];if(e=f.$headers[c[0]])f.sortList.push(c),h=g.inArray(c[1],e.order),e.count=0<=h?h:c[1]%(f.sortReset?3:2)})}function N(a,b){return a&&a[b]?a[b].type||"":""}function O(a,b,c){var h,e,d,k=a.config,n=!c[k.sortMultiSortKey],q=g(a);q.trigger("sortStart",a);b.count=c[k.sortResetKey]?2:(b.count+1)%(k.sortReset?3:2); k.sortRestart&&(e=b,k.$headers.each(function(){this===e||!n&&g(this).is("."+f.css.sortDesc+",."+f.css.sortAsc)||(this.count=-1)}));e=b.column;if(n){k.sortList=[];if(null!==k.sortForce)for(h=k.sortForce,c=0;c<h.length;c++)h[c][0]!==e&&k.sortList.push(h[c]);h=b.order[b.count];if(2>h&&(k.sortList.push([e,h]),1<b.colSpan))for(c=1;c<b.colSpan;c++)k.sortList.push([e+c,h])}else if(k.sortAppend&&1<k.sortList.length&&f.isValueInArray(k.sortAppend[0][0],k.sortList)&&k.sortList.pop(),f.isValueInArray(e,k.sortList))for(c= 0;c<k.sortList.length;c++)d=k.sortList[c],h=k.$headers[d[0]],d[0]===e&&(d[1]=h.order[b.count],2===d[1]&&(k.sortList.splice(c,1),h.count=-1));else if(h=b.order[b.count],2>h&&(k.sortList.push([e,h]),1<b.colSpan))for(c=1;c<b.colSpan;c++)k.sortList.push([e+c,h]);if(null!==k.sortAppend)for(h=k.sortAppend,c=0;c<h.length;c++)h[c][0]!==e&&k.sortList.push(h[c]);q.trigger("sortBegin",a);');
print_out('setTimeout(function(){F(a);I(a);A(a)},1)}function I(a){var b,c,h,e,d,k,g,q,l,p,s,t,x=0,r=a.config,v=r.textSorter||"",A=r.sortList, B=A.length,C=a.tBodies.length;if(!r.serverSideSorting&&!m(r.cache)){r.debug&&(l=new Date);for(c=0;c<C;c++)d=r.cache[c].colMax,q=(k=r.cache[c].normalized)&&k[0]?k[0].length-1:0,k.sort(function(c,k){for(b=0;b<B;b++){e=A[b][0];g=A[b][1];x=0===g;if(r.sortStable&&c[e]===k[e]&&1===B)break;(h=/n/i.test(N(r.parsers,e)))&&r.strings[e]?(h="boolean"===typeof r.string[r.strings[e]]?(x?1:-1)*(r.string[r.strings[e]]?-1:1):r.strings[e]?r.string[r.strings[e]]||0:0,p=r.numberSorter?r.numberSorter(s[e],t[e],x,d[e], a):f["sortNumeric"+(x?"Asc":"Desc")](c[e],k[e],h,d[e],e,a)):(s=x?c:k,t=x?k:c,p="function"===typeof v?v(s[e],t[e],x,e,a):"object"===typeof v&&v.hasOwnProperty(e)?v[e](s[e],t[e],x,e,a):f["sortNatural"+(x?"Asc":"Desc")](c[e],k[e],e,a,r));if(p)return p}return c[q]-k[q]});r.debug&&u("Sorting on "+A.toString()+" and dir "+g+" time",l)}}function J(a,b){var c=a[0].config;c.pager&&!c.pager.ajax&&a.trigger("updateComplete");"function"===typeof b&&b(a[0])}function H(a,b,c){!1===b||a[0].isProcessing?J(a,c):a.trigger("sorton", [a[0].config.sortList,function(){J(a,c)}])}function K(a){var b=a.config,c=b.$table;c.unbind("sortReset update updateRows updateCell updateAll addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter",function(c){c.stopPropagation();');
print_out('b.sortList=[];F(a);I(a);A(a)}).bind("updateAll.tablesorter",function(c,e,d){c.stopPropagation();f.refreshWidgets(a,!0,!0);f.restoreHeaders(a);E(a);f.bindEvents(a,b.$headers); K(a);B(a,e,d)}).bind("update.tablesorter updateRows.tablesorter",function(b,c,d){b.stopPropagation();G(a);B(a,c,d)}).bind("updateCell.tablesorter",function(h,e,d,f){h.stopPropagation();c.find(b.selectorRemove).remove();var n,q,l;n=c.find("tbody");h=n.index(g(e).parents("tbody").filter(":first"));var m=g(e).parents("tr").filter(":first");e=g(e)[0];n.length&&0<=h&&(q=n.eq(h).find("tr").index(m),l=e.cellIndex,n=b.cache[h].normalized[q].length-1,b.cache[h].row[a.config.cache[h].normalized[q][n]]=m,b.cache[h].normalized[q][l]= b.parsers[l].format(p(a,e,l),a,e,l),H(c,d,f))}).bind("addRows.tablesorter",function(h,e,d,f){h.stopPropagation();if(m(b.cache))G(a),B(a,d,f);else{var g,q=e.filter("tr").length,l=[],u=e[0].cells.length,v=c.find("tbody").index(e.parents("tbody").filter(":first"));b.parsers||t(a);for(h=0;h<q;h++){for(g=0;g<u;g++)l[g]=b.parsers[g].format(p(a,e[h].cells[g],g),a,e[h].cells[g],g);l.push(b.cache[v].row.length);b.cache[v].row.push([e[h]]);b.cache[v].normalized.push(l);l=[]}H(c,d,f)}}).bind("sorton.tablesorter", function(b,e,d,f){var g=a.config;b.stopPropagation();c.trigger("sortStart",this);M(a,e);F(a);g.delayInit&&m(g.cache)&&v(a);c.trigger("sortBegin",this);I(a);A(a,f);"function"===typeof d&&d(a)}).bind("appendCache.tablesorter",function(b,c,d){b.stopPropagation();A(a,d);"function"===typeof c&&c(a)}).bind("applyWidgetId.tablesorter",function(c,e){c.stopPropagation();f.getWidgetById(e).format(a,b,b.widgetOptions)}).bind("applyWidgets.tablesorter",function(b,c){b.stopPropagation();f.applyWidget(a,c)}).bind("refreshWidgets.tablesorter", ');
print_out('function(b,c,d){b.stopPropagation();f.refreshWidgets(a,c,d)}).bind("destroy.tablesorter",function(b,c,d){b.stopPropagation();f.destroy(a,c,d)})}var f=this;f.version="2.15.3";f.parsers=[];f.widgets=[];f.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,headers:{},ignoreCase:!0, sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,numberSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly",selectorHeaders:"> thead th, > thead td", selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]};f.css={table:"tablesorter",childRow:"tablesorter-childRow",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",info:"tablesorter-infoOnly",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"};f.language={sortAsc:"Ascending sort applied, ", sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"};f.log=d;f.benchmark=u;f.construct=function(a){return this.each(function(){var b=g.extend(!0,{},f.defaults,a);');
print_out('!this.hasInitialized&&f.buildTable&&"TABLE"!==this.tagName&&f.buildTable(this,b);f.setup(this,b)})};f.setup=function(a,b){if(!a||!a.tHead||0===a.tBodies.length||!0===a.hasInitialized)return b.debug? d("ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized"):"";var c="",h=g(a),e=g.metadata;a.hasInitialized=!1;a.isProcessing=!0;a.config=b;g.data(a,"tablesorter",b);b.debug&&g.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===g("<span>x</span>")[0].textContent;b.supportsDataObject=function(a){a[0]=parseInt(a[0],10);return 1<a[0]||1===a[0]&&4<=parseInt(a[1],10)}(g.fn.jquery.split("."));b.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0, "null":0,top:!0,bottom:!1};/tablesorter\\-/.test(h.attr("class"))||(c=""!==b.theme?" tablesorter-"+b.theme:"");b.$table=h.addClass(f.css.table+" "+b.tableClass+c).attr({role:"grid"});b.$tbodies=h.children("tbody:not(."+b.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"});b.$table.find("caption").length&&b.$table.attr("aria-labelledby","theCaption");b.widgetInit={};E(a);L(a);t(a);b.delayInit||v(a);f.bindEvents(a,b.$headers);K(a);b.supportsDataObject&&"undefined"!==typeof h.data().sortlist? b.sortList=h.data().sortlist:e&&h.metadata()&&h.metadata().sortlist&&(b.sortList=h.metadata().sortlist);');
print_out('f.applyWidget(a,!0);0<b.sortList.length?h.trigger("sorton",[b.sortList,{},!b.initWidgets]):(F(a),b.initWidgets&&f.applyWidget(a));b.showProcessing&&h.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter",function(b){f.isProcessing(a,"sortBegin"===b.type)});a.hasInitialized=!0;a.isProcessing=!1;b.debug&&f.benchmark("Overall initialization time",g.data(a, "startoveralltimer"));h.trigger("tablesorter-initialized",a);"function"===typeof b.initialized&&b.initialized(a)};f.isProcessing=function(a,b,c){a=g(a);var h=a[0].config;a=c||a.find("."+f.css.header);b?("undefined"!==typeof c&&0<h.sortList.length&&(a=a.filter(function(){return this.sortDisabled?!1:f.isValueInArray(parseFloat(g(this).attr("data-column")),h.sortList)})),a.addClass(f.css.processing+" "+h.cssProcessing)):a.removeClass(f.css.processing+" "+h.cssProcessing)};f.processTbody=function(a,b, c){a=g(a)[0];if(c)return a.isProcessing=!0,b.before(''<span class="tablesorter-savemyplace"/>''),c=g.fn.detach?b.detach():b.remove();c=g(a).find("span.tablesorter-savemyplace");b.insertAfter(c);c.remove();a.isProcessing=!1};f.clearTableBody=function(a){g(a)[0].config.$tbodies.empty()};f.bindEvents=function(a,b){a=g(a)[0];var c,h=a.config;b.find(h.selectorSort).add(b.filter(h.selectorSort)).unbind("mousedown.tablesorter mouseup.tablesorter sort.tablesorter keyup.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter sort.tablesorter keyup.tablesorter", function(e,d){var f;f=e.type;');
print_out('if(!(1!==(e.which||e.button)&&!/sort|keyup/.test(f)||"keyup"===f&&13!==e.which||"mouseup"===f&&!0!==d&&250<(new Date).getTime()-c)){if("mousedown"===f)return c=(new Date).getTime(),"INPUT"===e.target.tagName?"":!h.cancelSelection;h.delayInit&&m(h.cache)&&v(a);f=/TH|TD/.test(this.tagName)?this:g(this).parents("th, td")[0];f=h.$headers[b.index(f)];f.sortDisabled||O(a,f,e)}});h.cancelSelection&&b.attr("unselectable","on").bind("selectstart",!1).css({"user-select":"none", MozUserSelect:"none"})};f.restoreHeaders=function(a){var b=g(a)[0].config;b.$table.find(b.selectorHeaders).each(function(a){g(this).find("."+f.css.headerIn).length&&g(this).html(b.headerContent[a])})};f.destroy=function(a,b,c){a=g(a)[0];if(a.hasInitialized){f.refreshWidgets(a,!0,!0);var h=g(a),e=a.config,d=h.find("thead:first"),k=d.find("tr."+f.css.headerRow).removeClass(f.css.headerRow+" "+e.cssHeaderRow),n=h.find("tfoot:first > tr").children("th, td");d.find("tr").not(k).remove();h.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(".tablesorter ")); e.$headers.add(n).removeClass([f.css.header,e.cssHeader,e.cssAsc,e.cssDesc,f.css.sortAsc,f.css.sortDesc,f.css.sortNone].join(" ")).removeAttr("data-column");k.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter keypress.tablesorter");f.restoreHeaders(a);!1!==b&&h.removeClass(f.css.table+" "+e.tableClass+" tablesorter-"+e.theme);a.hasInitialized=!1;"function"===typeof c&&c(a)}};');
print_out('f.regex={chunk:/(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,hex:/^0x[0-9a-f]+$/i}; f.sortNatural=function(a,b){if(a===b)return 0;var c,h,e,d,g,n;h=f.regex;if(h.hex.test(b)){c=parseInt(a.match(h.hex),16);e=parseInt(b.match(h.hex),16);if(c<e)return-1;if(c>e)return 1}c=a.replace(h.chunk,"\\\\0$1\\\\0").replace(/\\\\0$/,"").replace(/^\\\\0/,"").split("\\\\0");h=b.replace(h.chunk,"\\\\0$1\\\\0").replace(/\\\\0$/,"").replace(/^\\\\0/,"").split("\\\\0");n=Math.max(c.length,h.length);for(g=0;g<n;g++){e=isNaN(c[g])?c[g]||0:parseFloat(c[g])||0;d=isNaN(h[g])?h[g]||0:parseFloat(h[g])||0;if(isNaN(e)!==isNaN(d))return isNaN(e)? 1:-1;typeof e!==typeof d&&(e+="",d+="");if(e<d)return-1;if(e>d)return 1}return 0};f.sortNaturalAsc=function(a,b,c,d,e){if(a===b)return 0;c=e.string[e.empties[c]||e.emptyTo];return""===a&&0!==c?"boolean"===typeof c?c?-1:1:-c||-1:""===b&&0!==c?"boolean"===typeof c?c?1:-1:c||1:f.sortNatural(a,b)};f.sortNaturalDesc=function(a,b,c,d,e){if(a===b)return 0;c=e.string[e.empties[c]||e.emptyTo];return""===a&&0!==c?"boolean"===typeof c?c?-1:1:c||1:""===b&&0!==c?"boolean"===typeof c?c?1:-1:-c||-1:f.sortNatural(b, a)};f.sortText=function(a,b){return a>b?1:a<b?-1:0};f.getTextValue=function(a,b,c){if(c){var d=a?a.length:0,e=c+b;for(c=0;c<d;c++)e+=a.charCodeAt(c);return b*e}return 0};f.sortNumericAsc=function(a,b,c,d,e,g){if(a===b)return 0;g=g.config;e=g.string[g.empties[e]||g.emptyTo];');
print_out('if(""===a&&0!==e)return"boolean"===typeof e?e?-1:1:-e||-1;if(""===b&&0!==e)return"boolean"===typeof e?e?1:-1:e||1;isNaN(a)&&(a=f.getTextValue(a,c,d));isNaN(b)&&(b=f.getTextValue(b,c,d));return a-b};f.sortNumericDesc=function(a, b,c,d,e,g){if(a===b)return 0;g=g.config;e=g.string[g.empties[e]||g.emptyTo];if(""===a&&0!==e)return"boolean"===typeof e?e?-1:1:e||1;if(""===b&&0!==e)return"boolean"===typeof e?e?1:-1:-e||-1;isNaN(a)&&(a=f.getTextValue(a,c,d));isNaN(b)&&(b=f.getTextValue(b,c,d));return b-a};f.sortNumeric=function(a,b){return a-b};f.characterEquivalents={a:"\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5",A:"\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5",c:"\\u00e7\\u0107\\u010d",C:"\\u00c7\\u0106\\u010c",e:"\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119", E:"\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118",i:"\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131",I:"\\u00cd\\u00cc\\u0130\\u00ce\\u00cf",o:"\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6",O:"\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6",ss:"\\u00df",SS:"\\u1e9e",u:"\\u00fa\\u00f9\\u00fb\\u00fc\\u016f",U:"\\u00da\\u00d9\\u00db\\u00dc\\u016e"};f.replaceAccents=function(a){var b,c="[",d=f.characterEquivalents;if(!f.characterRegex){f.characterRegexArray={};for(b in d)"string"===typeof b&&(c+=d[b],f.characterRegexArray[b]=RegExp("["+d[b]+"]","g"));f.characterRegex= RegExp(c+"]")}if(f.characterRegex.test(a))for(b in d)"string"===typeof b&&(a=a.replace(f.characterRegexArray[b],b));return a};f.isValueInArray=function(a,b){var c,d=b.length;for(c=0;c<d;c++)if(b[c][0]===a)return!0;return!1};f.addParser=function(a){var b,c=f.parsers.length,d=!0;for(b=0;b<c;b++)f.parsers[b].id.toLowerCase()===a.id.toLowerCase()&&(d=!1);d&&f.parsers.push(a)};f.getParserById=function(a){var b,c=f.parsers.length;for(b=0;b<c;b++)if(f.parsers[b].id.toLowerCase()===a.toString().toLowerCase())return f.parsers[b]; ');
print_out('return!1};f.addWidget=function(a){f.widgets.push(a)};f.getWidgetById=function(a){var b,c,d=f.widgets.length;for(b=0;b<d;b++)if((c=f.widgets[b])&&c.hasOwnProperty("id")&&c.id.toLowerCase()===a.toLowerCase())return c};f.applyWidget=function(a,b){a=g(a)[0];var c=a.config,d=c.widgetOptions,e=[],m,k,n;c.debug&&(m=new Date);c.widgets.length&&(c.widgets=g.grep(c.widgets,function(a,b){return g.inArray(a,c.widgets)===b}),g.each(c.widgets||[],function(a,b){(n=f.getWidgetById(b))&&n.id&&(n.priority||(n.priority= 10),e[a]=n)}),e.sort(function(a,b){return a.priority<b.priority?-1:a.priority===b.priority?0:1}),g.each(e,function(e,f){if(f){if(b||!c.widgetInit[f.id])f.hasOwnProperty("options")&&(d=a.config.widgetOptions=g.extend(!0,{},f.options,d)),f.hasOwnProperty("init")&&f.init(a,f,c,d),c.widgetInit[f.id]=!0;!b&&f.hasOwnProperty("format")&&f.format(a,c,d,!1)}}));c.debug&&(k=c.widgets.length,u("Completed "+(!0===b?"initializing ":"applying ")+k+" widget"+(1!==k?"s":""),m))};f.refreshWidgets=function(a,b,c){a= g(a)[0];var h,e=a.config,m=e.widgets,k=f.widgets,n=k.length;for(h=0;h<n;h++)k[h]&&k[h].id&&(b||0>g.inArray(k[h].id,m))&&(e.debug&&d(''Refeshing widgets: Removing "''+k[h].id+''"''),k[h].hasOwnProperty("remove")&&e.widgetInit[k[h].id]&&(k[h].remove(a,e,e.widgetOptions),e.widgetInit[k[h].id]=!1));!0!==c&&f.applyWidget(a,b)};f.getData=function(a,b,c){var d="";a=g(a);var e,f;if(!a.length)return"";e=g.metadata?a.metadata():!1;');
print_out('f=" "+(a.attr("class")||"");"undefined"!==typeof a.data(c)||"undefined"!==typeof a.data(c.toLowerCase())? d+=a.data(c)||a.data(c.toLowerCase()):e&&"undefined"!==typeof e[c]?d+=e[c]:b&&"undefined"!==typeof b[c]?d+=b[c]:" "!==f&&f.match(" "+c+"-")&&(d=f.match(RegExp("\\\\s"+c+"-([\\\\w-]+)"))[1]||"");return g.trim(d)};f.formatFloat=function(a,b){if("string"!==typeof a||""===a)return a;var c;a=(b&&b.config?!1!==b.config.usNumberFormat:"undefined"!==typeof b?b:1)?a.replace(/,/g,""):a.replace(/[\\s|\\.]/g,"").replace(/,/g,".");/^\\s*\\([.\\d]+\\)/.test(a)&&(a=a.replace(/^\\s*\\(([.\\d]+)\\)/,"-$1"));c=parseFloat(a);return isNaN(c)? g.trim(a):c};f.isDigit=function(a){return isNaN(a)?/^[\\-+(]?\\d+[)]?$/.test(a.toString().replace(/[,.''"\\s]/g,"")):!0}}});var p=g.tablesorter;g.fn.extend({tablesorter:p.construct});p.addParser({id:"text",is:function(){return!0},format:function(d,u){var m=u.config;d&&(d=g.trim(m.ignoreCase?d.toLocaleLowerCase():d),d=m.sortLocaleCompare?p.replaceAccents(d):d);return d},type:"text"});p.addParser({id:"digit",is:function(d){return p.isDigit(d)},format:function(d,u){var m=p.formatFloat((d||"").replace(/[^\\w,. \\-()]/g, ""),u);return d&&"number"===typeof m?m:d?g.trim(d&&u.config.ignoreCase?d.toLocaleLowerCase():d):d},type:"numeric"});p.addParser({id:"currency",is:function(d){return/^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/.test((d||"").replace(/[+\\-,. ]/g,""))},format:function(d,u){var m=p.formatFloat((d||"").replace(/[^\\w,. \\-()]/g,""),u);return d&&"number"===typeof m?m:d?g.trim(d&&u.config.ignoreCase?d.toLocaleLowerCase():d):d},type:"numeric"});p.addParser({id:"ipAddress", is:function(d){return/^\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}$/.test(d)},format:function(d,g){var m,s=d?d.split("."):"",t="",v=s.length;');
print_out('for(m=0;m<v;m++)t+=("00"+s[m]).slice(-3);return d?p.formatFloat(t,g):d},type:"numeric"});p.addParser({id:"url",is:function(d){return/^(https?|ftp|file):\\/\\//.test(d)},format:function(d){return d?g.trim(d.replace(/(https?|ftp|file):\\/\\//,"")):d},type:"text"});p.addParser({id:"isoDate",is:function(d){return/^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/.test(d)},format:function(d, g){return d?p.formatFloat(""!==d?(new Date(d.replace(/-/g,"/"))).getTime()||"":"",g):d},type:"numeric"});p.addParser({id:"percent",is:function(d){return/(\\d\\s*?%|%\\s*?\\d)/.test(d)&&15>d.length},format:function(d,g){return d?p.formatFloat(d.replace(/%/g,""),g):d},type:"numeric"});p.addParser({id:"usLongDate",is:function(d){return/^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i.test(d)||/^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i.test(d)},format:function(d,g){return d?p.formatFloat((new Date(d.replace(/(\\S)([AP]M)$/i, "$1 $2"))).getTime()||"",g):d},type:"numeric"});p.addParser({id:"shortDate",is:function(d){return/(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/.test((d||"").replace(/\\s+/g," ").replace(/[\\-.,]/g,"/"))},format:function(d,g,m,s){if(d){m=g.config;');
print_out('var t=m.$headers.filter("[data-column="+s+"]:last");s=t.length&&t[0].dateFormat||p.getData(t,m.headers[s],"dateFormat")||m.dateFormat;d=d.replace(/\\s+/g," ").replace(/[\\-.,]/g,"/");"mmddyyyy"===s?d=d.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, "$3/$1/$2"):"ddmmyyyy"===s?d=d.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/,"$3/$2/$1"):"yyyymmdd"===s&&(d=d.replace(/(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/,"$1/$2/$3"))}return d?p.formatFloat((new Date(d)).getTime()||"",g):d},type:"numeric"});p.addParser({id:"time",is:function(d){return/^(([0-2]?\\d:[0-5]\\d)|([0-1]?\\d:[0-5]\\d\\s?([AP]M)))$/i.test(d)},format:function(d,g){return d?p.formatFloat((new Date("2000/01/01 "+d.replace(/(\\S)([AP]M)$/i,"$1 $2"))).getTime()||"",g):d},type:"numeric"});p.addParser({id:"metadata", is:function(){return!1},format:function(d,p,m){d=p.config;d=d.parserMetadataName?d.parserMetadataName:"sortValue";return g(m).metadata()[d]},type:"numeric"});p.addWidget({id:"zebra",priority:90,format:function(d,u,m){var s,t,v,A,D,C,E=RegExp(u.cssChildRow,"i"),B=u.$tbodies;u.debug&&(D=new Date);for(d=0;d<B.length;d++)s=B.eq(d),C=s.children("tr").length,1<C&&(v=0,s=s.children("tr:visible").not(u.selectorRemove),s.each(function(){t=g(this);E.test(this.className)||v++;A=0===v%2;t.removeClass(m.zebra[A? 1:0]).addClass(m.zebra[A?0:1])}));u.debug&&p.benchmark("Applying Zebra widget",D)},remove:function(d,p,m){var s;p=p.$tbodies;var t=(m.zebra||["even","odd"]).join(" ");for(m=0;m<p.length;m++)s=g.tablesorter.processTbody(d,p.eq(m),!0),s.children().removeClass(t),g.tablesorter.processTbody(d,s,!1)}})}(jQuery);');
print_out('</script>');
print_out('
<script>
$(document).ready(function(){
var alertOn = true;
var filterString="";
var sectionTitle = {"E": "Error Signatures", "W": "Warning Signatures", "S": "Successful Signatures", "I": "Informational Signatures"};
var searchFlag=false;
$("#homeButton").click(function(){
$(".data").hide();
$(".maindata").hide();
$(".mainmenu").show();
$("#search").val("");
});
// Open pop-up window
$("[data-popup-open]").on("click", function() {
var targeted_popup_class = jQuery(this).attr("data-popup-open");
$("[data-popup]").hide();
$("[data-popup=''" + targeted_popup_class + "'']").fadeIn(350);
});
// Close pop-up window
$("[data-popup-close]").on("click", function() {
var targeted_popup_class = jQuery(this).attr("data-popup-close");
$("[data-popup=''" + targeted_popup_class + "'']").fadeOut(350, function(){
});
});
// Open section (by section name or by error type)
$("[open-section]").on("click", function() {
var sectionID = jQuery(this).attr("open-section");
var sectionName = jQuery(this).find("div.textbox").text();
if ((sectionName == null) || (sectionName == "")){
sectionName = sectionTitle[sectionID];
}
filterString = sectionID;
// if the section is empty, do nothing
if ($("." + sectionID).size() <= 0) {
return;
}
$(".mainmenu").hide();
$(".data").hide();
$(".section").show();
$(".signature").hide();
$("." + sectionID).show();
$("#search").val("");
$("#showhidesection").attr("mode", "show");
$("span.brokenlink").hide();
$("#export2TextLink").attr("onClick", "onclick=export2PaddedText(''" + sectionID + "'');return false;");
$(".containertitle").html(sectionName);
//CG There has to be a way to remove the IF below
if ((sectionID == ''error'') || (sectionID == ''success'') || (sectionID == ''information'') || (sectionID == ''warning'')) {
$(".sectionview").attr("open-sig-class", sectionID + "sig");
} else {
$(".sectionview").attr("open-sig-class", sectionID);
}
$("a[siglink]").removeAttr("href"); //remove links between signature records in section view
$("a[siglink]").removeClass("hypersource");
$("a[siglink]").addClass("nolink");
$("." + sectionID).first().click();
});
// Open signature
$("[open-sig]").on("click", function() {
var sigID = jQuery(this).attr("open-sig");
$(".signature").hide();
$(".sectionbutton").css("background-color", "#e7ecf0");
$(".export2Txt").hide();
$("#SignatureTitle").html("Signature: " + sigID);
$("." + sigID).show();
$(".sectionbutton[open-sig=''" + sigID + "'']").css("background-color","white");
var e = jQuery.Event("keypress");
e.keyCode = 13; // Enter
$("#search").focus();
$("#search").trigger(e);
});
// Print, Analysis and Full Section view - CG Need to clean this a bit. Too many classes.
$("[open-sig-class]").on("click", function(){
var sigClassID = jQuery(this).attr("open-sig-class");
// hide everything first
$(".mainmenu").hide();
$(".data").hide();
$("#search").val("");
if (sigClassID == "print"){
$(".containertitle").html("Print View");
$("#expandall").attr("mode", "print");
filterString="";
// show all divs that have the print class
$(".print").show();
$("a[siglink]").removeAttr("href"); //remove links between signature records in print view
$("a[siglink]").removeClass("hypersource");
$("a[siglink]").addClass("nolink");
$("span.brokenlink").hide();
} else if (sigClassID == "analysis") {
$(".containertitle").html("Analysis View");
$("#expandall").attr("mode", "analysis");
filterString="";
// show all divs that have the analysis class
$(".analysis").show();
// add links to the records that are interconnected (links are saved in a separate attribute named siglink)
$("a[siglink]").each(function(){
// if target anchor exists, create the link. Otherwise, display an exclamation mark
if ($("a#" + $(this).attr("siglink") + ".anchor").length > 0){
$(this).attr("href", "#" + $(this).attr("siglink"));
$(this).addClass("hypersource");
$(this).removeClass("nolink");
} else {
$(this).closest(''td'').find(''span.brokenlink'').show();
}
});
} else { // Entire Section view
if ($("#showhidesection").attr("mode") == "show") {
$(".fullsection").show();
$("." + sigClassID).show();
filterString = sigClassID;
$("#showhidesection").attr("mode", "hide");
$("#expandall").attr("mode", "print");
} else {
$(".section").show();
$(".signature").hide();
$("#showhidesection").attr("mode", "show");
$("[open-section=''"+sigClassID+"'']").click();
}
}
});
// Open table data (for a sig)
$("a[toggle-data]").on("click", function(){
var tabledataID = $(this).attr("toggle-data");
$("#"+tabledataID).toggle();
$(this).find(".arrowright").toggle();
if ($(this).find(".arrowdown").css("display") == "none"){
$(this).find(".arrowdown").show();
} else {
$(this).find(".arrowdown").hide();
};
var e = jQuery.Event("keypress");
e.keyCode = 13; // Enter
$("#search").trigger(e);
});
$("a[toggle-info]").on("click", function(){
var infoID = $(this).attr("toggle-info");
$("#"+infoID).toggle();
});
$("#exportAll").on("click", function(){
if ($(this).is(":checked")) {
$(".exportcheck").prop("checked", true);
} else {
$(".exportcheck").prop("checked", false);
}
});
$("#expandall").on("click", function(){
if (alertOn){
var returnVal = confirm ("This action could lead to performance issues and might even freeze your browser window. Do you want to continue?");
if (returnVal == false) return;
alertOn = false;
}
if (returnVal == false) return;
$(".tabledata").show();
if ($(this).attr("mode") == "print"){
$(".results").show();
}
$(".arrowright").hide();
$(".arrowdown").show();
var e = jQuery.Event("keypress");
e.keyCode = 13; // Enter
$("#search").trigger(e);
});
$(".collapseall").on("click", function(){
$(".tabledata").hide();
if ($("#expandall").attr("mode") == "print"){
$(".results").show();
} else {
$(".results").hide();
}
$(".arrowright").show();
$(".arrowdown").hide();
});
// Dynamic display based on the search string
$("#search").keypress (function(e) {
if (e.keyCode == 13){
var searchTerm = $("#search").val().toLowerCase();
console.log(filterString);
if ((searchTerm == null) || (searchTerm == "")) {
if (!searchFlag){
return;
} else {
searchFlag=false;
var rowList = document.getElementsByClassName(''tdata ''+filterString);
for (i = 0; i < rowList.length; i++){
if (rowList[i].style.display == "none"){
rowList[i].style.display = "table-row";
}
}
return;
}
}
var rowList = document.getElementsByClassName(''tdata ''+filterString);
for (i = 0; i < rowList.length; i++){
if (rowList[i].innerHTML.toLowerCase().indexOf(searchTerm) >= 0){
rowList[i].style.display="table-row";
} else
rowList[i].style.display="none";
}
}
searchFlag = true;
});
$(".sort_ico").on(''click'', function(){
var tableName = $(this).attr("table-name");
$("#restable_" + tableName).tablesorter();
$(this).hide();
});
});
function export2CSV(tbl) {
var records;
// if no particular table was provided as parameter, export all selected tables on the page
if ((tbl == "ALL") || (tbl == null) || (tbl == "")){
if ($(".exportcheck:checkbox:checked").length == 0) {
return;
} else {
$records = $(".exportcheck:checkbox:checked");
}
} else {
$records = $(".exportcheck:checkbox[rowid=''"+tbl+"'']");
}
var csv = ''"'';
$records.each(function(){
var $rows = $("tr." + $(this).attr("rowid"));
var level = $($("#" + $(this).attr("rowid"))).attr("level");
tmpColDelim = String.fromCharCode(11), // vertical tab character
tmpRowDelim = String.fromCharCode(0), // null character
colDelim = ''","'',
rowDelim = ''"\\r\\n"'';
//CG comment csv += rowDelim + $($("#" + $(this).attr("rowid")).find("div.sigdescription")).find("td").text() + rowDelim;
csv += $rows.map(function (i, row) {
var $row = $(row),
$cols = $row.find(''td,th'');
return $cols.map(function (j, col) {
var $col = $(col),
text = $col.text();
return text.replace(/"/g, ''""'').trim(); // escape double quotes, trim leading and trailing blacks to avoid Excel misreading them as ''ÃÂ ''
}).get().join(tmpColDelim);
}).get().join(tmpRowDelim)
.split(tmpRowDelim).join(rowDelim)
.split(tmpColDelim).join(colDelim) + rowDelim + rowDelim;
});
csv += ''"'';
// Data URI
csvData = ''data:text/csv;charset=utf-8,'' + encodeURIComponent(csv);
var downloadLink = document.createElement(''a'');
downloadLink.href = csvData;
downloadLink.download = ''Analyzer_export_data.csv'';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
function export2PaddedText(section) {
// export a full section - the section id is passed as parameter. If null, then return.
if ((section == null) || (section ==''''))
return;
var $records = $(''.signature.''+section);
//if no signatures in the section, nothing to do. Return.
if ($records.length < 0) return;
// define array for col max length
var maxlen = [];
// parse all rows once and gather the max length for each column in each table (first columns, second columns etc). Populate maxlen array.
var $rows = $(''tr.''+section);
$rows.each(function(){
// skip if this is a sig title row
if ($(this).hasClass(''sigtitle'')) return;
$currrow = $(this);
var counter = 0;
$currrow.find("td,th").each(function(){
if (($(this).text().length > maxlen[counter]) || (typeof maxlen[counter] == "undefined")) {
maxlen[counter] = $(this).text().length;
}
counter++;
});
});
colDelim = '' '',
rowDelim = ''\\r\\n'';
text = '''';
$rows.each(function(){
if ($(this).hasClass("sigtitle")) {
var title = $(this).find(''td'').text()
text += rowDelim + rowDelim + rowDelim + title + rowDelim + "_".repeat(title.length) + rowDelim + rowDelim;
return;
}
$cols = $(this).find(''td,th'');
text += $cols.map(function (j, col) {
var $col = $(col);
var text = $col.text() + " ".repeat(maxlen[j] - $col.text().length + 1);
return text;
}).get().join(colDelim);
text += rowDelim;
});
// Data URI
textData = ''data:text/csv;charset=utf-8,'' + encodeURIComponent(text);
var downloadLink = document.createElement(''a'');
downloadLink.href = textData;
downloadLink.download = ''Analyzer_export_data.txt'';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
</script>
');
print_out('</HEAD><BODY>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_page_header: '||sqlerrm);
raise;
END print_page_header;
----------------------------------------------------------------
-- Prints analyzer header (title and top menu) --
----------------------------------------------------------------
PROCEDURE print_rep_header(p_analyzer_title varchar2) is
BEGIN
-- page header
print_out('<!-- page header (always displayed) -->
<div class="pageheader">
<div class="header_s1">
');
-- Print logo image
print_out(' <div class="header_img">
');
print_out('<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAkCAYAAABrA8OcAAAABGdBTUEAALGPC/xhBQAACjFpQ0NQSUNDIHByb2ZpbGUAAEiJnZZ3VFPZFofPvTe9UJIQipTQa2hSAkgNvUiRLioxCRBKwJAAIjZEVHBEUZGmCDIo4ICjQ5GxIoqFAVGx6wQZRNRxcBQblklkrRnfvHnvzZvfH/d+a5+9z91n733WugCQ/IMFwkxYCYAMoVgU4efFiI2LZ2AHAQzwAANsAOBws7NCFvhGApkCfNiMbJkT+Be9ug4g+fsq0z+MwQD/n5S5WSIxAFCYjOfy+NlcGRfJOD1XnCW3T8mYtjRNzjBKziJZgjJWk3PyLFt89pllDznzMoQ8GctzzuJl8OTcJ+ONORK+jJFgGRfnCPi5Mr4mY4N0SYZAxm/ksRl8TjYAKJLcLuZzU2RsLWOSKDKCLeN5AOBIyV/w0i9YzM8Tyw/FzsxaLhIkp4gZJlxTho2TE4vhz89N54vFzDAON40j4jHYmRlZHOFyAGbP/FkUeW0ZsiI72Dg5ODBtLW2+KNR/Xfybkvd2ll6Ef+4ZRB/4w/ZXfpkNALCmZbXZ+odtaRUAXesBULv9h81gLwCKsr51Dn1xHrp8XlLE4ixnK6vc3FxLAZ9rKS/o7/qfDn9DX3zPUr7d7+VhePOTOJJ0MUNeN25meqZExMjO4nD5DOafh/gfB/51HhYR/CS+iC+URUTLpkwgTJa1W8gTiAWZQoZA+J+a+A/D/qTZuZaJ2vgR0JZYAqUhGkB+HgAoKhEgCXtkK9DvfQvGRwP5zYvRmZid+8+C/n1XuEz+yBYkf45jR0QyuBJRzuya/FoCNCAARUAD6kAb6AMTwAS2wBG4AA/gAwJBKIgEcWAx4IIUkAFEIBcUgLWgGJSCrWAnqAZ1oBE0gzZwGHSBY+A0OAcugctgBNwBUjAOnoAp8ArMQBCEhcgQFVKHdCBDyByyhViQG+QDBUMRUByUCCVDQkgCFUDroFKoHKqG6qFm6FvoKHQaugANQ7egUWgS+hV6ByMwCabBWrARbAWzYE84CI6EF8HJ8DI4Hy6Ct8CVcAN8EO6ET8OX4BFYCj+BpxGAEBE6ooswERbCRkKReCQJESGrkBKkAmlA2pAepB+5ikiRp8hbFAZFRTFQTJQLyh8VheKilqFWoTajqlEHUJ2oPtRV1ChqCvURTUZros3RzugAdCw6GZ2LLkZXoJvQHeiz6BH0OPoVBoOhY4wxjhh/TBwmFbMCsxmzG9OOOYUZxoxhprFYrDrWHOuKDcVysGJsMbYKexB7EnsFO459gyPidHC2OF9cPE6IK8RV4FpwJ3BXcBO4GbwS3hDvjA/F8/DL8WX4RnwPfgg/jp8hKBOMCa6ESEIqYS2hktBGOEu4S3hBJBL1iE7EcKKAuIZYSTxEPE8cJb4lUUhmJDYpgSQhbSHtJ50i3SK9IJPJRmQPcjxZTN5CbiafId8nv1GgKlgqBCjwFFYr1Ch0KlxReKaIVzRU9FRcrJivWKF4RHFI8akSXslIia3EUVqlVKN0VOmG0rQyVdlGOVQ5Q3mzcovyBeVHFCzFiOJD4VGKKPsoZyhjVISqT2VTudR11EbqWeo4DUMzpgXQUmmltG9og7QpFYqKnUq0Sp5KjcpxFSkdoRvRA+jp9DL6Yfp1+jtVLVVPVb7qJtU21Suqr9XmqHmo8dVK1NrVRtTeqTPUfdTT1Lepd6nf00BpmGmEa+Rq7NE4q/F0Dm2OyxzunJI5h+fc1oQ1zTQjNFdo7tMc0JzW0tby08rSqtI6o/VUm67toZ2qvUP7hPakDlXHTUegs0PnpM5jhgrDk5HOqGT0MaZ0NXX9dSW69bqDujN6xnpReoV67Xr39An6LP0k/R36vfpTBjoGIQYFBq0Gtw3xhizDFMNdhv2Gr42MjWKMNhh1GT0yVjMOMM43bjW+a0I2cTdZZtJgcs0UY8oyTTPdbXrZDDazN0sxqzEbMofNHcwF5rvNhy3QFk4WQosGixtMEtOTmcNsZY5a0i2DLQstuyyfWRlYxVtts+q3+mhtb51u3Wh9x4ZiE2hTaNNj86utmS3Xtsb22lzyXN+5q+d2z31uZ27Ht9tjd9Oeah9iv8G+1/6Dg6ODyKHNYdLRwDHRsdbxBovGCmNtZp13Qjt5Oa12Oub01tnBWex82PkXF6ZLmkuLy6N5xvP48xrnjbnquXJc612lbgy3RLe9blJ3XXeOe4P7Aw99D55Hk8eEp6lnqudBz2de1l4irw6v12xn9kr2KW/E28+7xHvQh+IT5VPtc99XzzfZt9V3ys/eb4XfKX+0f5D/Nv8bAVoB3IDmgKlAx8CVgX1BpKAFQdVBD4LNgkXBPSFwSGDI9pC78w3nC+d3hYLQgNDtoffCjMOWhX0fjgkPC', 'N');
print_out('68JfxhhE1EQ0b+AumDJgpYFryK9Issi70SZREmieqMVoxOim6Nfx3jHlMdIY61iV8ZeitOIE8R1x2Pjo+Ob4qcX+izcuXA8wT6hOOH6IuNFeYsuLNZYnL74+BLFJZwlRxLRiTGJLYnvOaGcBs700oCltUunuGzuLu4TngdvB2+S78ov508kuSaVJz1Kdk3enjyZ4p5SkfJUwBZUC56n+qfWpb5OC03bn/YpPSa9PQOXkZhxVEgRpgn7MrUz8zKHs8yzirOky5yX7Vw2JQoSNWVD2Yuyu8U02c/UgMREsl4ymuOWU5PzJjc690iecp4wb2C52fJNyyfyffO/XoFawV3RW6BbsLZgdKXnyvpV0Kqlq3pX668uWj2+xm/NgbWEtWlrfyi0LiwvfLkuZl1PkVbRmqKx9X7rW4sVikXFNza4bKjbiNoo2Di4ae6mqk0fS3glF0utSytK32/mbr74lc1XlV992pK0ZbDMoWzPVsxW4dbr29y3HShXLs8vH9sesr1zB2NHyY6XO5fsvFBhV1G3i7BLsktaGVzZXWVQtbXqfXVK9UiNV017rWbtptrXu3m7r+zx2NNWp1VXWvdur2DvzXq/+s4Go4aKfZh9OfseNkY39n/N+rq5SaOptOnDfuF+6YGIA33Njs3NLZotZa1wq6R18mDCwcvfeH/T3cZsq2+nt5ceAockhx5/m/jt9cNBh3uPsI60fWf4XW0HtaOkE+pc3jnVldIl7Y7rHj4aeLS3x6Wn43vL7/cf0z1Wc1zleNkJwomiE59O5p+cPpV16unp5NNjvUt675yJPXOtL7xv8GzQ2fPnfM+d6ffsP3ne9fyxC84Xjl5kXey65HCpc8B+oOMH+x86Bh0GO4cch7ovO13uGZ43fOKK+5XTV72vnrsWcO3SyPyR4etR12/eSLghvcm7+ehW+q3nt3Nuz9xZcxd9t+Se0r2K+5r3G340/bFd6iA9Puo9OvBgwYM7Y9yxJz9l//R+vOgh+WHFhM5E8yPbR8cmfScvP174ePxJ1pOZp8U/K/9c+8zk2Xe/ePwyMBU7Nf5c9PzTr5tfqL/Y/9LuZe902PT9VxmvZl6XvFF/c+At623/u5h3EzO577HvKz+Yfuj5GPTx7qeMT59+A/eE8/txAYbrAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgBw4LKi43hzQHAAAAFmlUWHRDb21tZW50AAAAAABBcHBsZU1hcmsKy0CeVQAAIABJREFUeNrtfHdYVNfW/rvPOTBDmWFmKIp0saPRxILGXlJMNCHRGBNNUWzRXDTGxJKiUWPUmKioEWwpdlRiIfaoCCioWBAVpQ0gdYBhmMa0s74/KNEYr/H+cu/vK1nPM88ps2efvdde9V37DPBvJl15Rcilc8lyAMi/eQt/09/02FReWsYazysrNKMP7o2bM3/GDHrzxRfOF+fkfvk3h/7vEPurO6yurEq6dOVyUK2utllNcZHzJ9NnQMIL8G3TBmm3brK/Wf5/g7i/qiONRvNkfn4+3cm900e0OQJsdruz0tsLACCAkHvr5l86cKqu+cv6urDkXzemdOz4w78rK3+8vopKHq890UMVdXv3bn+uD532L+HhnDlz7rsW/qrFcTgc6RaLBTzHAQzgGAcbAU91fQqp6ZeJ/wutIx3+BUylABG55a6J/uT2z/usfK4agl0EBxEixzVpDAEgEECAgzE43GVoP22aNPj9aXMZY0QlxYy18KNzn8z7Sr9hk0UQGAAeHBgYifU9sIaPyEMkESapM4ImTWEdp7x3mHmq0h7qDpo3AxH1TRgxaogj6wa1mBR5q/v0mfsYY/Y/bB/QAkQUjhvZLxyY+C65FeSDJwaOEUSRwMBAHIGBINpsYlr37p6nmvlUXfJWuXx0/dYXGbM+ml8UF2fR+PnWjElNW/VIPh4/wpiHkojI8/L0mbPKTp6wuNZUg4kiCABjIgAGIgbGiQAxEBhq/IP5nl8tPnW85G6nSo3GM/X8xcNLl', 'N');
print_out('y5N+/fEV+XlKXl5eXT58iU6deoU/ZJwmHbt2i1uXB9D+7dto6h33ukLAN98tew+Adv6/Q//mnDdzpp8vnu3Cp23DxlcXahW4MkgCKTnf/+pv1//cSKjREra5s3pWOt2d4koqbG/7BnTqZpxZBScyMg7kYEXyCDwDR+BDLxARieBDLwTmSUS0ng1pztDX6C4Ll1ldCyBPcSi8Jfmzdus9vShKmdnqhwzlqo+/cSDsm8/0L5iwQJmOPGrLO/d8VQS2poMri5kcOJJL/Bk5AUyCgKZeNY0LpOTExkEJ7oJUNXBg0Txez0qxo+nIqkLJXbsWPSn+XgtPSlRoSw3evmQwVlKtU4CGXmBTHzDnH93XiUIdDwktBQAVq5YUTRzxgd0J/s25RfkBfxbLBZjzMJx3B2JxKWNm5zyCcS1a99WHhoaqgKAd0eOCPh24fyg8ZMjdWazqSB+/8/yWbM+in3jrbHvvTXuXXos63jpUt+SBV/EtE+/DGPzZtD5+tWKLlKtgzHwjEEEA1dvpMAAiKzR6IhwmEyCl83q11ud43cmtLWfZcOmWMmkCZM5EuFEIgwSCazde9j1lVVF4HmOifVaCyaCGANPHIkms3vzkjIvlyOH6cXYdbXsuWF/KFj25KSng2/fGu9WXQkODKXbt5Hql0M1rHXbB9p7z5/vXjplSq3rD1tI6ixlZS0DyeKAmpNIOREOcJzQYEE5EANEUYSDY6jr1s0jd+lXgcO+WOjJE+DicIB3OByP4mHdlatOgr52R8bQl/t0N9WhTOlqq1V5lDl7e4uN9p4YAcTAABATwcBQanfgmV8OFSMkFL379y/Mvn0by5Z//eXmjZuK/nJrVVFRwQCgrKy8V1FRwbLfxwE/rlt7tX+njjTmhefp12NHyVvmTq4ATR43ji5fvBjy57UrkwGA/Vwq5QDiBY4TKT2diKjz44zXdOzEtTte3lTjLKHK6TOIiNxzp88gPRiluLoSEWU9IrbxKXvrLcpxllJacOgDSkHl9fywp52jbEBUA6TrFEY1TKAz3t5ERF8DAF2+8ttvUlK0twAx11kiFr07noho0mNZ8JMngrTjx1Olk0BJ7dqp/2nb7DvsqI+vKr1PP9I5S+hqUBBZ06/ufZznFaaeuy8+n/vJvH9PFlBSUvJ75vdJTkq8Hb877u7UkSOoHcdRWyeBPps+nUKaNyMFx1GPTp1o3NgxQY/FQHVRcnrfvpQNiPoDB4mIZABAObmPl2xETb1bIjjTDT8/qklJHps37X0yAXTe3Z3I5jj80OeXljIAsP0cT1lKFV1o1pzuX7ScxvkfOt8yiMoA0bRsOTmuXKaSTmFUIjjR9VkfEVVo/lE/7mwAQGqnp/LKBIGKP55FlJrat36ueY8nWJH1gpX8CMECAEtKsu6WwFMBx8hy/NhjWRuqqX5km7/MFUql0nr8qlovq6worj2Xcg4mYx0cjAOB4ATAZrOj/G4xRo0eha1bfoRfiwB06tTFDmyHRqNReHl56fLz86lly5YPF+C4Xf6Oi5fhaNeWrX75JdUnt+8YAIC1Cn2s8Xot/brsSuz3frLiYnLjuK2Vljpy1HtMQODUAIRtHcP8Ag1GCIyH3W4DJ/D42tdXZ7txs/Bmn77kra9heO554Jff5JC1bgUx6/aS7Kn/GNauqBTanr1Y5r79nkNmf1x95c03NvnlF0Y6rV+HK1cu9SAiJ8aYjXQ1SzN79wnhZR5QV2uX+/XsmQQALLjl46SI9b7/T5KYelHua3egxN0NvJe3v+VSeg5IdACMiVZzBtkctU35FmsIKTgmaA2GC0yhWvsfEyyVSgUi4u/eLSl1OOwEjhjjeEAkNAsOgd3JGRZLHZjAYdiI1/DGO+/i4rnzbSdOe78YAI6fOJEW3qNHYqtWrf6pCyi6mQkXToS8hT9GvzFGztq2+dfyZRfXnjZvTxtfUsbY7WwwQWAcAOYQAXKE7X/11c+tmdc/8zQZwRMDiSLAGCK8fFAS1gFteWfkOURq9ekn7F7BIiJ59gcfDBR/+BHE8+CeGXJz8MKFOjCGLps33b7W+Um0Vuej2mQdm9Jj4HQA1SgpMbnYrGBSKUK7djdi0+Z/Jch9rLy7KOsW/AEEW6yofOopEBDKfsukW3NNGXV9twRAD8AaGfkWgP+cYDX2x3FMz3jOjed5MI4DLzgjuENHzPhqKRw2M1546aWVnKvsi4DAAGttjW7s+aTkX69cu8a+XLjIjxP4NgAmPUoxeY4DgQPo/wmGc4ggEE8AA4hYvcIz', 'N');
print_out('BhCrjIiP/9ySeX3GhU6d3MM5njECHBwHncMBC8dRpsKDeUVFMT4wqF/T2H4+wC6/8DzfzGztKbeaYFGp0MzVJbBi9eo8zapvqezHHxXtxoxF+YIF4C9cQK/Y79S4eEYOTvAC4yFChCg6OPwHiGMNYsRxMAGAm6weWQGBeB6MRBARGGNgoggLA7Q+nvDmuX7/UaRVq603HJqqysRb2XfoesZ1Sjufejct7WJRuaZqUoM2qwC4XLt2Vbdnz24K9vAgF4B2bdtO7dq0bVQQzJ49G/ce74uNNm4sTHaT0a3AQMqPju4DAKTR/HmPcaMeqKWKisrLPBOzGMh6MZXyJ04hA0CpUimR2VjY2N6Wn1173c+fDLwT6ZQqEjdtJsq6/VArafx2FVUAopVxZAHIDFBdw/GWyoust+8UXh/yLJW6y+k8IDryCjRENOF6pyeoykNOqe++sxoAKPH048Ev98RYSX8ixrLFbiQNQFfcZUQORwURtSSijkT0RMNayYhI2XAcTkSu/1+Qd6VS2Wiy3vGWq770VHkt69EzPDA8vHtAbaXGdeuPW+fsXLe2qq3gZPrp25Xy2pJiMIcNIgCzwYBhL76Ad95+CwCwbNkyLFmyZPayZcuQkZFxn4H3evmlXwNfewUuhYXE6WqTiKgX8/YGlfw51JqFdQARdS6a9g8nP45nkrAOgFy2VGxAcIlxAO+cW4+c32VOIa3lfj/9cDavhR9MJjNKV62E6UBCLABQSQmrD2br5czy84EtubM+hOgmZ8ZXR8CwaBGMXyyEaeEi6D/5BB4z/vG1c9s2gR23/7TBOnoU2joJLDNiuASAp0tYhxq7yQyfurooupAay/oPbOr/zwVNBCIGERwY9+hgy9quzYliNxl8rRbkL1/mDEDBGMtkjGU0wEd6xpi24XiIMWZqnOd/nKqqqh64Fz3rQ13C9p20d/sOerVHD3oKoDAXV1q/ZDEN6NiRAIinj52gK+mX12feuK4kIveUlJQqH29v0mg0SX+Y0aSm0W1AvOkmJ0o5ZyKiyY9RBnE3HE0wq728qNpJQuUffEBE5JE97X0yAnTe1Y3I7tj/gIb/sF13zrsZ6RlHSX4BRESJAGBauLCpTXK3bnd1gpSqhg0nUucSEanI7ggihyOIiPzu7e/S+MjVFUollXp7k27vXhulXhRvcwIVuLpS5sBBRERnH8tiHT8WXDVuPGmcpXSmVdv8R7UvmPlBs/T+/ahaECg7JJTo+LEVjw1S56v/fTHWjYuXENZQl6q5liHPO5ukLLJa/d2lkuSvJkzAsRXfULPOT2D4lCnw8/WDGoDdYoXNQdT/xaH5Q16OcB/w7BC/07+eF3Jz08pj18fIVZ5eVKPTYcSIEQEPTOZuMUP0WrkycmKtsHUbCns/7WJp1jym9KUXY0QnKRjjwBjVa3CTvosgMEhsIu52fQri5Sskc5Igq1c4/CTOkxljupz3/wERaPzNfZaCtscxNmaUh7UgL/9m13DPJysrZGl+fv3q5s+PlX7++WRrQUEgrl4tqJ40CUZXF6hb+HzzdHDoLKoqZ8yz2R/m5l03b8q9oFajzZlE3BoXKTyVmgbx1VeKXQ4f8VOcPotbEknf4r59CBIJGHEQGcBBbCpTiQRwvACTww5TxCtASKACEME77Ginrwkue+VlImqcPerLQURgHKGcEyB9aZj2qalTbxSOfqND80tXmPrliA9zWod+6N6qLewkPjTD5JwFFHr7IHz1mtlM5rb8LxesmmotFColwrp3gzo7J2pj5ARF3JIlQ5WB/j29uveAVupKYrWWuXGM5VzLwOXTp9F1yEAYjbWoqKhcM3jIkAsdevZMWjh79tBFn8+3tWrVCrNnfgQiEYuWLoWPtzcG9B8oP3v2fsVl/n4EQE/nUzqXtA29xsfvB3JzYTx5GhA5cEwEQUQDaNy0EBwAMxjIyRnuffuxDE159IDExFzG2AYAMAgCSCKB1sUN4LnS+545ZhRRZTljXs1CTjz/XGen0vKriuxs3NodN+nkO+9ITZcuiJejPkALvRH8G6PQK3ZTHDZsBvNsRn9cnNaAMRZNF1LrLo55K1ZZdBfpsz5Ez18Obi2Z+0l/55KSXtzhBNjS0wEHqx88UX1iUV/5BAODgWcwPtUNXfoPiBWzclwNEiksbq5wNughHj0JwAGAQSRCPZpOMJAIt/Hj0GzAYBUA0OlTk4qPH4tlcfFgJeUwFZWA53g0SeXvS3cMCP5uXRWTuS2nfDVYSPBfI1g1l69A8dSTUKiUKNVoXriZmfl9zqV074rr15lDYChNTYEjLR0jvpjP5L4tUKfVQgIHtX7iCRb+7DO1KUdPtEzIuFYV6+urOXRgn/Mve/fIiwuKEPHmaCiUCtgtVvTr25eZzXV9+g8arF646IsH44Pvt4D16p1BRP7Xiu4KJbpayAUGT', 'N');
print_out('mTgQPVMaciRWQN7eQB2jkedxBl+PZ/mBiz/Ss0YI7pzB6xNG+h5PqTGzZWqXVwYgAd8OvNqRud69MDTR49dSxr5ur+1pFiwlZdBdDg4J3c36PS6BaLECV0HD7Izxorp5k2wDh0eUpz2hn3bVrAePTckPP/cCbFaJ146fQY9LXVii6VffVl3/Khn9oXzUKgLxZBPPwkuWLxULchkHNWjbCAicJwAI8/QvF9vjo/bpHYMHcXrnaUtK1zcRKloB8d4EBPBEeAgERx4EByottnx3OujGNbHwL5vL9jAQRuoqvJEypUM0Wqug6vNVm/dGqzj70aOAnKgxzvv2PHuuw8VqgdM/p+hczu2Bfo4SecwqfQ9Awhqq4W4qmp2fM5cKHgOoihCI3XHyBXLUJp9BwnfrUfHXj0h8/F0mxm7yXQofp+qtrhUnZWV5d6tX2/2+bQo1FRVos/QoWjWKhTfRq85C6A//iZQrRZMrmw6/k+iP2WxiIilJCcv0ZaUcCXJKR9n7I6HaK+D3skZwZMnMFmrUNiZAE4UAZHACQJatm4DI481S/YfzG0V3g11tcaZ3V8f0zbryuWxW+Z+ijqrGabKKgQGh5C2WsvKS0rPRP+09ci30WuWL5w/f3X3bt0/Hzp8mO7/smA1CtP/NKF6MEitqgbzVP12bbPurykpfiozt5Cr0FT4uRr0yP3ySzS3AXXkQJ3DDqdePSF9YSjobgkyDh5CWUEhlh2Kr1X16tWCZ8xYUVai2Tx3rtOVU2c8fLt0RugTnXFw5WrYjAZ0jYhAxJT30O+5Z1hezp3ZhUUl7y2c96lT5o3rLSpqdao7N2/VtOnQvgG3ZA/1+3/Tf1OLlZaWhvDwcDBPFchB4XdWLDtf8OMOdiK4JTQSKTp8/jlKeUB0OCAwHk4cwe4Q4eosAeN4SN3c4NInnMa9Nfqb1qGtP9ry9NPQaDSrjh0/Pv3nzd/T1bi9TOpwoCQpCX0GPwOHqxusdjvOnU3+aEnc7oKUpERavWw5wjqGobamEpW1Oko5k1jdpkN7do/VhLu7+1Iims0YA2MMoij+vYL/DUipVEKlUrXMyMjIv0+wwsPDceXKlajCzBuq1OVfvyzs3sXaWK2wurrD02ZDxa5d8BjzBkw8B7e2bWG/ehUCY9DZbHB1dUnz8fM/0rl3z5uuvLDHUVMdtXj026H7VnwTFfhkF0gkzsxhs4PjODCHAyazGePnfwqb0YSuA/qOTjl7tsvVM6foxJ44ps4MQ/fwHrh1K4vp9bWxv5/A66+/fhSAxWazEc/zf6/ofxPy8PCQeHh4VGdkZPzmCq9cvyS3WcT88jKN0lJSwJonn0fI+QtgImBzEGwcocpVgso3xsDWMgjmikqYklPg5HCgba8++vCPZsgBQFtdmZt94yaXvPmHoOojJ5jVUgdbq1D0fncsTkevhUFdAItCjp052SjTm6CtrMCPK5ajS5++uHDqDA7s3gleIqXTd7IM/kHBwQC0hXn5FNiyfrvW6NGjsWvXrr9X8X8IcRLeVWcxW5UWSx3jRB7ODgJHdgggOPMceDsHjgR4eCkgU8iLm4eF3X1pQ+zUt+P3svCPZsiLbt6ITTt7ln799XTL4qK7wZoLacyd7JAxgvZGJnyDAtFlwrsIGPEKvjl+AoVVVUg+fRwp++NxbOs2fDdvHvoMGYy2Xbpg7MRIg39QsLwoP08LoEmoANwnVLm59Xuv7Ha7n16vDxJFsTkArFy5EgBgMBj8jEZjEBHJAWD+/PkAgOzsbBARy8nJCSkrKwsBgEuXLt2PsNtsD4CyFotFnpKSEnT9+nU/ANDr9X51dXVBJpMpyGQyBZnNZj8AMJvNfmaz2c9iscj0en0IANy8eRP79u0DETGdTqcEAKPRGKLX64OsVmuQXq/3u7fW2li9MJvNLa5duxZCRKxxjI0vTzS2JSKXxjEaDIZgvV4fZDabQwBgxYoVjfdDDAZDcCMvfvrpp3uTMvnZs2eDdDqdHwCcPn0aJpNJMBgMIUajMaiurq6pWmAymYLr6uqC9Hp9kMFgCDKZTCFGo/GhyZ8giiJADgYmwsIL0CqVaCaRQGayApwIgeegV3hgwMiRGZynd9NOTbJaotS/ngk9PefzSUajCR2nTYReJDjAAxyBF3hYRTu693oavYYNR53FirvZd3D11CmIINhNengA0Fdp0SW8R2L009tOtg7ruBgAXhk48J9qQ2hoKEwmU3hMTEyq0WiE2WzWR0dHb4mKippBRO7R0dF3LBaLa2lpaeqSJUtOz5s3b16HDh241q1bi2q1OmbdunWTZDIZLBbLZIlEskGhUKCmpgYzZ87sFR0dfQ4Ai4mJYe3atcOAAQMoISHh7MGDBzsrFAocPnw4cO3atZcZY148zzfFebt37267c+fO80ajUXQ4HCusVutSo9H4npubWwwAHD', 'N');
print_out('p0aGNZWZns2LFjSTExMWvsdnvj4tYC8FAqlZg/fz48PT1BRM0WLlxYrNFoMH369A3dunWbvG3btgFvvvnmmwAmKZVKEJHkk08+SUhLS5sfHh6eHBsbm2+z2cDzPKZMmTJ51qxZGxITE6fExsauF0URJSUlqYmJidv69++/rlWrViwnJ4eio6PPpqend+7SpQuIqDNjLGPVqlUBDocjz2q1gogwZcqUzjExMRmrVq3K5zgOgiDAZrOB1e+OaAngj8tHN29m0dmziXQw4QDt3bOHDsRuoPOvRtC14JZ0NSBEvNC3H1lvZurulfIL59OqTnyzUtzYvRftCQyln/xCaMWAwXT4uxj6ccZM+kgmp6m8QEkrVhERUW52DqWcOEmRT3SmkXIl7Vz2NW39chF1Buij4cMJAMpLSiY+++STRd1bhqQAgEP7zwueRqPxCz8/Pxo5ciSNHTuWFAoFjR8//iwRtVcqlbpnnnmGBgwYQG5ubtSnT59kAAgODk709/enCRMm0MCBA8nHx4c4jpsEAGvWrPEbOnQoAaC9e/cmNz7nl19+0TVv3py+/PJLGj16NL3xxhvV06dPp4kTJ1JoaKg4cOBAcebMmZSdnT23ffv2uXK5PPerr76a4+LiQlOnTi1qsIJJbdu2JQCz4+PjCwHQ4MGDafLkyRQZGXlfyWfdunXTAwICqtu0aUNvvfUWeXl50cSJE898++23H3p7e9+XFrdo0YJOnjz5BQA4OTnRc889R5GRkY27REadOXMmHwANGjSIBg4cSAqFggBMBoD27dvXymQyWrp0KXXq1InGjRtHhYWFMhcXl2CpVEpvv/02vfbaa007TiZOnEhjx44liURCI0eOpAkTJtD48eMfjpBmZd2kS+mX6NdTJykh4Rfaf/AAbfvh+7vX9u1RU2mZttGEWjWa8NzsbMvJ4ycpfts2cd2AwbQrtC0dDGhFcUGhtKpNG4qbP59+2hR79+SGTUV1t3NINBgpKTGRdm39iQ5s3ECjBIHGCk4UM2UqHdu1i+I3xFLZ7dvivrh99MO69dRT6UGdpS7lROT9KB9uMpkWKBQK0mg0eQAwaNCgPAB5RDTFy8uLEhIS8gBgypQpRQBy7Xb7nObNm5O/v3+ThrVu3ZrGjBlDJ06cCH7yySdbcRxHzz//PKlUqqbqqqurK/n6+s5pWDx5586dRQByIlJFRUXRqVOnmha7Xbt2arlcrgaA4cOH5wG4CwBjxoxRu7m5iTt27Hh77969eQBoxIgRXxGRLCcnR37vvMLCwhYAoP379xcSkXPfvn3TXnrppaQVK1Z84OHhQfcouIenpycdPXp0QeM4x4wZMxsAduzYQZMmTTIlJSU5AFDPnj1nN2RvNHXqVMrKyiJnZ2fHnTt3JgNA7969VSqVihYtWkQAPIKDg0mpVHoQkcfkyZPpyJEj1BB6zFEoFFReXv7IIjfn7u5xw93dHV5KLwQFBiKsfVjimHfe9e884rVg5ttcyRirpaybsZpTv6YK1zOcXWEHY2ASuwgJOPCcCIF4WJmANqGhGW9PmOw/eGLkazUyN1w6cgQ39sVDSoDDboMzxyDabejarRuejXgFHQcOwZEDB1n60QQIFgsEBweJs7MrgLBHDdzhcIDjOOTk5KjS0tJmpKenK4ODgz0AZFosFvOdO3cU69atO7N//35/T09Pj0WLFpm1Wi0iIyObIIzIyEgkJSUhIiLCuGzZsu+kUik+++yzpSaTyZeIegKAIAiYNWuWtMHy1F67do0DUGs0GmV2ux1Wq/U3ZnIcGl+Q2bJli1KhUPgR0Yzt27fbjEaj+s033/xJFEUOAO7cuTNn6NChtVFRUfdtEfjhhx8kvXv3RkRERMDzzz9viYmJOXvw4MG+dXV1isY2Wq0WjDEdY7/BkKIookWLFs9fvnx59urVq7Fhw4YPHA5HHgA88cQTz//888+ztVot8vLyjn733Xdaq9Va0KZNm9hdu3Zh1apVsuHDhzfGX8xkMmHOnDkLVqxYseDAgQPQarXvA0BlZaWUiGA2mx9ZsRGcJdK+vMXswfM8eXh4kMJTWdU4YG1F+Xv5K9fMuTFhSiCv1cIqdUFtxw5wHvocPJ7sjJqSUgSIDlTU6mnIvIWGLm+/3RkArqRdOJd/JhFZ27bCUqWFRW9Ay/79wPwDYCguQvOuXXA1MxOFN27gcHQ0NBoNpGM4tHiyE7p162ZljJ0xl5bCxdf3nw7ezc0NgwYN8vDw8FgZGBiI4uJidwBDXVxcuHnz5ikFQejv5uYGX1/fIIPB8CERQRCE+wSB4zi88MILtmXLlj0TGRmJ3r17z23evPmcWbNmDQWQyhgDxz24bU0Uf9theS/W1giDeHl5BRGRbs+ePZ97eXnJgoKCitPT05v66tevH3r16gXGGB0+/NvW5m7dun2RkpIyLyEhQXz', 'N');
print_out('llVcwYMCAWSqVqrtMJjvQCBDX1tbWbx2759kWiwWxsbEDtm3bNkChUCAvL0+Rn5/PNViwAfHx8QNGjx6NadOmndq8eXObRnDc398fPM/Xw0EN/Wk0GnzzzTcztFot5HL5RhcXl/WN83ssaswyrFarU1ZWlkqtVusO7t1HpxZ/Sde7Pkma0NZU1rItFYa0o5SuPShxw0bavfl7Orpunbiid5+c/P0HiYhcb928deLIkaO0Y32MuHTwEFrRIoC+UnrTljfG0qEft6mzrmVS5d1iOnnsGO3Zs5diFi2iV+RyGsoL1Atoekc7+rNPH6kRZrN5gUKhIKPRmP+78lMfiURSe/z48WwA7wGguXPnuhUWFk718fEhLy+vu0SkLCsrUwUEBFBERISDiNoDIJlMpm/RogX5+PiQj4/PagDw8/MjPz+/laIo+i9evLh3ly5dyMfHJ6SmpiZoypQpTW6iwY2pZTJZkwX6/PPPdZ6enhQYGEhVVVVJABAXF6cGQBEREV8ZjUbZxYsX5fdmp3K5fJmrqys1zGWMt7e3GUB+QkLCBwqFgpYvX64ym82K27dv10okEjEtLe3DRlcYGRl533vuJ0+eVDfEWPfdv3XctkQaAAAFt0lEQVTrVrJCoaDDhw+vr6io8B81atTTvr6+9Nlnn+kAqEJCQgiAcPjw4doBAwbQxo0bAwGgvLx8gYeHB6nVavWfQt4bd38WFBRst9lsr+Xl5cGh18MpLwceVisY6t9f4RmDzMkJvLPkjKlFi9NePt41s6ZNi56e8Mu55JiNxqrCArgFB8FBDiYIAgSeg+gsBRPYr8NeH7E/r7h0TU5xMURGIBKhaOELm6sb/Nu2w3tvjVW8FBUFAIhatPiRqiGKotRut0Oj0Sh+95XNarWSRqMRXn311dP5+fm6uLg4w5IlS9pWVFRMfPnllzdGRERUV1dXo3379ti/f3/w6tWrr3Acp6utrR0GoMfPP/8csGbNmhkLFixYyhiL3bFjx4z3339/RmlpKaRS6dWPP/64ShRFz0ar1Uh1dXUwGo0AgOXLl7OPP/44CIA2KioqxtPT871GSwcApaWlcyZOnDjH2dkZGo3maW9v7/MAwPN8/ODBgz/OzMykd955ByEhIRg6dOiVF1988dibb76JlStXVhUUFGDLli2YMGGCPjw8/JuGmBOVlZXS30EnjRBG0/2zZ8+y9u3b95HL5bGRkZFTIiIipqjVagwaNOjaokWLugAINplM6Nu3r/+GDRuCjUZj1Z49e+YAmEpETjabDUTk8chaYXV1NVQqFcrKys5XV1f31Gq1qKyshF1TCe+kRISkX4LMYoPNIQKCM277eKP3z/uXMm/VXACoqap+/9bBhDVXFi+C3C5CG+CPVtPeQ3VqGvLj42CHM4Z8Ou9gl1EjdCWa6rdqtFro9VroDSaYavVQMobeT/fWykNDVI9V+SfChg0baNKkSXLGmP7e79asWaMdOnSo2KpVK8+cnJyqxMRE1TPPPLM8MDBw9s6dO/tmZWWdVSqV8PPzk7/22mv6uLi4KqPRiHHjxnkCwNq1awNlMlmBi4tLy1GjRuVv3rw55sKFC5OdnJxq165d69GIKW3atGmHl5dX7CuvvHKmwRpV1dTUYNKkSZ4N18EmkynfbDYHiaJYOG3aNOTk5FQdPXpU1egyJRIJRo4cOV0ul0cHBgaisLAQp0+flmVmZtbm5eXB1dW17+LFi68yxgw5OTmylJSU2vPnz6NPnz4YPny43MPDQw8AmzZtosDAwKXPPvvs3EY+FBYWVh05ckTl6em5dOTIkXPvDSGMRiO+//77mNTU1MlhYWG1UVFRHgCwfv36YLlcni+Xy0OGDRtWsGXLlvVKpXLyq6++ykRR7LF58+a0CRMmPMDzPySDwdBSrVZXXr2aQWeTkulQQgLFb99Op778kjL79qWy0DZU0r4D3e7ag0qWLE8EESssLJx2/fp1OvjjD7S5c1c6EdiajgSEUIyvP13YsUvcvnFD3tHoNWrD1WtJAFBZoTmWk51LGVev1iYnJeadT005AwAb4/bKD38XO2z5lPfos9dH9f2zgrVnzx5277GRdu/e3XRdUFBwX3CUnZ39QB9Hjhxpan/o0KEHXPDv0f5PP6130zt37rzv/vHjx5t+u2/fvj905fn5+Q918RUVFU3n8fHxf9juxIkT991PTExkALB3796m+8nJ9UjJ3bt32e/Gd19fx44du+9669atDzwzLi6u6fz06dPsj3j8T3c3VFVVjTYajTt1Oh1MRiNq9XrodDrYjWa4lZSgpakWTKvd59emXYZxQqSyRl0wo7j4LrQ1NRDulsD8w0+QVetgZ0C+3Y5phw/PlXYJW9rEtMwbnE/HMLGyUjMdYCnu7u7u2dnZg6u11a9VllW03fbxHJSqc/FWVBSmRUf//R9a/1t2N3Ac9z', 'N');
print_out('PHcYE8z3McX78t1cnJCXYXQm1AAORPdCD/Tp0rGGN1xa+NCDWZDatEkWC32eGw22AAQBwHOwAdzzFpl7D7gjufjmFiRUUFvLy8VzcIsicRFVZUaDZb6+qovLwcAoCq6uq/hep/Cf0XtNFmA3zXn6gAAAAASUVORK5CYII=" title="Click here to see other helpful Oracle Proactive Tools" alt="Proactive Services Banner">');
print_out(' </div>', 'Y');
-- page title
print_out(' <div class="header_title">EBS '||p_analyzer_title|| ' Analyzer Report <br>
<span class="header_subtitle">Compiled using version '||g_rep_info('File Version')||'/ Latest version:</span>
<a href="https://support.oracle.com/oip/faces/secure/km/DownloadAttachment.jspx?attachid=1411723.1:CP_ANALYZER">
<img class="header_version" src="https://blogs.oracle.com/ebs/resource/Proactive/cpa_latest_version.gif" title="Click here to download the latest version of Analyzer" alt="Latest Version Icon"></a>');
print_cloud_image;
print_out(' </div>
</div>');
-- top right menu
print_out('<div class="topmenu">
<div class="menubutton" id="homeButton" title="Open the analyzer''s main page">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZZJREFUeNrMls8uA1EYxTvaBZEgbLrmAfQNuiFio5SFxLKJnWAhFaJVUiEktk0aElai/m2IaBcaPAsrT0Dr9yWniTCYTlrpJL/c6Z3vO2d67p3JONVqNdDMoy3Q5CO0VXrxVLgyFHadp7/AEIdLaqa+GXi9E4Qchh39TCJWy3YSHJn4jigIB7AkDjEM6tqrRsc1Ig/iHXACY5DRXBp6MZlmHIYi9Pkx6IEriJo4sawrLovHzm8hJpNSvQZhCQyaGOIZhLNa8FVtDjMpw4hMPBsMwB30S2QDwX3GBf2DToZFqCq2J5l4WuQIPErcst6EXE1cx7zmsqqx2geMI38ZWNb3iictgWOYdbkRmzv6ZGI9ZUyiPxnElHm3GrbhFGZ+WSe7VlBtCrpMA5PxrwYJOId2Fe5q98Q9bOMJ1e6p1zTOMEnUDJKQ18OUUubXMFrHK8dqb9hd1rsmrTwmy062+OzW4OsVi4Hz72/TljKY04MZ0nnDDXJk/G7oIWusAcJvbuctuwYVH1qVegwufBi49jjN/mz5EGAAm494BUo6enYAAAAASUVORK5CYII=" class="smallimg">
Home</div>');
print_out('<div class="menubutton" id="execDetails" title="Show the analyzer''s execution details" data-popup-open="popup-1">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYBAMAAAASWSDLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACFQTFRFJSUlXI2z////XI2zXI2zXI2zIrW9XI2zbKDIhLvm8PT344Mw7gAAAAZ0Uk5TAAAAucPE2PdAKgAAAFJJREFUGNNjUEICDOHlcFDCULUKDpYTwVmWhZ2zLAs7B8TExoEwsXFwuaByJhxMR+WYI/xTzAACglCAhVNejsSpnA7jsJeXd84oLy+EcUAAyAEAU+SE9OHO8IMAAAAASUVORK5CYII=" class="smallimg">
Execution Details</div>');
print_out('<div class="menubutton" id="execParameters" title="Shows the analyzer''s execution parameters" data-popup-open="popup-2">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATVQTFRF////LYa/LYa/LYa/LYa/LYa/LYa/LYa/LIW/LYW/LYW/LYa/LIW/LIW/LIW+LIW+LIS9LIS9LIS9LIS9K4O8K4O8K4O8K4O8K4O8K4O8K4O8K4K7K4K7K4K7KoK7KoK7KoK7KoK6KoG6KoG6KoG5KYG5KYG5KYC5KYG5KYC5KYC5KYC4KYC4KYC4KYC4KH+3KH+3J321J321JnyzJnyzJnuzJnuzJXqyJHmwJHmwJHivJHmvJHmwJHivI3etI3euIXSqIXSrIXWrInWrInasI3atJHivJnuzJnyzJ321J361J362KH62KYC4KYC5KYG5KoG5KoG6K4K7K4O8LIS9LYa/MIrEMIrFMIvFMYzGMYzHMY3IMo3IM4/KNpPPNpPQNpTQN5XSN5bSOJbSOZfUOZjUOZjVtemDjwAAAEB0Uk5TAAIEBggOEBIXGx8hLDAxM11hYmRwcXR2d3l6jJCTlJaYoqiqsbO0tri8vcLExsfQ0+Lj6+zt7vP3+Pr6+vv9/dC+MVIAAAFxSURBVCjPbVLpPxtRFD1v3kgprVKJrWm66RaKkYwlliTP8p6GCbcqwgxpOf//n+BDJvjhfrvn3P0e4M6KxhTxnNU7nfojKJv3AFTJKgAvn+vhMy4KtHqzR9oRpRcj9zWNdwmlvL73lzy1lVCYuG5OPiIZJyRJJjHJow8AAB0IScYHu7sHMUlKoLu1/DDmtSxPDw9PL8s149BPm6tKQpnXAKDnhUnFS4kRy3ao8OrnjyGosE072t23ak/pcni9eXKyNYScY8tWTRH1DkmaDL78IeUzMoYkO3XUblLik5DHH1PipoaF7Z3GOV0WL1eb0coAso4XjZ3tBaB/cLLBdknhRSGfgSq12Zga7AcAeBuXlF8KANSc8HKjN64ux/wvpbG+vrEl+ce4nC6uF4Ukz5wx7uzhSd4dPj5i9B4AkHNXlHDNtsiWXQuFV78nurW+7TcD33trSTvq+UFz/3vvheMF//61ujD+VAy1Z1Uya8zsvXcLH9dhX50/y6MAAAAASUVORK5CYII=" class="smallimg">
Parameters</div>');
print_out('<div class="menubutton" id="feedback" title="Opens the Oracle Community feedback thread"><a href="https://community.oracle.com/thread/3093389" class="blacklink" target="new">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNQTFRFIXSq////IXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqInatI3iuJHmvK4O7K4O8LIW+LYbALofBLojCMYzGMo3INZHNNpPPN5XRN5bSOJfUOZjVUpq7wgAAAB90Uk5TAAABAgwODxkgJD5HUlpncn+WoKyyu7zD0Nbq7vf6/POduf8AAAChSURBVCjPddJpE4IgEAbgpdNu7LDDas1QO4n//+vKxIbN5f3EzAPLsgMIT2CFNkICCZoqKFD6QEkPPIk4YIg4UEYyAHxXynbdgPqgHybtBry01gi47P5Bvo8/Acy2Awqnvt15iUcEkt66bEsZczvOKCT18qHmPNzPIVvqepi6pdLAXl7shuTyIv2OBLNNwL4cFx1+JONWNZIISaLfEH3f5w2X1DnbEexn8QAAAABJRU5ErkJggg==" class="smallimg">Feedback</a></div>');
print_out('<div class="menubutton" id="analysisView" open-sig-class="analysis" title="Displays all data in a single page, without the Errors/Warnings/Passed Checks/Information messages - Click Plus (+) icon to expand all Table Data">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABjFBMVEVentFhn89in9FjoNFjodNkodFnotJppNNppdRqpdVqptVrptVsptRtptRwuGl0um16rtd7r9d7sdx8r9h8st19r9h9s95+v3ibzZadzpmk0qCp1KWr1qiy0+yz2a++2e7A2+/U7NjV7dnZ7t3i8OHj7fbj7vbj7vfj8eLk7vblPCPl7/bl7/fmRCzmRi7mSjPmSjTmSzTm8Pfm8fnm8uTnSjLnTTbn8Pfn8frn8vrn8vvn8+bn8/7n9Pzn9f3n9f7n9v7oUjzoUz3oVD7oVT/oWEPoWUPoWUToWkXo8Pfo8ffo8fjpWkXpW0bqX0vq8vjraFXrb13rcF7sd2Xs9Pnt9Pnt9Prt9uzwi33w9vrw9+/xlx3xmiPx9vryny7yn5PyojTypZnzojT0qkb2vLT2vbX2xb72xr73wrr3/Pn62NP63Nf74Nz76ef7/fv87dj879z8/f797+7+4tz++Pf/4tz/5uH/6ub/7tf/7tv/79n/79z/8d3/8eH/8u///Pr//fr//vr//vz///8pVMrYAAABOklEQVQYGQXBPWuTURgA0HNvngSbNLQxKCpNBpVWsAUHHXRwcnJzcnLxr/TXODk7OQripHWpVIh1CbTFGKW+356TXh1PAQBwvmsaAAAQ19J4+/EJw1yWoB9w68Ov0Ds4oLocBmiLTD362IUOi4tvT2+Ai/OgutelgO+LnBOQBokWGT+P+hsZACBwtjUA0JVBg8DpBANgspmpEYCd9w31o7vLd4n2NYHZCjuU3YZVmWmQMV2VUNXDTcfroijWCMyqRdPrF3XMtjz5M2WJgNtxtl7Oh1evs1z9pkVImN/818QoYX8fJKH5csIwp7YuANxp2A4AAIhJPPvcA/I86X60QP0gHQL4VBo8BBAA3h71NKcvADKAvTwe5z0A6ZA3X3Mmj7L2b0vb3n9JoEpXoOikgMsKgefHHQBIu/gPPNJqMuZfDkEAAAAASUVORK5CYII=" class="smallimg">
Analysis View</div>');
print_out('<div class="menubutton" id="printView" open-sig-class="print" title="Displays all data in a single page, including the Errors/Warnings/Passed Checks/Information messages - Click Plus (+) icon to expand all Table Data">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAiUlEQVRIx2NgoCdYs2nHYSD+TyE+jM+C/8/efKYIg8wYWAuogekarwzmERMPA/F/GuHDIAv+B5XvoAkGmU2xBT8vtoExjJ983hiMh44FRAWRU+pCqkcwzEwGmAANUiemBdTMaDgtoFZRMfAWNO19RhIeUB8cpqEPjgxchUOpD4ZvlUmNVgVKxAIAsdgxrFcW4/sAAAAASUVORK5CYII=" class="smallimg">
Print view</div>
</div>
</div>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_rep_header: '||sqlerrm);
raise;
END print_rep_header;
----------------------------------------------------------------
-- Prints execution details pop-up window --
----------------------------------------------------------------
PROCEDURE print_execdetails IS
l_key VARCHAR2(255);
BEGIN
g_sections.delete;
print_out(' <!-- print Execution Details pop-up window -->
<div class="popup" data-popup="popup-1">
<div class="popup-inner">
<table cellpadding="3" cellspacing="0" border="0" width="100%" style="font-size: 14px;">
<tbody>
<tr>
<td colspan="2" class="popup-title"><b>Execution Details</b></td>
</tr>');
-- Loop and print values
l_key := g_rep_info.first;
WHILE l_key IS NOT NULL LOOP
IF ((l_key = 'FullHost') AND (g_cloud_flag)) THEN
print_out(' <tr>
<td class="popup-paramname"><b>'||l_key||'</b></td>
<td class="popup-paramval">
<span title="">'||g_rep_info(l_key));
print_cloud_image;
print_out(' </span>
</td>
</tr>');
ELSE
print_out(' <tr>
<td class="popup-paramname"><b>'||l_key||'</b></td>
<td class="popup-paramval"><span title="">'||g_rep_info(l_key)||'</span></td>
</tr>');
END IF;
l_key := g_rep_info.next(l_key);
END LOOP;
print_out(' <tr>
<td class="popup-paramname"><b>Start time:</b></td>
<td class="popup-paramval">
<span id="start_time"></span>
</td>
</tr>');
print_out(' <tr>
<td class="popup-paramname"><b>End time:</b></td>
<td class="popup-paramval">
<span id="end_time"></span>
</td>
</tr>');
print_out(' <tr>
<td class="popup-paramname"><b>Execution time:</b></td>
<td class="popup-paramval">
<span id="exec_time"></span>
</td>
</tr>');
print_out(' </tbody>
</table>
<div class="close-button" data-popup-close="popup-1"><a class="black-link">OK</a></div>
</div>
</div>
');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_execdetails: '||sqlerrm);
raise;
END print_execdetails;
----------------------------------------------------------------
-- Prints parameters pop-up window --
----------------------------------------------------------------
PROCEDURE print_parameters IS
BEGIN
print_out(' <!-- print Parameters pop-up window -->
<div class="popup" data-popup="popup-2">
<div class="popup-inner">
<table cellpadding="5" cellspacing="0" border="0" width="100%" style="font-size: 14px;">
<tbody>
<tr>
<td colspan="2" class="popup-title"><b>Parameters</b></td>
</tr>');
FOR i IN 1..g_parameters.COUNT LOOP
print_out(' <tr>
<td class="popup-paramname"><b>'||to_char(i)||'. '||g_parameters(i).pname||'</b></td>
<td class="popup-paramval"><span>'||g_parameters(i).pvalue||'</span></td>
</tr>');
END LOOP;
print_out(' </tbody>
</table>
<div class="close-button" data-popup-close="popup-2"><a class="black-link">OK</a></div>
</div>
</div>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_parameters: '||sqlerrm);
raise;
END print_parameters;
PROCEDURE print_mainpage IS
l_loop_count NUMBER;
l_section_id VARCHAR2(320);
l_counter_str VARCHAR2(2048);
BEGIN
l_loop_count := g_sections.count;
print_out('
<!-- main menu with tiles -->
<div class="mainmenu">
<table align="center" id="menutable">
<tbody>
<tr>
<td>
<div class="menubox">
<table cellpadding="5" cellspacing="2" class="mboxinner">
<thead>
<tr><th><span class="menuboxitemt">Execution Summary</span></th></tr></thead>
<tbody>
<tr><td><div open-section="E" class="menuboxitem"><span class=''error_ico icon''></span><div class="mboxelem">Errors</div></div></td>
<td align="right"><span class="errcount">'||g_results('E')||'</span></td></tr>
<tr><td><div open-section="W" class="menuboxitem"><span class=''warn_ico icon''></span><div class="mboxelem">Warnings</div></div></td>
<td align="right"><span class="warncount">'||g_results('W')||'</span></td></tr>
<tr><td><div open-section="S" class="menuboxitem"><span class=''success_ico icon''></span><div class="mboxelem">Passed Checks</div></div></td>
<td align="right"><span class="successcount">'||g_results('S')||'</span></td></tr>
<tr><td><div open-section="I" class="menuboxitem"><span class=''information_ico icon''></span><div class="mboxelem">Informational</div></div></td>
<td align="right"><span class="infocount">'||g_results('I')||'</span></td></tr>
</tbody></table>
</div>
</td>
<td>');
print_out('
<table>
<tr>');
FOR i in 1 .. l_loop_count LOOP
l_section_id := replace_chars(g_sec_detail(i).name);
l_counter_str := '';
IF (g_sec_detail(i).results('E') > 0)THEN
l_counter_str := '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('E')) || '</div><span class=''error_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('W') > 0)THEN
l_counter_str := l_counter_str || '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('W')) || '</div><span class=''warn_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('S') > 0)THEN
l_counter_str := l_counter_str || '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('S')) || '</div><span class=''success_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('I') > 0)THEN
l_counter_str := l_counter_str || '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('I')) || '</div><span class=''information_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('E') + g_sec_detail(i).results('W') + g_sec_detail(i).results('S') + g_sec_detail(i).results('I') = 0) THEN
l_counter_str := '<span class=''menubox_subtitle''>Executed, nothing to report</span>';
END IF;
print_out('
<td>
<a href="#" class="blacklink"><div class="floating-box" open-section="'||l_section_id||'"><div class="textbox">'||g_sec_detail(i).title||'</div><div id="'||l_section_id||'Count" class="counterbox">'||l_counter_str||'</div></div></a>
</td>');
IF (MOD(i,3)=0 ) THEN
print_out(' </tr><tr>');
END IF;
END LOOP;
print_out('
</tr>
</table>
</td></tr>
</tbody>
</table>
</div>
<!-- end main menu --> ');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_mainpage: '||sqlerrm);
raise;
END print_mainpage;
----------------------------------------------------------------
-- Print footer and end of html page def --
----------------------------------------------------------------
PROCEDURE print_footer IS
BEGIN
print_out(' <!-- footer area -->
<div class="footerarea">
<div class="footer">
<div style="visibility: visible; max-height: 33px; min-height: 33px;">
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1549983.1" target="_blank" class="blacklink">About Oracle Proactive Support</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/SrCreate" target="_blank" class="blacklink">Log a Service Request</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1545562.1" target="_blank" class="blacklink">Related Analyzers</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1939637.1" target="_blank" class="blacklink">Analyzer Bundle Menu Tool</a></span>
<span class="separator"></span>
<span><a href="http://www.oracle.com/us/legal/privacy/overview/index.html" target="_blank" class="blacklink">Your Privacy Rights</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=2116869.1" target="_blank" class="blacklink">Frequently Asked Questions</a></span>
</div>
</div>
</div><!-- end footer area -->
</div><!-- end main div -->
');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_footer: '||sqlerrm);
raise;
END print_footer;
----------------------------------------------------------------
-- Print execution times in the Execution Details page --
----------------------------------------------------------------
PROCEDURE print_execution_time (l_time TIMESTAMP) IS
BEGIN
print_out(' <script>
$("#start_time").text("'||to_char(g_analyzer_start_time,'hh24:mi:ss.ff3')||'");
</script>');
print_out(' <script>
$("#end_time").text("'||to_char(l_time,'hh24:mi:ss.ff3')||'");
</script>');
print_out(' <script>
$("#exec_time").text("'||format_elapsed(g_analyzer_elapsed)||'");
</script>');
END print_execution_time;
----------------------------------------------------------------
-- Evaluates if a rowcol meets desired criteria --
----------------------------------------------------------------
FUNCTION evaluate_rowcol(p_oper varchar2, p_val varchar2, p_colv varchar2) return boolean is
x NUMBER;
y NUMBER;
n boolean := true;
BEGIN
-- Attempt to convert to number the column value, otherwise proceed as string
BEGIN
x := to_number(p_colv);
y := to_number(p_val);
EXCEPTION WHEN OTHERS THEN
n := false;
END;
-- Compare
IF p_oper = '=' THEN
IF n THEN
return x = y;
ELSE
return p_val = p_colv;
END IF;
ELSIF p_oper = '>' THEN
IF n THEN
return x > y;
ELSE
return p_colv > p_val;
END IF;
ELSIF p_oper = '<' THEN
IF n THEN
return x < y;
ELSE
return p_colv < p_val;
END IF;
ELSIF p_oper = '<=' THEN
IF n THEN
return x <= y;
ELSE
return p_colv <= p_val;
END IF;
ELSIF p_oper = '>=' THEN
IF n THEN
return x >= y;
ELSE
return p_colv >= p_val;
END IF;
ELSIF p_oper = '!=' OR p_oper = '<>' THEN
IF n THEN
return x != y;
ELSE
return p_colv != p_val;
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in evaluate_rowcol');
raise;
END evaluate_rowcol;
---------------------------------------------
-- Expand [note] or {patch} tokens --
---------------------------------------------
FUNCTION expand_links(p_str VARCHAR2) return VARCHAR2 IS
l_str VARCHAR2(32767);
Begin
-- Assign to working variable
l_str := p_str;
-- First deal with patches
l_str := regexp_replace(l_str,'({)([0-9]*)(})',
'<a target="_blank" href="'||g_mos_patch_url||'\\2">\\2</a>',1,0);
-- Same for notes
l_str := regexp_replace(l_str,'(\\[)([0-9]*\\.[0-9])(\\#[a-zA-Z0-9_]+)*(\\])',
'<a target="_blank" href="'||g_mos_doc_url||'\\2\\3">Doc ID \\2</a>',1,0);
return l_str;
END expand_links;
--------------------------------------------
-- Prepare the SQL with the substitution values
--------------------------------------------
FUNCTION prepare_text(
p_raw_text IN VARCHAR2
) RETURN VARCHAR2 IS
l_formatted_text VARCHAR2(32767);
l_key VARCHAR2(255);
BEGIN
-- Assign signature to working variable
l_formatted_text := p_raw_text;
-- Build the appropriate SQL replacing all applicable values
-- with the appropriate parameters
l_key := g_sql_tokens.first;
WHILE l_key is not null LOOP
l_formatted_text := replace(l_formatted_text, l_key, g_sql_tokens(l_key));
l_key := g_sql_tokens.next(l_key);
END LOOP;
RETURN l_formatted_text;
EXCEPTION WHEN OTHERS THEN
print_log('Error in prepare_text');
raise;
END prepare_text;
----------------------------------------------------------------
-- Set partial section result --
----------------------------------------------------------------
PROCEDURE set_item_result(result varchar2) is
BEGIN
IF g_sections(g_sections.last).result in ('U','I') THEN
g_sections(g_sections.last).result := result;
ELSIF g_sections(g_sections.last).result = 'S' THEN
IF result in ('E','W') THEN
g_sections(g_sections.last).result := result;
END IF;
ELSIF g_sections(g_sections.last).result = 'W' THEN
IF result = 'E' THEN
g_sections(g_sections.last).result := result;
END IF;
END IF;
-- Set counts
IF result = 'S' THEN
g_sections(g_sections.last).success_count :=
g_sections(g_sections.last).success_count + 1;
ELSIF result = 'W' THEN
g_sections(g_sections.last).warn_count :=
g_sections(g_sections.last).warn_count + 1;
ELSIF result = 'E' THEN
g_sections(g_sections.last).error_count :=
g_sections(g_sections.last).error_count + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in set_item_result: '||sqlerrm);
--CG raise;
END set_item_result;
----------------------------------------------------------------------
-- Create associative tables that will keep the links
-- between the signatures that use hyperlinks
----------------------------------------------------------------------
PROCEDURE create_hyperlink_table IS
TYPE l_split_str_type IS TABLE OF VARCHAR(126);
l_split_str l_split_str_type := l_split_str_type();
l_hyperlink VARCHAR2(512);
l_count NUMBER;
l_key VARCHAR2(215);
BEGIN
l_key := g_signatures.first;
WHILE l_key IS NOT NULL LOOP
l_count := 1;
IF (g_signatures(l_key).extra_info.EXISTS('HYPERLINK')) AND (g_signatures(l_key).extra_info('HYPERLINK') IS NOT NULL) THEN
l_hyperlink := g_signatures(l_key).extra_info('HYPERLINK');
debug ('CG Hyper:' || l_hyperlink);
-- remove the table entry as we won't need it anymore
g_signatures(l_key).extra_info.DELETE('HYPERLINK');
-- split the string and extract the hyperlink details
WHILE (l_count < 4) AND (l_hyperlink IS NOT NULL) LOOP
l_split_str.extend();
l_split_str(l_count) := regexp_substr(l_hyperlink, '^([^:]+)');
l_hyperlink := regexp_replace(l_hyperlink, '^([^:]+):(.+)', '\\2');
debug ('CG Hyper7:' || l_hyperlink);
l_count := l_count + 1;
END LOOP;
IF (l_count < 3) THEN
print_log('Broken hyperlink!');
return;
END IF;
-- populate source to dest (links) table - sig and column names in upper case
g_source_to_dest(l_key).cols(UPPER(l_split_str(1))) := 'a' || to_char(g_hypercount);
-- populate dest to source table (anchors)
g_dest_to_source(UPPER(l_split_str(2))).cols(UPPER(l_split_str(3))) := 'a' || to_char(g_hypercount);
g_hypercount := g_hypercount + 1;
END IF;
l_key := g_signatures.next(l_key);
END LOOP;
EXCEPTION WHEN OTHERS THEN
print_log('Error in create_hyperlink_table: '||sqlerrm);
END create_hyperlink_table;
----------------------------------------------------------------------
-- Runs a single SQL using DBMS_SQL returns filled tables
-- Precursor to future run_signature which will call this and
-- the print api. For now calls are manual.
----------------------------------------------------------------------
PROCEDURE run_sig_sql(
p_raw_sql IN VARCHAR2, -- SQL in the signature may require substitution
p_col_rows OUT COL_LIST_TBL, -- signature SQL column names
p_col_headings OUT VARCHAR_TBL, -- signature SQL row values
p_limit_rows IN VARCHAR2 DEFAULT 'Y') IS
l_sql VARCHAR2(32767);
c INTEGER;
l_rows_fetched NUMBER;
l_step VARCHAR2(20);
l_col_rows COL_LIST_TBL := col_list_tbl();
l_col_headings VARCHAR_TBL := varchar_tbl();
l_col_cnt INTEGER;
l_desc_rec_tbl DBMS_SQL.DESC_TAB2;
BEGIN
-- Prepare the Signature SQL
l_step := '10';
l_sql := prepare_text(p_raw_sql);
-- Add SQL with substitution to attributes table
l_step := '20';
c := dbms_sql.open_cursor;
l_step := '30';
DBMS_SQL.PARSE(c, l_sql, DBMS_SQL.NATIVE);
-- Get column count and descriptions
l_step := '40';
DBMS_SQL.DESCRIBE_COLUMNS2(c, l_col_cnt, l_desc_rec_tbl);
-- Register arrays to bulk collect results and set headings
l_step := '50';
FOR i IN 1..l_col_cnt LOOP
l_step := '50.1.'||to_char(i);
l_col_headings.extend();
-- removed initCap per Standardization team in 3.0.34
l_col_headings(i) := replace(l_desc_rec_tbl(i).col_name,'|','<br>');
l_col_rows.extend();
dbms_sql.define_array(c, i, l_col_rows(i), g_max_output_rows, 1);
END LOOP;
-- Execute and Fetch
l_step := '60';
get_current_time(g_query_start_time);
l_rows_fetched := DBMS_SQL.EXECUTE(c);
l_rows_fetched := DBMS_SQL.FETCH_ROWS(c);
debug(' Rows fetched: '||to_char(l_rows_fetched));
l_step := '70';
IF l_rows_fetched > 0 THEN
FOR i in 1..l_col_cnt LOOP
l_step := '70.1.'||to_char(i);
DBMS_SQL.COLUMN_VALUE(c, i, l_col_rows(i));
END LOOP;
END IF;
IF nvl(p_limit_rows,'Y') = 'N' THEN
WHILE l_rows_fetched = g_max_output_rows LOOP
l_rows_fetched := DBMS_SQL.FETCH_ROWS(c);
debug(' Rows fetched: '||to_char(l_rows_fetched));
FOR i in 1..l_col_cnt LOOP
l_step := '70.2.'||to_char(i);
DBMS_SQL.COLUMN_VALUE(c, i, l_col_rows(i));
END LOOP;
END LOOP;
END IF;
g_query_elapsed := stop_timer(g_query_start_time);
-- g_query_total := g_query_total + g_query_elapsed;
-- Close cursor
l_step := '80';
IF dbms_sql.is_open(c) THEN
dbms_sql.close_cursor(c);
END IF;
-- Set out parameters
p_col_headings := l_col_headings;
p_col_rows := l_col_rows;
EXCEPTION
WHEN OTHERS THEN
print_error('PROGRAM ERROR<br />
Error in run_sig_sql at step '||
l_step||': '||sqlerrm||'<br/>
See the log file for additional details<br/>');
print_log('Error at step '||l_step||' in run_sig_sql running: '||l_sql);
print_log('Error: '||sqlerrm);
l_col_cnt := -1;
IF dbms_sql.is_open(c) THEN
dbms_sql.close_cursor(c);
END IF;
g_errbuf := 'toto '||l_step;
END run_sig_sql;
PROCEDURE generate_hidden_xml(
p_sig_id VARCHAR2,
p_sig SIGNATURE_REC, -- Name of signature item
p_col_rows COL_LIST_TBL, -- signature SQL row values
p_col_headings VARCHAR_TBL) -- signature SQL column names
IS
l_hidden_xml_doc XMLDOM.DOMDocument;
l_hidden_xml_node XMLDOM.DOMNode;
l_diagnostic_element XMLDOM.DOMElement;
l_diagnostic_node XMLDOM.DOMNode;
l_issues_node XMLDOM.DOMNode;
l_signature_node XMLDOM.DOMNode;
l_signature_element XMLDOM.DOMElement;
l_node XMLDOM.DOMNode;
l_row_node XMLDOM.DOMNode;
l_failure_node XMLDOM.DOMNode;
l_run_details_node XMLDOM.DOMNode;
l_run_detail_data_node XMLDOM.DOMNode;
l_detail_element XMLDOM.DOMElement;
l_detail_node XMLDOM.DOMNode;
l_detail_name_attribute XMLDOM.DOMAttr;
l_parameters_node XMLDOM.DOMNode;
l_parameter_node XMLDOM.DOMNode;
l_col_node XMLDOM.DOMNode;
l_parameter_element XMLDOM.DOMElement;
l_col_element XMLDOM.DOMElement;
l_param_name_attribute XMLDOM.DOMAttr;
l_failure_element XMLDOM.DOMElement;
l_sig_id_attribute XMLDOM.DOMAttr;
l_col_name_attribute XMLDOM.DOMAttr;
l_row_attribute XMLDOM.DOMAttr;
l_sigxinfo_element XMLDOM.DOMElement;
l_sigxinfo_node XMLDOM.DOMNode;
l_xinfo_element XMLDOM.DOMElement;
l_xinfo_node XMLDOM.DOMNode;
l_xinfo_name_attr XMLDOM.DOMAttr;
l_key VARCHAR2(255);
l_match VARCHAR2(1);
l_rows NUMBER;
l_value VARCHAR2(2000);
BEGIN
IF g_dx_summary_error IS NOT NULL THEN
return;
END IF;
l_hidden_xml_doc := g_hidden_xml;
IF (XMLDOM.isNULL(l_hidden_xml_doc)) THEN
l_hidden_xml_doc := XMLDOM.newDOMDocument;
l_hidden_xml_node := XMLDOM.makeNode(l_hidden_xml_doc);
l_diagnostic_node := XMLDOM.appendChild(l_hidden_xml_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'diagnostic')));
l_run_details_node := XMLDOM.appendChild(l_diagnostic_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'run_details')));
l_key := g_rep_info.first;
WHILE l_key IS NOT NULL LOOP
l_detail_element := XMLDOM.createElement(l_hidden_xml_doc,'detail');
l_detail_node := XMLDOM.appendChild(l_run_details_node,XMLDOM.makeNode(l_detail_element));
l_detail_name_attribute:=XMLDOM.setAttributeNode(l_detail_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_detail_element, 'name', l_key);
IF g_rep_info(l_key) IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_detail_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,g_rep_info(l_key))));
END IF;
l_key := g_rep_info.next(l_key);
END LOOP;
-- add cloud check
l_detail_element := XMLDOM.createElement(l_hidden_xml_doc,'detail');
l_detail_node := XMLDOM.appendChild(l_run_details_node,XMLDOM.makeNode(l_detail_element));
l_detail_name_attribute:=XMLDOM.setAttributeNode(l_detail_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_detail_element, 'name', 'Cloud');
IF g_cloud_flag THEN
l_node := XMLDOM.appendChild(l_detail_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,'Y')));
ELSE
l_node := XMLDOM.appendChild(l_detail_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,'N')));
END IF;
l_parameters_node := XMLDOM.appendChild(l_diagnostic_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'parameters')));
FOR i IN 1..g_parameters.COUNT LOOP
l_parameter_element := XMLDOM.createElement(l_hidden_xml_doc,'parameter');
l_parameter_node := XMLDOM.appendChild(l_parameters_node,XMLDOM.makeNode(l_parameter_element));
l_param_name_attribute:=XMLDOM.setAttributeNode(l_parameter_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_parameter_element, 'name', to_char(i) || '. ' ||g_parameters(i).pname);
IF g_parameters(i).pvalue IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_parameter_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,g_parameters(i).pvalue)));
END IF;
END LOOP;
l_issues_node := XMLDOM.appendChild(l_diagnostic_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'issues')));
END IF;
IF p_sig_id IS NOT NULL THEN
l_issues_node := XMLDOM.getLastChild(XMLDOM.getFirstChild(XMLDOM.makeNode(l_hidden_xml_doc)));
l_signature_element := XMLDOM.createElement(l_hidden_xml_doc,'signature');
l_sig_id_attribute := XMLDOM.setAttributeNode(l_signature_element,XMLDOM.createAttribute(l_hidden_xml_doc,'id'));
l_signature_node := XMLDOM.appendChild(l_issues_node,XMLDOM.makeNode(l_signature_element));
XMLDOM.setAttribute(l_signature_element, 'id',p_sig_id);
IF p_sig.extra_info.count > 0 THEN
l_sigxinfo_element := XMLDOM.createElement(l_hidden_xml_doc,'sigxinfo');
l_sigxinfo_node := XMLDOM.appendChild(l_signature_node,XMLDOM.makeNode(l_sigxinfo_element));
l_key := p_sig.extra_info.first;
WHILE l_key IS NOT NULL LOOP
l_xinfo_element := XMLDOM.createElement(l_hidden_xml_doc,'info');
l_xinfo_node := XMLDOM.appendChild(l_sigxinfo_node,XMLDOM.makeNode(l_xinfo_element));
l_xinfo_name_attr := XMLDOM.setAttributeNode(l_xinfo_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_xinfo_element, 'name',l_key);
IF p_sig.extra_info(l_key) IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_xinfo_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,p_sig.extra_info(l_key))));
END IF;
l_key := p_sig.extra_info.next(l_key);
END LOOP;
END IF;
-- if the DX flag is Y or D, print all the details
IF (p_sig.include_in_xml in ('Y', 'D')) THEN
IF p_sig.limit_rows='Y' THEN
l_rows := least(g_max_output_rows,p_col_rows(1).COUNT,50);
ELSE
l_rows := least(p_col_rows(1).COUNT,50);
END IF;
FOR i IN 1..l_rows LOOP
l_failure_element := XMLDOM.createElement(l_hidden_xml_doc,'failure');
l_row_attribute := XMLDOM.setAttributeNode(l_failure_element,XMLDOM.createAttribute(l_hidden_xml_doc,'row'));
l_failure_node := XMLDOM.appendChild(l_signature_node,XMLDOM.makeNode(l_failure_element));
XMLDOM.setAttribute(l_failure_element, 'row', i);
FOR j IN 1..p_col_headings.count LOOP
l_col_element := XMLDOM.createElement(l_hidden_xml_doc,'column');
l_col_name_attribute := XMLDOM.setAttributeNode(l_col_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
l_col_node := XMLDOM.appendChild(l_failure_node,XMLDOM.makeNode(l_col_element));
XMLDOM.setAttribute(l_col_element, 'name',p_col_headings(j));
l_value := p_col_rows(j)(i);
IF p_sig_id = 'REC_PATCH_CHECK' THEN
IF p_col_headings(j) = 'Patch' THEN
l_value := replace(replace(p_col_rows(j)(i),'{'),'}');
ELSIF p_col_headings(j) = 'Note' THEN
l_value := replace(replace(p_col_rows(j)(i),'['),']');
END IF;
END IF;
-- Rtrim the column value if blanks are not to be preserved
IF NOT g_preserve_trailing_blanks THEN
l_value := RTRIM(l_value, ' ');
END IF;
IF l_value IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_col_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,l_value)));
END IF;
END LOOP;
END LOOP;
END IF; --p_sig.include_in_xml='Y'
END IF;
g_hidden_xml := l_hidden_xml_doc;
EXCEPTION
WHEN OTHERS THEN
g_dx_summary_error := '<DXSUMMGENERR><![CDATA['||SQLERRM||']]></DXSUMMGENERR>';
print_log('DX Summary generation error: '||SQLERRM);
END generate_hidden_xml;
PROCEDURE print_hidden_xml
IS
l_hidden_xml_clob clob;
l_offset NUMBER := 1;
l_length NUMBER;
l_node_list XMLDOM.DOMNodeList;
l_node_length NUMBER;
BEGIN
IF g_dx_summary_error IS NOT NULL THEN
print_out('<!-- ######BEGIN DX SUMMARY######','Y');
print_out(g_dx_summary_error);
print_out('######END DX SUMMARY######-->','Y');
g_dx_summary_error:=null;
return;
END IF;
IF XMLDOM.isNULL(g_hidden_xml) THEN
generate_hidden_xml(p_sig_id => null,
p_sig => null,
p_col_headings => null,
p_col_rows => null);
END IF;
dbms_lob.createtemporary(l_hidden_xml_clob, true);
--print CLOB
XMLDOM.WRITETOCLOB(g_hidden_xml, l_hidden_xml_clob);
print_out('<!-- ######BEGIN DX SUMMARY######','Y');
LOOP
EXIT WHEN (l_offset > dbms_lob.getlength(l_hidden_xml_clob) OR dbms_lob.getlength(l_hidden_xml_clob)=0);
print_out(dbms_lob.substr(l_hidden_xml_clob,2000, l_offset),'N');
l_offset := l_offset + 2000;
END LOOP;
print_out('######END DX SUMMARY######-->','Y'); --should be a newline here
dbms_lob.freeTemporary(l_hidden_xml_clob);
XMLDOM.FREEDOCUMENT(g_hidden_xml);
EXCEPTION
WHEN OTHERS THEN
print_log('Error in print_hidden_xml: '||SQLERRM);
END print_hidden_xml;
----------------------------------------------------------------
-- Once a signature has been run, evaluates and prints it --
----------------------------------------------------------------
FUNCTION process_signature_results(
p_sig_id VARCHAR2, -- signature id
p_sig SIGNATURE_REC, -- Name of signature item
p_col_rows COL_LIST_TBL, -- signature SQL row values
p_col_headings VARCHAR_TBL, -- signature SQL column names
p_parent_id VARCHAR2 DEFAULT NULL,
p_sig_suffix VARCHAR2 DEFAULT NULL,
p_class_string VARCHAR2 DEFAULT NULL
) RETURN VARCHAR2 IS -- returns 'E','W','S','I'
l_sig_fail BOOLEAN := false;
l_row_fail BOOLEAN := false;
l_fail_flag BOOLEAN := false;
l_html VARCHAR2(32767) := null;
l_column VARCHAR2(255) := null;
l_operand VARCHAR2(3);
l_value VARCHAR2(4000);
l_step VARCHAR2(255);
l_i VARCHAR2(255);
l_curr_col VARCHAR2(255) := NULL;
l_curr_val VARCHAR2(4000) := NULL;
l_print_sql_out BOOLEAN := true;
l_inv_param EXCEPTION;
l_rows_fetched NUMBER := p_col_rows(1).count;
l_printing_cols NUMBER := 0;
l_error_type VARCHAR2(1);
l_current_section VARCHAR2(320);
l_current_sig VARCHAR2(320);
l_sig_suffix VARCHAR2(100);
l_class_string VARCHAR2(1024);
BEGIN
-- Validate parameters which have fixed values against errors when
-- defining or loading signatures
l_current_section := replace_chars(g_sec_detail(g_sec_detail.COUNT).name);
g_sig_count := g_sig_count + 1;
l_current_sig := 'S'||to_char(g_sig_count); --build signature class name
-- if p_sig_suffix is not null, then this ia a child signature and we should append the id with the parent row count, so it will be unique
IF (p_sig_suffix IS NOT NULL) THEN
l_current_sig := l_current_sig || to_char(p_sig_suffix);
END IF;
IF (p_sig.fail_condition NOT IN ('RSGT1','RS','NRS')) AND
((instr(p_sig.fail_condition,'[') = 0) OR
(instr(p_sig.fail_condition,'[',1,2) = 0) OR
(instr(p_sig.fail_condition,']') = 0) OR
(instr(p_sig.fail_condition,']',1,2) = 0)) THEN
print_log('Invalid value or format for failure condition: '||
p_sig.fail_condition);
raise l_inv_param;
ELSIF p_sig.print_condition NOT IN ('SUCCESS','FAILURE','ALWAYS','NEVER') THEN
print_log('Invalid value for print_condition: '||p_sig.print_condition);
raise l_inv_param;
ELSIF p_sig.fail_type NOT IN ('E','W','I') THEN
print_log('Invalid value for fail_type: '||p_sig.fail_type);
raise l_inv_param;
ELSIF p_sig.print_sql_output NOT IN ('Y','N','RS') THEN
print_log('Invalid value for print_sql_output: '||p_sig.print_sql_output);
raise l_inv_param;
ELSIF p_sig.limit_rows NOT IN ('Y','N') THEN
print_log('Invalid value for limit_rows: '||p_sig.limit_rows);
raise l_inv_param;
ELSIF p_sig.print_condition in ('ALWAYS','SUCCESS') AND
p_sig.success_msg is null AND p_sig.print_sql_output = 'N' THEN
print_log('Invalid parameter combination.');
print_log('print_condition/success_msg/print_sql_output: '||
p_sig.print_condition||'/'||nvl(p_sig.success_msg,'null')||
'/'||p_sig.print_sql_output);
print_log('When printing on success either success msg or SQL output '||
'printing should be enabled.');
raise l_inv_param;
END IF;
l_print_sql_out := (nvl(p_sig.print_sql_output,'Y') = 'Y' OR
(p_sig.print_sql_output = 'RSGT1' AND l_rows_fetched > 1) OR
(p_sig.print_sql_output = 'RS' AND l_rows_fetched > 0) OR
p_sig.child_sigs.count > 0 AND l_rows_fetched > 0);
-- Determine signature failure status
IF p_sig.fail_condition NOT IN ('RSGT1','RS','NRS') THEN
-- Get the column to evaluate, if any
l_step := '20';
l_column := upper(substr(ltrim(p_sig.fail_condition),2,instr(p_sig.fail_condition,']') - 2));
l_operand := rtrim(ltrim(substr(p_sig.fail_condition, instr(p_sig.fail_condition,']')+1,
(instr(p_sig.fail_condition,'[',1,2)-instr(p_sig.fail_condition,']') - 1))));
l_value := substr(p_sig.fail_condition, instr(p_sig.fail_condition,'[',2)+1,
(instr(p_sig.fail_condition,']',1,2)-instr(p_sig.fail_condition,'[',1,2)-1));
l_step := '30';
FOR i IN 1..least(l_rows_fetched, g_max_output_rows) LOOP
l_step := '40';
FOR j IN 1..p_col_headings.count LOOP
l_step := '40.1.'||to_char(j);
l_row_fail := false;
l_curr_col := upper(p_col_headings(j));
l_curr_val := p_col_rows(j)(i);
IF nvl(l_column,'&&&') = l_curr_col THEN
l_step := '40.2.'||to_char(j);
l_row_fail := evaluate_rowcol(l_operand, l_value, l_curr_val);
IF l_row_fail THEN
l_fail_flag := true;
END IF;
END IF;
END LOOP;
END LOOP;
END IF;
-- Evaluate this signature
l_step := '50';
l_sig_fail := l_fail_flag OR
(p_sig.fail_condition = 'RSGT1' AND l_rows_fetched > 1) OR
(p_sig.fail_condition = 'RS' AND l_rows_fetched > 0) OR
(p_sig.fail_condition = 'NRS' and l_rows_fetched = 0);
l_step := '55';
IF (l_sig_fail OR p_sig.fail_type = 'I') THEN
generate_hidden_xml(p_sig_id => p_sig_id,
p_sig => p_sig,
p_col_headings => p_col_headings,
p_col_rows => p_col_rows);
END IF;
-- If success and no print just return
l_step := '60';
IF ((NOT l_sig_fail) AND p_sig.print_condition IN ('FAILURE','NEVER')) THEN
IF p_sig.fail_type = 'I' THEN
return 'I';
ELSE
return 'S';
END IF;
ELSIF (l_sig_fail AND (p_sig.print_condition IN ('SUCCESS','NEVER'))) THEN
return p_sig.fail_type;
-- if the sig is set as "Print in DX only" then return
ELSIF (p_sig.include_in_xml = 'D') THEN
return p_sig.fail_type;
END IF;
-- if p_parent_id is null, this is not a child sig (it's a first level signature)
IF (p_parent_id IS NULL) THEN
g_level := 1;
g_family_result := '';
-- populate the signature result to the global hash
l_step := 'Populate result in the structure';
g_sec_detail(g_sec_detail.LAST).sigs.extend();
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_id := l_current_sig;
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_name := p_sig_id;
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result := p_sig.fail_type;
IF (NOT l_sig_fail AND (p_sig.fail_type != 'I')) THEN
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result := 'S';
END IF;
ELSE
g_level := g_level + 1;
END IF;
-- Print container and title
l_html := '
<!-- '||l_current_sig||' -->
<div class="data sigcontainer signature '||l_current_section||' '||l_current_sig||' '|| p_class_string || ' ' || g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||' section print analysis" level="'||to_char(g_level)||'" id="'||l_current_sig||'" style="display: none;">
<div class="divItemTitle">
<input type="checkbox" rowid="'||l_current_sig||'" class="exportcheck data print">';
l_html := l_html || '
<a class="detail" toggle-data="restable_'||l_current_sig||'">
<div class="arrowright data section fullsection print analysis">▶</div><div class="arrowdown data" style="display: none">▼</div>
<div class="sigdescription" style="display:inline;"><table style="display:inline;"><tr class="'||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||' sigtitle"><td class="divItemTitlet">'||prepare_text(p_sig.title)||'</td></tr></table></div>
</a>';
-- CG Review this condition
IF p_sig.extra_info.count > 0 OR p_sig.sig_sql is not null THEN
l_html := l_html || '
<a class="detailsmall" toggle-info="tbitm_'||l_current_sig||'"><span class="siginfo_ico" title="Show signature information" alt="Show Info"></span></a>';
END IF;
l_html := l_html || '
<a class="detailsmall" href="javascript:;" onclick=''export2PaddedText("'||l_current_sig||'");return false;''><span class="export_txt_ico" title="Export to .txt" alt="Export to .txt"></span></a>
<a class="detailsmall" href="javascript:;" onclick=''export2CSV("'||l_current_sig||'")''><span class="export_ico" title="Export to .csv" alt="Export to .csv"></span></a>';
-- add sort icon for non-parents sigs and only when more than 1 record is retrieved (it doesn't make any sense to sort a single record)
IF ((p_sig.child_sigs.count = 0) AND (l_rows_fetched > 1) AND (l_print_sql_out)) THEN
l_html := l_html || '
<a class="detailsmall"><span class="sort_ico" table-name='||l_current_sig||' title="Sort table" alt="Sort table"></span></a>';
END IF;
l_html := l_html || '
</div>';
-- Print collapsable/expandable extra info table if there are contents
l_step := '80';
IF p_sig.extra_info.count > 0 OR p_sig.sig_sql is not null THEN
g_item_id := g_item_id + 1;
l_step := '90';
l_html := l_html || '
<table class="table1 data" id="tbitm_' || l_current_sig || '" style="display:none">
<thead>
<tr><th bgcolor="#f2f4f7" class="sigdetails">Item Name</th><th bgcolor="#f2f4f7" class="sigdetails">Item Value</th></tr>
</thead>
<tbody>';
-- Loop and print values
l_step := '110';
l_i := p_sig.extra_info.FIRST;
WHILE (l_i IS NOT NULL) LOOP
l_step := '110.1.'||l_i;
-- don't print the SHOW_SQL parameter
IF (l_i != 'SHOW_SQL') THEN
l_html := l_html || ' <tr><td>' || l_i || '</td><td>'||
p_sig.extra_info(l_i) || '</td></tr>';
END IF;
l_step := '110.2.'||l_i;
l_i := p_sig.extra_info.next(l_i);
END LOOP;
-- print SQL only if SHOW_SQL != 'N' and the SQL string is not null
IF ((p_sig.sig_sql is not null) AND ((NOT p_sig.extra_info.EXISTS('SHOW_SQL')) OR (p_sig.extra_info.EXISTS('SHOW_SQL')) AND (nvl(p_sig.extra_info('SHOW_SQL'), 'Y') != 'N'))) THEN
l_step := '120';
l_html := l_html || '
<tr><td>SQL</td><td><pre>'|| prepare_text(escape_html_chars(p_sig.sig_sql)) ||
'</pre></td></tr>';
END IF;
-- number of records retrieved and elapsed time
l_html := l_html ||'<tr><td>Number of rows:</td><td>';
IF p_sig.limit_rows = 'N' OR l_rows_fetched < g_max_output_rows THEN
l_html := l_html || l_rows_fetched || ' rows selected';
ELSE
l_html := l_html ||'Displaying first '||to_char(g_max_output_rows) || ' out of ' || l_rows_fetched || ' rows retrieved.';
END IF;
l_html := l_html ||'</td></tr><tr><td>';
l_html := l_html ||'Elapsed time:</td><td>' || format_elapsed(g_query_elapsed) || '</td></tr>';
l_html := l_html || '
</tbody>
</table>';
END IF;
l_step := '140';
-- Print the header SQL info table
print_out(expand_links(l_html));
l_html := null;
IF l_print_sql_out THEN
IF p_sig.child_sigs.count = 0 THEN -- Signature has no children
-- Print the actual results table
-- Table header
l_step := '150';
l_html := '
<!-- table that includes the SQL results (data) -->
<div class="divtable">';
l_html := l_html || '
<table class="table1 data tabledata" id="restable_'||l_current_sig||'" style="display:none">
<thead>';
-- Column headings
l_html := l_html || '
<tr class="'||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||'">';
print_out(l_html);
l_html := '';
l_step := '160';
FOR i IN 1..p_col_headings.count LOOP
IF upper(nvl(p_col_headings(i),'XXX')) not like '##$$FK_$$##' THEN
-- Encode blanks as HTML space if this analyzer is set so by g_preserve_trailing_blanks
-- this ensures trailing blanks added for padding are honored by browsers
-- affects only printing, DX summary handled separately
IF g_preserve_trailing_blanks THEN
l_html := l_html ||'
<th bgcolor="#f2f4f7" class="sigdetails">'||RPAD(RTRIM(p_col_headings(i),' '),
-- pad length is the number of spaces existing times the length of => 6
(length(p_col_headings(i)) - length(RTRIM(p_col_headings(i),' '))) * 6
+ length(RTRIM(p_col_headings(i),' ')),' ') ||'</th>';
ELSE
l_html := l_html || '
<th bgcolor="#f2f4f7" class="sigdetails">'||nvl(p_col_headings(i),' ')||'</th>';
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END IF;
END LOOP;
l_html := l_html || '
</tr>
</thead>
<tbody>';
-- Print headers
print_out(expand_links(l_html));
-- Row values
l_step := '170';
FOR i IN 1..l_rows_fetched LOOP
l_html := ' <tr class="tdata '||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||'">';
l_step := '170.1.'||to_char(i);
FOR j IN 1..p_col_headings.count LOOP
-- Evaluate if necessary
l_step := '170.2.'||to_char(j);
l_row_fail := false;
l_step := '170.3.'||to_char(j);
l_curr_col := upper(p_col_headings(j));
l_step := '170.4.'||to_char(j);
l_curr_val := p_col_rows(j)(i);
l_step := '170.5.'||to_char(j);
IF nvl(l_column,'&&&') = l_curr_col THEN
l_step := '170.6.'||
substr('['||l_operand||']['||l_value||']['||l_curr_val||']',1,96);
l_row_fail := evaluate_rowcol(l_operand, l_value, l_curr_val);
END IF;
-- Encode blanks as HTML space if this analyzer is set so by g_preserve_trailing_blanks
-- this ensures trailing blanks added for padding are honored by browsers
-- affects only printing, DX summary handled separately
IF g_preserve_trailing_blanks THEN
l_curr_Val := RPAD(RTRIM(l_curr_Val,' '),
-- pad length is the number of spaces existing times the length of => 6
(length(l_curr_Val) - length(RTRIM(l_curr_Val,' '))) * 6 + length(RTRIM(l_curr_Val,' ')),
' ');
ELSE
l_curr_Val := RTRIM(l_curr_Val, ' ');
END IF;
-- Print
l_step := '170.7.'||to_char(j);
IF upper(nvl(p_col_headings(j),'XXX')) not like '##$$FK_$$##' THEN
DECLARE
l_cell_text VARCHAR2(1024) := '';
BEGIN
IF (g_dest_to_source.EXISTS(p_sig_id)) AND (g_dest_to_source(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_dest_to_source(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a class="anchor" id="'|| g_dest_to_source(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
ELSIF (g_source_to_dest.EXISTS(p_sig_id)) AND (g_source_to_dest(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_source_to_dest(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a href="" siglink="'|| g_source_to_dest(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
l_cell_text := l_cell_text || '<span class="brokenlink" style="display:none;" title="This record does no have a parent"></span>';
ELSE
l_cell_text := l_curr_val;
END IF;
IF l_row_fail THEN
l_html := l_html || '
<td class="hlt sigdetails">'|| l_cell_text || '</td>';
ELSE
l_html := l_html || '
<td class="sigdetails">'|| l_cell_text || '</td>';
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error when populating table data for signature: ' || p_sig_id);
END;
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END LOOP;
l_html := l_html || '
</tr>';
print_out(expand_links(l_html));
END LOOP;
-- End of results and footer
l_step := '180';
l_html := '
</tbody>
</table>
</div> <!-- end table data -->';
l_step := '190';
print_out(l_html);
--
ELSE -- there are children signatures
-- Print master rows and call appropriate processes for the children
-- Table header
l_html := '
<!-- table that includes the SQL results (data) -->
<div class="divtable">';
l_html := l_html || '
<table class="table1 data tabledata" id="restable_'||l_current_sig||'" style="display:none">';
-- Keep the id of the parent signature to use as anchor in the table of contents
-- g_parent_sig_id := l_current_sig;
-- Row values
l_step := '200';
FOR i IN 1..l_rows_fetched LOOP
l_step := '200.1'||to_char(i);
-- Column headings printed for each row
l_html := l_html || '
<tr class="'||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||'">';
FOR j IN 1..p_col_headings.count LOOP
l_step := '200.2'||to_char(j);
IF upper(nvl(p_col_headings(j),'XXX')) not like '##$$FK_$$##' THEN
l_html := l_html || '
<th bgcolor="#f2f4f7" class="sigdetails '||l_current_sig||'">'||nvl(p_col_headings(j),' ')||'</th>';
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END LOOP;
l_step := '200.3';
l_html := l_html || '
</tr>';
-- Print headers
print_out(expand_links(l_html));
-- Print a row
l_html := '
<tr class="tdata '||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result||'">';
l_printing_cols := 0;
FOR j IN 1..p_col_headings.count LOOP
l_step := '200.4'||to_char(j);
l_curr_col := upper(p_col_headings(j));
l_curr_val := p_col_rows(j)(i);
-- If the col is a FK set the global replacement vals
IF l_curr_col like '##$$FK_$$##' THEN
l_step := '200.5';
g_sql_tokens(l_curr_col) := l_curr_val;
ELSE -- printable column
l_printing_cols := l_printing_cols + 1;
-- Evaluate if necessary
l_row_fail := false;
IF nvl(l_column,'&&&') = l_curr_col THEN
l_step := '200.6'||
substr('['||l_operand||']['||l_value||']['||l_curr_val||']',1,96);
l_row_fail := evaluate_rowcol(l_operand, l_value, l_curr_val);
END IF;
-- Encode blanks as HTML space if this analyzer is set so by g_preserve_trailing_blanks
-- this ensures trailing blanks added for padding are honored by browsers
-- affects only printing, DX summary handled separately
IF g_preserve_trailing_blanks THEN
l_curr_Val := RPAD(RTRIM(l_curr_Val,' '),
-- pad length is the number of spaces existing times the length of => 6
(length(l_curr_Val) - length(RTRIM(l_curr_Val,' '))) * 6 + length(RTRIM(l_curr_Val,' ')),
' ');
ELSE
l_curr_Val := RTRIM(l_curr_Val, ' ');
END IF;
-- Print
DECLARE
l_cell_text VARCHAR2(1024) := '';
BEGIN
IF (g_dest_to_source.EXISTS(p_sig_id)) AND (g_dest_to_source(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_dest_to_source(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a class="anchor" id="'|| g_dest_to_source(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
ELSIF (g_source_to_dest.EXISTS(p_sig_id)) AND (g_source_to_dest(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_source_to_dest(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a href="" siglink="'|| g_source_to_dest(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
l_cell_text := l_cell_text || '<span class="brokenlink" style="display:none;" title="This record does no have a parent"></span>';
ELSE
l_cell_text := l_curr_val;
END IF;
IF l_row_fail THEN
l_html := l_html || '
<td class="hlt sigdetails">'|| l_cell_text || '</td>';
ELSE
l_html := l_html || '
<td class="sigdetails">'|| l_cell_text || '</td>';
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error when populating table data for signature: ' || p_sig_id);
END;
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END LOOP;
l_html := l_html || '
</tr>';
print_out(expand_links(l_html));
l_html := null;
FOR k IN p_sig.child_sigs.first..p_sig.child_sigs.last LOOP
print_out('
<tr><td colspan="'||to_char(l_printing_cols)||'"><blockquote>');
DECLARE
l_col_rows COL_LIST_TBL := col_list_tbl();
l_col_hea VARCHAR_TBL := varchar_tbl();
l_child_sig SIGNATURE_REC;
l_result VARCHAR2(1);
BEGIN
l_child_sig := g_signatures(p_sig.child_sigs(k));
print_log('Processing child signature: '||p_sig.child_sigs(k));
run_sig_sql(l_child_sig.sig_sql, l_col_rows, l_col_hea, l_child_sig.limit_rows);
l_class_string := p_class_string || ' ' || l_current_sig;
l_result := process_signature_results(p_sig.child_sigs(k), l_child_sig, l_col_rows, l_col_hea, l_current_sig, p_sig_suffix || '_' || to_char(i), l_class_string);
set_item_result(l_result);
-- show parent signature failure based on result from child signature(s)
IF l_result in ('W','E') THEN
l_fail_flag := true;
IF l_result = 'E' THEN
l_error_type := 'E';
ELSIF (l_result = 'W') AND ((l_error_type is NULL) OR (l_error_type != 'E')) THEN
l_error_type := 'W';
END IF;
g_family_result := l_error_type;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error processing child signature: '||p_sig.child_sigs(i));
print_log('Error: '||sqlerrm);
--CG raise;
print_out('
</blockquote></td></tr>');
goto end_loop;
END;
print_out('
</blockquote></td></tr>');
<<end_loop>>
NULL;
END LOOP;
END LOOP;
--l_sig_fail := (l_sig_fail OR l_fail_flag);
-- End of results and footer
l_step := '210';
l_html := l_html || '
</tbody>
</table>
</div> <!-- end table data -->';
print_out(l_html);
END IF; -- master or child
END IF; -- print output is true
-------------------------------------
-- Print actions for each signature
-------------------------------------
IF l_sig_fail THEN
l_step := '230';
IF p_sig.fail_type = 'E' THEN
l_html := '
<div class="divuar results data print section fullsection">
<span class="divuar1">Error: </span>'||prepare_text(p_sig.problem_descr);
ELSIF p_sig.fail_type = 'W' THEN
l_html := '
<div class="divwarn results data print section fullsection">
<span class="divwarn1">Warning: </span>'||prepare_text(p_sig.problem_descr);
ELSE
l_html := '
<div class="divok results data print section fullsection">
<span class="divok1">Information: </span>'||prepare_text(p_sig.problem_descr);
END IF;
-----------------------------------------------------
-- Print solution part of the action - only if passed
-----------------------------------------------------
l_step := '240';
IF p_sig.solution is not null THEN
l_html := l_html || '
<br><br><span class="solution">Findings and Recommendations:</span><br>
' || prepare_text(p_sig.solution);
END IF;
-- Close div here cause success div is conditional
l_html := l_html || '
</div> <!-- end results div -->';
ELSE
l_step := '250';
IF p_sig.success_msg is not null THEN
IF p_sig.fail_type = 'I' THEN
l_html := '
<div class="divok results data print section fullsection"><div class="divok1">Information:</div>'||
prepare_text(nvl(p_sig.success_msg, 'No instances of this problem found')) ||
'</div> <!-- end results div -->';
ELSE
l_html := '
<div class="divok results data print section fullsection"><div class="divok1"><span class="check_ico"></span> All checks passed.</div>'||
prepare_text(nvl(p_sig.success_msg,
'No instances of this problem found')) ||
'</div> <!-- end results div -->';
END IF;
ELSE
l_html := null;
END IF;
END IF;
-- DIV for parent
IF p_sig.child_sigs.count > 0 and (p_parent_id IS NULL) THEN
IF g_family_result = 'E' THEN
l_html := l_html || '
<div class="divuar results data print section fullsection"><span class="divuar1">Error:</span> There was an error reported in one of the child checks. Please expand the section for more information.</div>';
ELSIF g_family_result = 'W' THEN
l_html := l_html || '
<div class="divwarn results data print section fullsection"><span class="divwarn1">Warning:</span> There was an issue reported in one of the child checks. Please expand the section for more information.</div>';
END IF;
END IF;
-- if p_parent_id is null, this is not a child sig (it's a first level signature)
IF (p_parent_id IS NULL) THEN
IF (g_family_result = 'E' or g_family_result = 'W') THEN
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result := g_family_result;
END IF;
-- increment the global counter and the section counter for the fail_type
DECLARE
l_result VARCHAR2(1);
BEGIN
l_result := g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result;
g_results(l_result) := g_results(l_result) + 1;
g_sec_detail(g_sec_detail.LAST).results(l_result) := g_sec_detail(g_sec_detail.LAST).results(l_result) + 1;
END;
END IF;
-- print the result div of the sig container
l_html := l_html || '
<div style="display:none" class="sigrescode '||l_current_section||' '||l_current_sig||' '|| p_class_string || ' ' || g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result||'" level="'||to_char(g_level)||'"></div>
';
l_html := l_html || '
</div> <!-- end of sig container -->
<!-- '||l_current_sig||'-->';
-- Increment the print count for the section
l_step := '260';
g_sections(g_sections.last).print_count :=
g_sections(g_sections.last).print_count + 1;
-- Print
l_step := '270';
print_out(expand_links(l_html));
g_level := g_level - 1;
IF l_sig_fail THEN
l_step := '280';
return p_sig.fail_type;
ELSE
l_step := '290';
IF p_sig.fail_type = 'I' THEN
return 'I';
ELSE
return 'S';
END IF;
END IF;
EXCEPTION
WHEN L_INV_PARAM THEN
print_log('Invalid parameter error in process_signature_results at step '
||l_step);
raise;
WHEN OTHERS THEN
print_log('Error in process_signature_results at step '||l_step);
g_errbuf := l_step;
raise;
END process_signature_results;
----------------------------------------------------------------
-- Start the main section --
-- (where the sections and signatures reside) --
----------------------------------------------------------------
PROCEDURE start_main_section is
BEGIN
print_out('
<!-- start body --->
<div class="body background">
<div style="min-height:75px;">
</div>
<!-- main data screen (showing section and signatures) -->
<div class="maindata print analysis section fullsection">
<div style="min-height:10px;">
</div>
<div class="sigcontainer background">
<div class="containertitle"></div>
<table class="background" style="width:100%;border-spacing:0;border-collapse:collapse;">
<tr>
<td class="leftcell data section background"> <!-- Start menu on the left hand side -->
<div class="sectionmenu background" id="sectionmenu">
</div>
</td>
<!-- Cell that includes the signature details -->
<td class="rightcell analysis print section fullsection">
<div class="sigcontainer" style="padding:20px;margin:0;">
<div class="searchbox data analysis print section fullsection">
<div style="float:left"><b>Search within tables:</b></div><br>
<div style="float:left"><input type="text" class="search" placeholder="Enter search string and press <enter>" id="search" size="96" maxlength="96"></div><br>
</div><br><br>
<div class="expcoll data analysis print section fullsection">
<input type="checkbox" class="data print" id="exportAll">
<a class="detailsmall print data exportAllImg" href="javascript:;" onclick=''export2CSV("ALL")''><span class="export_ico" title="Export to Excel (.csv)" alt="Export to .csv"></span></a>
<a class="detailsmall export2Txt data fullsection" id="export2TextLink" href="javascript:;" onclick=''export2PaddedText("")''><span class="export_txt_ico" title="Export to .txt" alt="Export to .txt"></span></a>
<a href="#" class="detailsmall fullsection data print analysis" id="expandall" mode="analysis"><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAIAAAC0D9CtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABJSURBVDhPY/iPCb4+PHcYAs49/AoVQwbY9Ly5DtVy+PD1N1AxZDCqB6QHEbLEAFDoMyCbSgwA2kyePZhgaIc1JqCXHvz55/9/AOHlG7kyGtrjAAAAAElFTkSuQmCC" alt="expand_all" title="Expand All"></a>
<a href="#" class="detailsmall collapseall data print analysis fullsection"><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAIAAAC0D9CtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA5SURBVDhPY/hPOhjVQ6Gerw/PHcYOrr+BKoEBuJ4316FKMABuPTjtOffwK1QJDNA9DEgAw0vP//8AQDNN42uQJrwAAAAASUVORK5CYII=" alt="collapse_all" title="Collapse All"></a>
<div style="float:left;" id ="showhidesection" mode="show">
<a href="#" class="detailsmall data section sectionview" mode="show" id="showAll" open-sig-class=""><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAARCAYAAAC4qX7BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAACgSURBVEhL7dQhD4MwFATgo44iQaM3CXo/Hw0SLOhNtsiug5cABZK+hSxZ0s+UZy5njshYOKIHNPUANR0J8rJALqfDHyND0Ls3agr4UNAjfXIwMs6L/Fgo4gpFXJFRvVkmxkWTxHqmXHOG2E6MiyZ5QYZALG2nbyWQsX0uyDj/s746VO2TDiC7P3BL6fDFyAircYUirj8ospkkzZTLOwN4A9NoQux1kQrNAAAAAElFTkSuQmCC" alt="show_all" title="Show entire section"></a>
<a href="#" class= "detailsmall data fullsection sectionview" mode="hide" id="hideAll" open-sig-class=""><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAARCAYAAAAsT9czAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAABhSURBVEhLY/wPBAx0AkxQmi5g1DKqgOFrGVLS/8bw6Pw5hkdfITysQESTwUZDGMohVT2Kz74zfMOnEQOQqh7FMk4GLm4oEwfg5uKEskCAVPUowUh7MJr0qQJGLaMCYGAAAO+CHlBVVEZnAAAAAElFTkSuQmCC" alt="hide_all" title="Hide All"></a>
</div>
</div>
<br><br>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in start_main_section: '||sqlerrm);
raise;
END start_main_section;
PROCEDURE end_main_section IS
l_html VARCHAR2(32767) := '';
BEGIN
print_out('
</div> <!-- end of inner container -->
</td>
</tr>
</table>
</div> <!-- end of outer container -->
<div style="min-height: 35;"></div>
</div>');
--CG Populate the sectionmenu details here, because we need the signature results
print_out('<script>');
FOR i IN 1 .. g_sec_detail.COUNT LOOP
FOR j IN 1 .. g_sec_detail(i).sigs.COUNT LOOP
-- in case of customizations, the global signatures table might not be populated correctly, so we might encounter a "no data found" exception.
BEGIN
l_html := ' <div class="sectionbutton data '||replace_chars(g_sec_detail(i).name)||' '||nvl(g_sec_detail(i).sigs(j).sig_id, 'null')||' '||nvl(g_sec_detail(i).sigs(j).sig_result, 'I')||'" open-sig="'||g_sec_detail(i).sigs(j).sig_id||'"> <span class="'||g_result(nvl(g_sec_detail(i).sigs(j).sig_result, 'I'))||'_small"></span><span style="padding:5px;">'||prepare_text(g_signatures(g_sec_detail(i).sigs(j).sig_name).title)||'</span> </div>';
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_html := ' <div class="sectionbutton data '||replace_chars(g_sec_detail(i).name)||' '||nvl(g_sec_detail(i).sigs(j).sig_id, 'null')||' '||nvl(g_sec_detail(i).sigs(j).sig_result, 'I')||'" open-sig="'||g_sec_detail(i).sigs(j).sig_id||'"> <span class="'||g_result(nvl(g_sec_detail(i).sigs(j).sig_result, 'I'))||'_small"></span><span style="padding:5px;">' || g_sec_detail(i).sigs(j).sig_name || '</span> </div>';
WHEN OTHERS THEN
raise;
END;
print_out('
$("#sectionmenu").append('''||l_html||''');');
END LOOP;
END LOOP;
print_out('</script>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in end_main_section: '||sqlerrm);
raise;
END end_main_section;
----------------------------------------------------------------
-- Creates a report section --
-- For now it just prints html, in future it could be --
-- smarter by having the definition of the section logic, --
-- signatures etc.... --
----------------------------------------------------------------
PROCEDURE start_section(p_sect_title VARCHAR2, p_sect_name VARCHAR2 DEFAULT '') IS
lsect section_rec;
l_sig_array signatures_tbl := signatures_tbl();
BEGIN
g_sections(g_sections.count + 1) := lsect;
-- add element in the sections table
g_sec_detail.extend();
IF (p_sect_name != '') THEN
g_sec_detail(g_sec_detail.LAST).name := p_sect_name;
ELSE
g_sec_detail(g_sec_detail.LAST).name := p_sect_title;
END IF;
g_sec_detail(g_sec_detail.LAST).title := p_sect_title;
g_sec_detail(g_sec_detail.LAST).sigs := l_sig_array;
-- initialize the results hash for section
g_sec_detail(g_sec_detail.LAST).results('E') := 0;
g_sec_detail(g_sec_detail.LAST).results('W') := 0;
g_sec_detail(g_sec_detail.LAST).results('S') := 0;
g_sec_detail(g_sec_detail.LAST).results('I') := 0;
EXCEPTION WHEN OTHERS THEN
print_log('Error in start_section: '||sqlerrm);
raise;
END start_section;
PROCEDURE start_sig(p_sig_name varchar2) is
BEGIN
g_sec_detail(g_sec_detail.LAST).sigs.extend();
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_name := p_sig_name;
EXCEPTION WHEN OTHERS THEN
print_log('Error in start_sig: '||sqlerrm);
raise;
END start_sig;
----------------------------------------------------------------
-- Finalizes a report section --
-- Finalizes the html --
----------------------------------------------------------------
-- CG to be removed from the AB
PROCEDURE end_section (
p_success_msg IN VARCHAR2 DEFAULT 'All checks passed.') IS
l_loop_count NUMBER;
BEGIN
print_log ('End Section');
END end_section;
----------------------------------------------------------------
-- Creates a report sub section --
-- workaround for now in future normal sections should --
-- support nesting --
----------------------------------------------------------------
PROCEDURE print_rep_subsection(p_sect_title varchar2) is
BEGIN
print_out('<div class="divSubSection"><div class="divSubSectionTitle">' ||
p_sect_title || '</div><br>');
END print_rep_subsection;
PROCEDURE print_rep_subsection_end is
BEGIN
print_out('</div><br>');
END print_rep_subsection_end;
-----------------------------------------------
-- Diagnostic specific functions and procedures
-----------------------------------------------
----------------------------------------------------------------
-- Creates a Temperature Gauge Graph --
-- Used to show how healthy the current data is --
----------------------------------------------------------------
PROCEDURE show_data_gauge IS
begin
print_out('<div class="data sigcontainer signature CP_ENV ' || g_sec_detail(g_sec_detail.COUNT).name || ' I section print analysis" level="1" id="CP_ENV" style="display: none;">');
print_out('<table border="1" name="NoteBox" cellpadding="10" bordercolor="#C1A90D" bgcolor="#FEFCEE" cellspacing="0">');
print_out('<tbody><tr><td>');
if (g_reqid_cnt > g_max_vol) THEN -- This is the critical setting which customers can adjust here
print_out('<b>Concurrent Processing (1)Runtime Data Gauge</b><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=300x150&cht=gm&chd=t:10&chl=Excessive" width="300" height="150" alt="" />');
print_out('</td>');
else if (g_reqid_cnt > g_min_vol) THEN -- This is the bad setting which customers can adjust here.
print_out('<b>Concurrent Processing (2)Runtime Data Gauge</b><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=300x150&cht=gm&chd=t:50&chl=Poor" width="300" height="150" alt="" />');
print_out('</td>');
else
print_out('<b>Concurrent Processing (3)Runtime Data Gauge</b><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=300x150&cht=gm&chd=t:90&chl=Healthy" width="300" height="150" alt="" />');
print_out('</td>');
end if;
end if;
print_out('<td>');
print_out(' This Runtime Data Gauge is adjustable for your site by entering your own settings for the g_reqid_cnt variable in cp_analyzer.sql:<BR>');
print_out(' 1. Change the following for the immediate review setting (critical): ''(g_reqid_cnt > 5000)''.<br>');
print_out(' 2. Change the following for the review required setting (bad): ''(g_reqid_cnt > 3500)''.');
print_out('</td></tr></tbody> ');
print_out('</table>');
print_out('</div>');
--BILL ADD -> replace signature id and name as needed
g_sec_detail(g_sec_detail.COUNT).sigs.extend();
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_id := 'CP_ENV';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_name := 'COncurrent Processing Charts';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_result := 'I';
--END BILL ADD
END show_data_gauge;
----------------------------------------------------------------
-- Creates a Bar Chart for WF Runtime Data & --
-- a Gauge Graphic to indicate the amount of OLD data found --
----------------------------------------------------------------
PROCEDURE show_gauge_chart IS
clsd_index number;
open_index number;
year_index number;
emesg VARCHAR2(250);
begin
print_log(' Processing Procedure: show_gauge_chart');
select min(to_char(actual_start_date, 'YYYY')) into beginmin
from fnd_concurrent_requests;
select max(to_char(sysdate, 'YYYY')) into beginmax
from wf_items;
clsd_index := beginmin;
Select max(nvl(Count(request_id),0)) into maxitems
From fnd_concurrent_requests
where PHASE_CODE = 'C'
Group By To_Char(actual_start_date, 'YYYY')
order by To_Char(actual_start_date, 'YYYY');
--BILL ADD -> For a different signature id, change CP_REQS with the sig id (replace spaces by _ and : by -)
print_out('<div class="data sigcontainer signature CP_REQS ' || g_sec_detail(g_sec_detail.COUNT).name || ' I section print analysis" level="1" id="CP_REQS" style="display: none;">');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.common.min.css" />');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.default.min.css" />');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.dataviz.min.css" />');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.dataviz.default.min.css" />');
print_out('');
print_out(' <script src="http://cdn.kendostatic.com/2014.3.1316/js/jquery.min.js"></script>');
print_out(' <script src="http://cdn.kendostatic.com/2014.3.1316/js/kendo.all.min.js"></script>');
print_out(' <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.9.1/jquery.tablesorter.min.js"></script>');
print_out('<div id="container">');
print_out('<table border="0" cellpadding="0" cellspacing="0" width="100%">');
print_out('<tr>');
print_out('<td width="50%" align="center">');
print_out('<h3>FND_CONCURRENT_REQUESTS Runtime Data by Year</h3>');
print_out('</td>');
print_out('<td width="50%">');
print_out('<h3>Concurrent Processing Runtime Data Volume Gauge</h3>');
print_out('</td>');
print_out('</tr>');
print_out('<tr>');
print_out('<td width="50%">');
print_out('<div id="chart" style="width: 600px; height: 250px; float: left; vertical-align: top; margin: 5px 5px 5px 15px; ">');
print_out('<script>');
print_out('function createChart() {$("#chart").kendoChart({');
print_out('legend: {position: "top",visible: true},');
print_out('seriesDefaults: {type: "column",stack: true},');
print_out('series: [{name: "Closed",');
print_out('data: [');
WHILE clsd_index <= beginmax
LOOP
BEGIN
/* Loop thru the CLOSED items by year */
select nvl(count(request_id),0) into cls_cnt
from fnd_concurrent_requests
where to_char(actual_start_date,'YYYY')=clsd_index
--and r.phase_code = 'C'
and actual_completion_date is not null;
print_out(cls_cnt,'N');
if (clsd_index = beginmax) then
print_out('],','N');
else
print_out(',','N');
end if;
clsd_index:=clsd_index+ 1;
EXCEPTION
WHEN OTHERS
THEN
clsd_index:=clsd_index+ 1;
END;
END LOOP;
print_out('color: "#4D89F9"}, {name: "Open",data: [');
open_index := beginmin;
WHILE open_index <= beginmax
LOOP
BEGIN
/* Loop thru the OPEN items by year */
select nvl(count(request_id),0) into cls_cnt
from fnd_concurrent_requests
where to_char(actual_start_date,'YYYY')=open_index
and actual_completion_date is null;
print_out(cls_cnt,'N');
if (open_index=beginmax) then
exit;
else
print_out(',','N');
end if;
open_index:=open_index+ 1;
EXCEPTION
WHEN OTHERS
THEN
open_index:=open_index+ 1;
END;
END LOOP;
print_out('],color: "#C6D9FD"}],valueAxis: {max: '||maxitems||',');
print_out('labels: {format: "{0}"},');
print_out('line: {visible: false},');
print_out('minorGridLines: {visible: true}},');
print_out('categoryAxis: {categories: [');
year_index := beginmin;
WHILE year_index <= beginmax
LOOP
BEGIN
/* Build the labels by year */
print_out(year_index,'N');
if (year_index=beginmax) then
exit;
else
print_out(',','N');
end if;
year_index:=year_index+ 1;
EXCEPTION
WHEN OTHERS
THEN
year_index:=year_index+ 1;
END;
END LOOP;
print_out('],majorGridLines: {visible: false}},');
print_out('tooltip: {visible: true,template: "#= series.name #: #= value #"}});}');
print_out('$(document).ready(createChart);$(document).bind("kendo:skinChange", createChart);');
print_out('</script>');
print_out('<script>');
print_out('//------------------------------------------------------------------');
print_out('// This function will expand and contract selected text for individual sections.');
print_out('//------------------------------------------------------------------');
print_out('function showDetails(divID) {');
print_out(' if (document.getElementById("detailImg"+divID).value == ''+'') {');
print_out(' document.getElementById("detailImg"+divID).value = ''-'';');
print_out(' document.getElementById("detailTxt"+divID).style.display = ''block'';');
print_out(' } else {');
print_out(' document.getElementById("detailImg"+divID).value = ''+'';');
print_out(' document.getElementById("detailTxt"+divID).style.display = ''none'';');
print_out(' }');
print_out('}');
print_out('//------------------------------------------------------------------');
print_out('// This function will expand text for all expandable sections in the document by clicking the "Show All" button.');
print_out('//------------------------------------------------------------------');
print_out('function showAllDetails() {');
print_out(' for ( var i=0; i <= max_divID; i++ ) {');
print_out(' if (document.getElementById("detailImg"+i) != null){');
print_out(' if (document.getElementById("detailImg"+i).value == ''+'') {');
print_out(' document.getElementById("detailImg"+i).value = ''-'';');
print_out(' document.getElementById("detailTxt"+i).style.display = ''block'';');
print_out(' }');
print_out(' }');
print_out(' }');
print_out('}');
print_out('//------------------------------------------------------------------');
print_out('// This function will collapse text for all collapsable sections in the document by clicking the "Hide All" button.');
print_out('//------------------------------------------------------------------');
print_out('function hideAllDetails() {');
print_out(' for ( var i=0; i <= max_divID; i++ ) {');
print_out(' if (document.getElementById("detailImg"+i) != null){');
print_out(' if(document.getElementById("detailImg"+i).value == ''-'') {');
print_out(' document.getElementById("detailImg"+i).value = ''+'';');
print_out(' document.getElementById("detailTxt"+i).style.display = ''none'';');
print_out(' }');
print_out(' }');
print_out(' }');
print_out('}');
print_out('</script>');
print_out('</div>');
print_out('</td>');
print_out('<td width="50%">');
print_out('<div id="gauge-graph" display:table-cell; vertical-align:top>');
if (g_reqid_cnt > g_max_vol) THEN -- This is the critical setting which customers can adjust here
print_out('<br><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=400x250&cht=gm&chd=t:10&chl=Excessive" width="400" height="250">');
print_out('</td>');
else if (g_reqid_cnt > g_min_vol) THEN -- This is the bad setting which customers can adjust here.
print_out('<br><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=400x250&cht=gm&chd=t:50&chl=Poor" width="400" height="250">');
print_out('</td>');
else
print_out('<br><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=400x250&cht=gm&chd=t:90&chl=Healthy" width="400" height="250">');
print_out('</td>');
end if;
end if;
print_out('</div></td></tr></table>');
print_out('</div></div>');
--print_out('</div></div><font style="font-size:x-small;">');
-- print_out('<a href="#top"><font color="#0066CC">Back to top</font></a></font><br><br>');
--BILL ADD -> If incorrect replace signature id and name as needed
g_sec_detail(g_sec_detail.COUNT).sigs.extend();
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_id := 'CP_REQS';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_name := 'Concurrent Requests Charts';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_result := 'I';
--END BILL ADD
exception
when others then
emesg := SQLERRM;
print_out(emesg);
END show_gauge_chart;
-------------------------
-- Recommended Patches
-------------------------
FUNCTION check_rec_patches_1 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_1');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,2) = '11' THEN
l_rel := '11i';
l_col_rows(1)(1) := '5472959';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.6.3';
l_col_rows(5)(1) := '[422508.1]';
l_col_rows(1)(2) := '5097966';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'XDO/ORACLE XML PUBLISHER CORE ROLLUP PATCH 5.6.2';
l_col_rows(5)(2) := '[367394.1]';
l_col_rows(1)(3) := '4905678';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.6.1';
l_col_rows(5)(3) := '[357308.1]';
l_col_rows(1)(4) := '4561451';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.6.0';
l_col_rows(5)(4) := '[337999.1]';
l_col_rows(1)(5) := '4236958';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'XDO/ORACLE XML PUBLISHER CORE ROLLUP PATCH 5.0.1';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4206181';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.5.0';
l_col_rows(5)(6) := '[316447.1]';
l_col_rows(1)(7) := '3822219';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.0.0';
l_col_rows(5)(7) := '[295036.1]';
l_col_rows(1)(8) := '3554613';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 4.5.0';
l_col_rows(5)(8) := '[269605.1]';
l_col_rows(1)(9) := '3263588';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := 'Patch 11i.XDO.H';
l_col_rows(5)(9) := '[258332.1]';
END IF;
l_sig.title := 'XDO Suggested Patches for 11i';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'Suggested XDO Patches';
l_sig.solution := 'Suggested XDO Patches';
l_sig.success_msg := 'Suggested XDO Patches';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('XDO_PATCHES') := l_sig;
l_step := '70';
RETURN process_signature_results(
'XDO_PATCHES', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_1');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_1 at step '||l_step);
raise;
END check_rec_patches_1;
FUNCTION check_rec_patches_2 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_2');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,4) = '12.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '20043910';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'November Bundle Patches for TXK Delta 5';
l_col_rows(5)(1) := '[1617461.1]';
END IF;
l_sig.title := 'Suggested Patches on top of TXK Delta 5';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'November Bundle Patches for TXK Delta 5';
l_sig.solution := 'November Bundle Patches for TXK Delta 5';
l_sig.success_msg := 'November Bundle Patches for TXK Delta 5';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_R122') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_R122', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_2');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_2 at step '||l_step);
raise;
END check_rec_patches_2;
FUNCTION check_rec_patches_3 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_3');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17919161';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21236633';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(1) := '[2053709.1]';
l_col_rows(1)(2) := '9239090';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.3 (RUP3)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '8919491';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 Release Update Pack (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6077669';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5917344';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5907545';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '4440000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := '<p>There are recommended Concurrent Processing and Technology Stack patches that are not applied on this '||g_rep_info('Instance')||' instance.</p>';
l_sig.solution := '<ul>
<li>Please review list above and schedule to apply any unappplied recommended Concurrent Processing and Techstack patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li>
</ul>';
l_sig.success_msg := '<b>All known recommended EBS Concurrent Processing and Technology Stack patches for release '||g_rep_info('Apps Version')||' have been applied.</b><br><br>
To get the most current list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.<br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_CU2A') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_CU2A', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_3');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_3 at step '||l_step);
raise;
END check_rec_patches_3;
FUNCTION check_rec_patches_4 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_4');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17919161';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21236633';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(1) := '[2053709.1]';
l_col_rows(1)(2) := '8919491';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 Release Update Pack (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6077669';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5917344';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5907545';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '4440000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
l_col_rows(1)(10) := '3240000';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU1)';
l_col_rows(5)(10) := '[298352.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'Please check if any of the recommended E-Business Suite CP and Technology Stack patches were not applied in this '||g_rep_info('Apps Version')||' instance';
l_sig.solution := '<b>To get a current accurate list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.</b><br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>
<ul>Above is a short list of recommended CP and Technology Stack patches as of the date this script was written to show you what may or may not be applied on this '||g_rep_info('Instance')||' instance.
<li>Please review the list above and schedule to apply any unappplied patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li></ul>';
l_sig.success_msg := '<b>All known recommended EBS Concurrent Processing and Technology Stack patches for release '||g_rep_info('Apps Version')||' have been applied.</b><br><br>
To get the most current list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.<br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_RUP4A') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_RUP4A', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_4');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_4 at step '||l_step);
raise;
END check_rec_patches_4;
FUNCTION check_rec_patches_5 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_5');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17919161';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21236633';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(1) := '[2053709.1]';
l_col_rows(1)(2) := '9239090';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.3 (RUP3)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '8919491';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6272680';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6077669';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '5917344';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5907545';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4440000';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(7) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
l_col_rows(1)(10) := '3240000';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU1)';
l_col_rows(5)(10) := '[298352.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := '<p>There are recommended Concurrent Processing patches that are not applied on this '||g_rep_info('Instance')||' instance.</p>';
l_sig.solution := '<ul>
<li>Please review list above and schedule to apply any unappplied recommended Concurrent Processing patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li>
</ul>';
l_sig.success_msg := '<p>All recommended Concurrent Processing patches (if any) have been applied.</p>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_RUP6') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_RUP6', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_5');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_5 at step '||l_step);
raise;
END check_rec_patches_5;
FUNCTION check_rec_patches_6 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_6');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.6' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21900901';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.6 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[2114016.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.5' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '19676458';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.5 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[1983050.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '25598741';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '1OFF:12.2.4:RECALCULATE PARAMETERS NOT WORKING FOR REQUEST SETS - FLEX PORTION';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '17919161';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(2) := '[1617458.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[1586214.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[1506669.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '25381217';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'UNABLE TO ADD NEW MESSAGE TYPE FORMS PERSONALIZATION ACTIONS ON TOP PF EXISTING';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '25186394';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'FND Recommended Patch Collection (12/2016)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '22644544';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle E-Business Suite Release 12.1.3+ Recommended Patch Collection 5 [RPC5]';
l_col_rows(5)(1) := '[2152266.1]';
l_col_rows(1)(2) := '21236633';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'Oracle E-Business Suite Release 12.1.3+ Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(2) := '[2053709.1]';
l_col_rows(1)(3) := '9239090';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1.3 (RUP3)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '8919491';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(4) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 Release Update Pack (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6077669';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5917344';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5907545';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '4440000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := '<p>There are recommended Concurrent Processing and Technology Stack patches that are not applied on this '||g_rep_info('Instance')||' instance.</p>';
l_sig.solution := '<ul>
<li>Please review list above and schedule to apply any unappplied recommended Concurrent Processing and Techstack patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li>
</ul>';
l_sig.success_msg := '<b>All known recommended EBS Concurrent Processing and Technology Stack patches for release '||g_rep_info('Apps Version')||' have been applied.</b><br><br>
To get the most current list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.<br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_6');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_6 at step '||l_step);
raise;
END check_rec_patches_6;
FUNCTION check_rec_patches_7 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_7');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,4) = '12.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '24578455';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'REVERT CHANGES MADE TO VALIDATE MANAGED SERVER PORTS OF ALL NODES';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '21841299';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12.AD.C.DELTA.8 PATCH';
l_col_rows(5)(2) := '[1617461.1]';
l_col_rows(1)(3) := '21830810';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.TXK.C.DELTA.8';
l_col_rows(5)(3) := '[1617461.1]';
l_col_rows(1)(4) := '20784380';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.TXK.C.delta.7 (Superseded by 21830810)';
l_col_rows(5)(4) := '[1617461.1]';
l_col_rows(1)(5) := '20745242';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.AD.C.delta.7 (Superseded by 21841299)';
l_col_rows(5)(5) := '[1617461.1]';
l_col_rows(1)(6) := '17919161';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.2.4 - ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '17020683';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.2.3 - ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '16207672';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'R12.2.2 - ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '24516586';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Fix for Bug 24516586';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '22879584';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'Fix for Bug 22879584';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '22200487';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'E-BUSINESS SUITE: CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '20592764';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'CONSOLIDATED AD IO PATCH FOR EBS PLUGIN 12.1.0.4.0';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '20228512';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '1OFF:12.1.3:18356549:EM_MONITOR USER REQUIRES ACCESS TO TABLES';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '19287203';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'TECHPLAT:CHANGES REQUIRED FOR RELINKING FAILURES ON WIN 2012 R2 WITH VS2013';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '18312333';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ADGENJKY.SH GENERATING CORE DUMP AT THE END OF EXECUTION';
l_col_rows(5)(7) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '22644544';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 5 [RPC5]';
l_col_rows(5)(1) := '[1986065.1]';
l_col_rows(1)(2) := '21236633';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(2) := '[2053709.1]';
l_col_rows(1)(3) := '20203366';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 3 [RPC3] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(3) := '[1986065.1]';
l_col_rows(1)(4) := '19030202';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 2 [RPC2] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(4) := '[1920628.1]';
l_col_rows(1)(5) := '17774755';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 1 [RPC1] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(5) := '[1638535.1]';
l_col_rows(1)(6) := '9239090';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ORACLE E-BUSINESS SUITE 12.1.3 RELEASE UPDATE PACK';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '8919491';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '7651091';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '7307198';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '7303033';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := 'Oracle E-Business Suite 12.1.2 Release Update Pack (RUP2)';
l_col_rows(5)(10) := '';
l_col_rows(1)(11) := '7303030';
l_col_rows(2)(11) := 'No';
l_col_rows(3)(11) := NULL;
l_col_rows(4)(11) := '12.1.1 Maintenance Pack';
l_col_rows(5)(11) := '';
l_col_rows(1)(12) := '6430106';
l_col_rows(2)(12) := 'No';
l_col_rows(3)(12) := NULL;
l_col_rows(4)(12) := 'R12 ORACLE E-BUSINESS SUITE 12.1';
l_col_rows(5)(12) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.0.6' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '22200487';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'E-BUSINESS SUITE: CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '18312333';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'ADGENJKY.SH GENERATING CORE DUMP AT THE END OF EXECUTION';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '16541210';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'ENCOUNTER ORA-12899 WHEN RUNNIJNG PATCH WIZARD';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '16322006';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'TXK CPU fix';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6767273';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'INSTALLING R12.AD.A.DELTA.4 FAILS FOR OFF-CYCLE PRODUCTS';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5938978';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ADMRGPCH ERRORS WITH A "CHARACTER-SET CONVERSION" ERROR ON SUN SOLARIS';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5866902';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ADMERGE.PL IS NOT COPYING THE MSI FILES IN THE MERGED PATCH.';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '5866720';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'CONNECTION ISSUES IN "PATCH APPLICATION ASSISTANT" ON RAC INSTANCE';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '5856453';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := 'QREP120.19:R12 MP(4440000) GETS KILLED WHILE EXECUTING EGOSILDU.SQL';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '5635729';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := 'ADPATCH TO COMPARE FILE VERSIONS FOR TRANSLATION SYNCH. PATCHES';
l_col_rows(5)(10) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.0.6 RELEASE UPDATE PACK (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 RELEASE UPDATE PACK (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6141000';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '12.0.3 Release Update Pack (RUP3)';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '6077669';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5917344';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '5907545';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '5484000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '12.0.2 Release Update Pack (RUP2)';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '5082400';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := '12.0.1 Release Update Pack (RUP1)';
l_col_rows(5)(10) := '';
l_col_rows(1)(11) := '4440000';
l_col_rows(2)(11) := 'No';
l_col_rows(3)(11) := NULL;
l_col_rows(4)(11) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(11) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '24755689';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'E-BUSINESS SUITE: 11I CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '22200487';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'E-BUSINESS SUITE: CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '20592764';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'CONSOLIDATED AD IO PATCH FOR EBS PLUGIN 12.1.0.4.0';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '19725648';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'ADGENJKY.SH GENERATING CORE DUMP AT THE END OF EXECUTION';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '19502890';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'Fix for Bug 19502890';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '19492734';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'Fix for Bug 19492734';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '16322742';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'Fix for Bug 16322742';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '16264433';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Fix for Bug 16264433';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '6241631';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '6047864';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := 'REHOST JOC FIXES (BASED ON JOC 10.1.2.2) FOR APPS 11i';
l_col_rows(5)(10) := '';
l_col_rows(1)(11) := '6008417';
l_col_rows(2)(11) := 'No';
l_col_rows(3)(11) := NULL;
l_col_rows(4)(11) := 'AOL USER RESPONSIBILITY SECURITY FIXES 2b';
l_col_rows(5)(11) := '';
l_col_rows(1)(12) := '5903765';
l_col_rows(2)(12) := 'No';
l_col_rows(3)(12) := NULL;
l_col_rows(4)(12) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(12) := '';
l_col_rows(1)(13) := '5473858';
l_col_rows(2)(13) := 'No';
l_col_rows(3)(13) := NULL;
l_col_rows(4)(13) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(13) := '';
l_col_rows(1)(14) := '5121512';
l_col_rows(2)(14) := 'No';
l_col_rows(3)(14) := NULL;
l_col_rows(4)(14) := 'AOL USER RESPONSIBILITY SECURITY FIXES VERSION 1';
l_col_rows(5)(14) := '';
l_col_rows(1)(15) := '4676589';
l_col_rows(2)(15) := 'No';
l_col_rows(3)(15) := NULL;
l_col_rows(4)(15) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(15) := '';
l_col_rows(1)(16) := '4334965';
l_col_rows(2)(16) := 'No';
l_col_rows(3)(16) := NULL;
l_col_rows(4)(16) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(16) := '';
l_col_rows(1)(17) := '4125550';
l_col_rows(2)(17) := 'No';
l_col_rows(3)(17) := NULL;
l_col_rows(4)(17) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(17) := '';
l_col_rows(1)(18) := '4017300';
l_col_rows(2)(18) := 'No';
l_col_rows(3)(18) := NULL;
l_col_rows(4)(18) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(18) := '';
l_col_rows(1)(19) := '3480000';
l_col_rows(2)(19) := 'No';
l_col_rows(3)(19) := NULL;
l_col_rows(4)(19) := 'ORACLE APPLICATIONS RELEASE 11.5.10.2 MAINTENANCE PACK';
l_col_rows(5)(19) := '';
l_col_rows(1)(20) := '3460000';
l_col_rows(2)(20) := 'No';
l_col_rows(3)(20) := NULL;
l_col_rows(4)(20) := '11.5.10 ORACLE E-BUSINESS SUITE CONSOLIDATED UPDATE 2';
l_col_rows(5)(20) := '';
l_col_rows(1)(21) := '3438354';
l_col_rows(2)(21) := 'No';
l_col_rows(3)(21) := NULL;
l_col_rows(4)(21) := '11i.ATG_PF.H INCLUDE OWF.H';
l_col_rows(5)(21) := '';
l_col_rows(1)(22) := '3262919';
l_col_rows(2)(22) := 'No';
l_col_rows(3)(22) := NULL;
l_col_rows(4)(22) := 'FMWK.H';
l_col_rows(5)(22) := '';
l_col_rows(1)(23) := '3262159';
l_col_rows(2)(23) := 'No';
l_col_rows(3)(23) := NULL;
l_col_rows(4)(23) := 'FND.H INCLUDE OWF.H';
l_col_rows(5)(23) := '';
l_col_rows(1)(24) := '3258819';
l_col_rows(2)(24) := 'No';
l_col_rows(3)(24) := NULL;
l_col_rows(4)(24) := 'OWF.H INCLUDED IN 11.5.10';
l_col_rows(5)(24) := '';
l_col_rows(1)(25) := '3240000';
l_col_rows(2)(25) := 'No';
l_col_rows(3)(25) := NULL;
l_col_rows(4)(25) := '11.5.10 ORACLE E-BUSINESS SUITE CONSOLIDATED UPDATE 1';
l_col_rows(5)(25) := '';
l_col_rows(1)(26) := '3140000';
l_col_rows(2)(26) := 'No';
l_col_rows(3)(26) := NULL;
l_col_rows(4)(26) := 'ORACLE APPLICATIONS RELEASE 11.5.10 MAINTENANCE PACK';
l_col_rows(5)(26) := '';
END IF;
l_sig.title := 'Recommended '||g_rep_info('Apps Version')||' E-Business Suite Technology Stack Patches';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'Please check if any of the recommended E-Business Suite Technology Stack patches were not applied in this '||g_rep_info('Apps Version')||' instance';
l_sig.solution := '<b>To get a current accurate list of recommended EBS product patches that are applied/not applied to your instance, please run Patch Wizard.</b><br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>
<ul>Above is a short list of recommended product patches as of the date this script was written to show you what may or may not be applied on this '||g_rep_info('Instance')||' instance.
<li>Please review the list above and schedule to apply any unappplied patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li></ul><br>';
l_sig.success_msg := '<b>All known recommended EBS product patches, at the time this script was written, for release '||g_rep_info('Apps Version')||' have been applied.<br>
To get the most current list of recommended EBS product patches that are applied/not applied to your instance, please run Patch Wizard.</b><br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_TXK_PATCHES') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_TXK_PATCHES', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_7');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_7 at step '||l_step);
raise;
END check_rec_patches_7;
-------------------------
-- Signatures
-------------------------
PROCEDURE add_signature(
p_sig_id VARCHAR2, -- Unique Signature identifier
p_sig_sql VARCHAR2, -- The text of the signature query
p_title VARCHAR2, -- Signature title
p_fail_condition VARCHAR2, -- 'RSGT1' (RS greater than 1), 'RS' (row selected), 'NRS' (no row selected), '[count(*)] > [0]'
p_problem_descr VARCHAR2, -- Problem description
p_solution VARCHAR2, -- Problem solution
p_success_msg VARCHAR2 DEFAULT null, -- Message on success
p_print_condition VARCHAR2 DEFAULT 'ALWAYS', -- ALWAYS, SUCCESS, FAILURE, NEVER
p_fail_type VARCHAR2 DEFAULT 'W', -- Warning(W), Error(E), Informational(I) is for use of data dump so no validation
p_print_sql_output VARCHAR2 DEFAULT 'RS', -- Y/N/RS - when to print data
p_limit_rows VARCHAR2 DEFAULT 'Y', -- Y/N
p_extra_info HASH_TBL_4K DEFAULT CAST(null AS HASH_TBL_4K), -- Additional info
p_child_sigs VARCHAR_TBL DEFAULT VARCHAR_TBL(),
p_include_in_dx_summary VARCHAR2 DEFAULT 'N') -- This is for AT use so internal only. Set to Y if want signature result to be printed at end of output file in DX Summary section
IS
l_rec signature_rec;
BEGIN
l_rec.sig_sql := p_sig_sql;
l_rec.title := p_title;
l_rec.fail_condition := p_fail_condition;
l_rec.problem_descr := p_problem_descr;
l_rec.solution := p_solution;
l_rec.success_msg := p_success_msg;
l_rec.print_condition := p_print_condition;
l_rec.fail_type := p_fail_type;
l_rec.print_sql_output := p_print_sql_output;
l_rec.limit_rows := p_limit_rows;
l_rec.extra_info := p_extra_info;
l_rec.child_sigs := p_child_sigs;
l_rec.include_in_xml := p_include_in_dx_summary;
g_signatures(p_sig_id) := l_rec;
EXCEPTION WHEN OTHERS THEN
print_log('Error in add_signature procedure: '||p_sig_id);
raise;
END add_signature;
FUNCTION run_stored_sig(p_sig_id varchar2) RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl();
l_col_hea VARCHAR_TBL := varchar_tbl();
l_sig signature_rec;
l_key VARCHAR2(255);
BEGIN
print_log('Processing signature: '||p_sig_id);
-- Get the signature record from the signature table
BEGIN
l_sig := g_signatures(p_sig_id);
EXCEPTION WHEN NO_DATA_FOUND THEN
print_log('No such signature '||p_sig_id||' error in run_stored_sig');
--CG raise;
return 'E';
END;
-- Clear FK values if the sig has children
IF l_sig.child_sigs.count > 0 THEN
l_key := g_sql_tokens.first;
WHILE l_key is not null LOOP
IF l_key like '##$$FK_$$##' THEN
g_sql_tokens.delete(l_key);
END IF;
l_key := g_sql_tokens.next(l_key);
END LOOP;
END IF;
-- Run SQL
run_sig_sql(l_sig.sig_sql, l_col_rows, l_col_hea,
l_sig.limit_rows);
-- Evaluate and print
RETURN process_signature_results(
p_sig_id, -- signature id
l_sig, -- Name/title of signature item
l_col_rows, -- signature SQL row values
l_col_hea); -- signature SQL column names
EXCEPTION WHEN OTHERS THEN
print_log('Error in run_stored_sig procedure for sig_id: '||p_sig_id);
print_log('Error: '||sqlerrm);
print_error('PROGRAM ERROR<br/>
Error for sig '||p_sig_id||' '||sqlerrm||'<br/>
See the log file for additional details');
--CG return null;
return 'E';
END run_stored_sig;
--########################################################################################
-- Beginning of specific code of this ANALYZER
--########################################################################################
----------------------------------------------------------------
--- Validate Parameters ---
----------------------------------------------------------------
PROCEDURE validate_parameters(
p_min_volume IN NUMBER DEFAULT 3500
,p_max_volume IN NUMBER DEFAULT 5000
,p_max_output_rows IN NUMBER DEFAULT 30
,p_debug_mode IN VARCHAR2 DEFAULT 'Y')
IS
l_revision VARCHAR2(25);
l_date_char VARCHAR2(30);
l_instance V$INSTANCE.INSTANCE_NAME%TYPE;
l_apps_version FND_PRODUCT_GROUPS.RELEASE_NAME%TYPE;
l_host V$INSTANCE.HOST_NAME%TYPE;
l_full_hostname VARCHAR2(255);
l_key VARCHAR2(255);
l_system_function_var VARCHAR2(2000);
l_index NUMBER:=1;
l_dbversion V$INSTANCE.VERSION%TYPE;
invalid_parameters EXCEPTION;
l_item_cnt number;
l_cp_status VARCHAR2(15);
l_nodename VARCHAR2(30);
l_cp_start_date DATE;
l_logfile_name VARCHAR2(240);
l_last_update_date DATE;
l_apps_invalid_cnt number;
l_fnd_invalid_cnt number;
l_CU1 varchar2(15);
l_CU2 varchar2(15);
l_RUP4 varchar2(15);
l_RUP6 varchar2(15);
l_run_alone_cnt number := 0;
l_run_alone_now_cnt number := 0;
l_std_mgr VARCHAR2(30);
l_enabled VARCHAR2(1);
l_cache NUMBER(3);
l_exists_val VARCHAR2(2000);
BEGIN
-- Determine instance info
BEGIN
SELECT max(release_name) INTO l_apps_version
FROM fnd_product_groups;
SELECT instance_name, host_name, version
INTO l_instance, l_host, l_dbversion
FROM v$instance;
EXCEPTION WHEN OTHERS THEN
print_log('Error in validate_parameters gathering instance information: '
||sqlerrm);
raise;
END;
BEGIN
SELECT distinct domain
INTO l_full_hostname
FROM (SELECT db_domain AS domain
FROM fnd_databases
UNION ALL
SELECT domain AS domain
FROM fnd_nodes) domains WHERE domains.domain IS NOT NULL and rownum = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_full_hostname := NULL;
WHEN OTHERS THEN
print_log('Error in validate_parameters gathering instance information: '
||sqlerrm);
END;
-- Revision and date values can be populated by RCS
l_revision := rtrim(replace('$Revision: 200.24 $','$',''));
l_revision := ltrim(replace(l_revision,'Revision:',''));
l_date_char := rtrim(replace('$Date: 2017/03/31 09:10:18 $','$',''));
l_date_char := ltrim(replace(l_date_char,'Date:',''));
l_date_char := to_char(to_date(l_date_char,'YYYY/MM/DD HH24:MI:SS'),'DD-MON-YYYY');
-- Create global hash for mapping internal result codes (E, W, S, I) to user friendly result codes (error, warning, successful, information)
g_result('E') := 'error';
g_result('W') := 'warning';
g_result('S') := 'success';
g_result('I') := 'info';
-- Create global hash for report information
g_rep_info('Host') := l_host;
-- the host name might already be fully qualified, need to check if it includes the domain before appending it
IF (l_host LIKE '%.%') THEN
g_rep_info('FullHost') := l_host;
ELSE
g_rep_info('FullHost') := l_host || '.' || l_full_hostname;
END IF;
g_rep_info('Instance') := l_instance;
g_rep_info('DB Version') := l_dbversion;
g_rep_info('Apps Version') := l_apps_version;
g_rep_info('File Name') := 'cp_analyzer.sql';
g_rep_info('File Version') := l_revision;
g_rep_info('Execution Date') := to_char(sysdate,'DD-MON-YYYY HH24:MI:SS');
g_rep_info('Description') := ('The ' || analyzer_title ||' Analyzer ' || '<a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1411723.1" target="_blank">(Note 1411723.1)</a> ' || ' is a self-service health-check script that reviews the overall footprint, analyzes current configurations and settings for the environment and provides feedback and recommendations on best practices. Your application data is not altered in any way when you run this analyzer.');
------------------------------------------------------------------------------
-- NOTE: Add code here for validation to the parameters of your diagnostic
------------------------------------------------------------------------------
g_max_output_rows := nvl(p_max_output_rows,20);
g_debug_mode := nvl(p_debug_mode, 'Y');
-- Validation to verify analyzer is run on proper e-Business application version
-- In case validation at the beginning is updated/removed, adding validation here also so execution fails
IF substr(l_apps_version,1,4) NOT IN ('11.5','12.0','12.1','12.2') THEN
print_log('eBusiness Suite version = '||l_apps_version);
print_log('ERROR: This Analyzer script is compatible for following version(s): 11i,12.0,12.1,12.2');
raise invalid_parameters;
END IF;
-- .log enhancements (ER # 140)
IF NOT g_is_concurrent THEN
print_log('EBS '||'Concurrent Processing'|| ' Analyzer Log File');
print_log('***************************************************************');
print_log('Host: '||g_rep_info('Host'));
print_log('FullHost: '||g_rep_info('FullHost'));
print_log('Instance: '||g_rep_info('Instance'));
print_log('Database version: '||g_rep_info('DB Version'));
print_log('Applications version: '||g_rep_info('Apps Version'));
print_log('Analyzer version: '||g_rep_info('File Version'));
ELSE
print_log('Host: '||g_rep_info('Host'));
print_log('FullHost: '||g_rep_info('FullHost'));
print_log('Instance: '||g_rep_info('Instance'));
print_log('Database version: '||g_rep_info('DB Version'));
print_log('Applications version: '||g_rep_info('Apps Version'));
print_log('Analyzer version: '||g_rep_info('File Version'));
END IF;
debug('begin Additional Code: Additional Validation');
select count(request_id) into l_item_cnt from fnd_concurrent_requests where phase_code='C';
SELECT q.CONCURRENT_QUEUE_NAME "Short Name", q.enabled_flag "Enabled", q.cache_size
into l_std_mgr, l_enabled, l_cache
from apps.fnd_concurrent_queues_vl q
where q.CONCURRENT_QUEUE_NAME = 'STANDARD';
select decode(process_status_code,
'A', 'Active','C', 'Connecting','D', 'Deactiviating','G', 'Awaiting Discovery','K', 'Terminated','M', 'Migrating','P', 'Suspended','R', 'Running','S', 'Deactivated','T', 'Terminating','U', 'Unreachable','Z', 'Initializing'), node_name, process_start_date, logfile_name, last_update_date
into l_cp_status, l_nodename, l_cp_start_date, l_logfile_name, l_last_update_date
from fnd_concurrent_processes
where concurrent_process_id = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = 'FNDICM');
select count(*) into l_apps_invalid_cnt
from dba_objects where status='INVALID'
and owner in ('APPS','APPLSYS','APPLSYSPUB','CTXSYS','PUBLIC','SYS','SYSTEM');
select count(*) into l_fnd_invalid_cnt from dba_objects
where object_name like 'FND%'
and owner in ('APPS','APPLSYS')
and status='INVALID';
select ad_patch.is_patch_applied('11i',-1,3240000) into l_CU1 from dual;
select ad_patch.is_patch_applied('11i',-1,3460000) into l_CU2 from dual;
select ad_patch.is_patch_applied('11i',-1,6435000) into l_RUP4 from dual;
select ad_patch.is_patch_applied('11i',-1,6728000) into l_RUP6 from dual;
select count(p.concurrent_program_name) into l_run_alone_cnt
from fnd_concurrent_programs p
where p.run_alone_flag = 'Y'
and p.enabled_flag = 'Y';
select count(p.concurrent_program_name) into l_run_alone_now_cnt
FROM fnd_concurrent_programs_tl t,
fnd_concurrent_programs p, fnd_application_tl a,
fnd_concurrent_requests r, fnd_languages l,
fnd_user u
WHERE a.application_id = t.application_id
and r.concurrent_program_id = t.concurrent_program_id
and t.concurrent_program_id = p.concurrent_program_id
AND r.nls_language = l.nls_language
AND l.language_code = t.language
AND l.language_code = a.language
AND r.requested_by = u.user_id
and p.run_alone_flag = 'Y';
g_reqid_cnt := l_item_cnt;
g_cp_status := l_cp_status;
g_nodename := l_nodename;
g_cp_start_date := l_cp_start_date;
g_logfile_name := l_logfile_name;
g_last_update_date := l_last_update_date;
g_apps_invalid_cnt := l_apps_invalid_cnt;
g_CU1 := l_CU1;
g_CU2 := l_CU2;
g_RUP4 := l_RUP4;
g_RUP6 := l_RUP6;
g_run_alone_cnt := l_run_alone_cnt;
g_run_alone_now_cnt := l_run_alone_now_cnt;
g_std_mgr := l_std_mgr;
g_enabled := l_enabled;
g_cache := l_cache;
g_min_vol := p_min_volume;
g_max_vol := p_max_volume;
print_log('l_CU1 = '||l_CU1);
print_log('l_CU2 = '||l_CU2);
print_log('g_RUP4 = '||g_RUP4);
print_log('g_RUP6 = '||g_RUP6);
debug('end Additional Code: Additional Validation');
-- Create global hash for parameters. Numbers required for the output order
debug('begin populate parameters hash table');
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Minimum acceptable volume of Concurrent Request data';
g_parameters(g_parameters.LAST).pvalue := p_min_volume;
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Maximum acceptable volume of Concurrent Request data';
g_parameters(g_parameters.LAST).pvalue := p_max_volume;
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Maximum Rows to Display';
g_parameters(g_parameters.LAST).pvalue := p_max_output_rows;
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Debug Mode';
g_parameters(g_parameters.LAST).pvalue := p_debug_mode;
debug('end populate parameters hash table');
-- Print parameters to the log
print_log('Parameter Values');
FOR i IN 1..g_parameters.COUNT LOOP
print_log(to_char(i) || '. ' || g_parameters(i).pname || ': ' || g_parameters(i).pvalue);
END LOOP;
-- Create global hash of SQL token values
debug('begin populate sql tokens hash table');
debug('end populate sql tokens hash table');
l_key := g_sql_tokens.first;
-- Print token values to the log
print_log('SQL Token Values');
WHILE l_key IS NOT NULL LOOP
print_log(l_key||': '|| g_sql_tokens(l_key));
l_key := g_sql_tokens.next(l_key);
END LOOP;
EXCEPTION
WHEN INVALID_PARAMETERS THEN
print_log('Invalid parameters provided. Process cannot continue.');
raise;
WHEN OTHERS THEN
print_log('Error validating parameters: '||sqlerrm);
raise;
END validate_parameters;
---------------------------------------------
-- Load signatures for this ANALYZER --
---------------------------------------------
PROCEDURE load_signatures IS
l_info HASH_TBL_4K;
BEGIN
null;
-----------------------------------------
-- Add definition of signatures here ....
------------------------------------------
debug('begin add_signature: CP2_LONGRPTS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_LONGRPTS',
p_sig_sql => 'SELECT p.user_concurrent_program_name program_name, count(r.request_id),
avg((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) avg_run_time,
min((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) min_run_time,
max((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) max_run_time
from apps.fnd_concurrent_requests r, apps.fnd_concurrent_processes c, apps.fnd_concurrent_queues q,
apps.fnd_concurrent_programs_vl p
where p.concurrent_program_id = r.concurrent_program_id and p.application_id = r.program_application_id
and c.concurrent_process_id = r.controlling_manager and q.concurrent_queue_id = c.concurrent_queue_id
and q.concurrent_queue_name <> ''HIGH_IMPACT''and p.application_id >= 20000 and r.actual_start_date >= sysdate-31
and r.status_code = ''C'' and r.phase_code in (''C'',''G'')
and (nvl(r.actual_completion_date,r.actual_start_date) - r.actual_start_date) * 24 * 60 > 30
and p.user_concurrent_program_name not like ''Gather%Statistics%''
and ((nvl(r.actual_completion_date,r.actual_start_date) - r.actual_start_date) * 24 > 16
or (r.actual_start_date-trunc(r.actual_start_date)) * 24 between 9 and 17
or (r.actual_completion_date-trunc(r.actual_completion_date)) * 24 between 9 and 17)
group by p.user_concurrent_program_name
order by avg((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) desc',
p_title => 'Long Running Reports During Business Hours',
p_fail_condition => 'RS',
p_problem_descr => 'You have Long Running Reports During Business Hours',
p_solution => 'Review the requests listed and confirm if they are intended to run for longer amounts of time.<br>
If the wrong date range is used or a large volume of data exists for the request, a longer run time can be expected.<br>
Monthly, Quarterly, and Yearly requests would typically run longer.<br><br>
Visit the Concurrent Processing Product Information Center (PIC) [1304305.1] for additional performance and setup documentation.',
p_success_msg => 'There does not appear to be any long running requests during business hours.<br>
The intent is to proactively identify requests which could represent potential performance problems.<br><br>
Visit the Concurrent Processing Product Information Center (PIC) [1304305.1] for additional performance and setup documentation.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_LONGRPTS');
debug('begin add_signature: CP1_ENV1');
add_signature(
p_sig_id => 'CP1_ENV1',
p_sig_sql => 'select VARIABLE_NAME, replace(value,'':'',chr(10)) "VALUE"
from FND_ENV_CONTEXT
where CONCURRENT_PROCESS_ID = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = ''FNDICM'')
and VARIABLE_NAME in (''APPLLKOR'',''AF_CLASSPATH'',''AF_JLIB'',''AF_JRE_TOP'',
''AF_LD_LIBRARY_PATH'',''AFJSMARG'',''AFJVAPRG'',''APPLCSF'',''APPLDCP'',
''APPLFENV'',''APPLLOG'',''APPLORB'',''APPLORC'',''APPLOUT'',''APPLPTMP'',
''APPLTMP'',''APPS_JDBC_URL'',''CA_FILEIO_64'',''CLASSPATH'',
''CONTEXT_FILE'',''CONTEXT_NAME'',''DE_DISABLE_PLS_512'',''DISPLAY'',
''EVENT_10932'',''FND_TOP'',''FNDNAM'',''FNDSM_SCRIPT'',''HOSTNAME'',
''LD_LIBRARY_PATH'',''NLS_LANG'',''NLS_NUMERIC_CHARACTERS'',
''ORACLE_HOME'',''PLATFORM'',''PRINTER'',''REPORTS60_PATH'',
''REPORTS_CLASSPATH'',''REPORTS_NO_DUMMY_PRINTER'',''REPORTS_PATH'',
''REPORTS_POST'',''REPORTS_PRE'',''REPORTS_TMP'',''TK_PRINT_STATUS'',
''TK_PRINTER'',''TNS_ADMIN'',''TWO_TASK'',''XDO_TOP'',''XENVIRONMENT'')
order by VARIABLE_NAME',
p_title => 'Concurrent Processing Environment Variables',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the Concurrent Processing Environment Variables',
p_solution => 'Verify the Concurrent Processing Environment Variables',
p_success_msg => 'The Internal Concurrent Manager (ICM) for '||g_nodename||' is "'||g_cp_status||'", and has been running since '||g_cp_start_date||'.<br>
The current Concurrent Manager logs are found :<br>
'||g_logfile_name||'.<br><br>
Refer to [1355735.1] - Difference between APPLPTMP and APPLTMP Directories in EBS',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_ENV1');
debug('begin add_signature: CP2_ELAPSEDHIST');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_ELAPSEDHIST',
p_sig_sql => 'SELECT f.application_short_name "APPLICATION", substr(p.user_concurrent_program_name,1,55) "DESCRIPTION",
substr(p.concurrent_program_name,1,20) "PROGRAM", r.priority "PRIORITY",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "#TIMESRUN",
''<div align="right">''||to_char(round(sum(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "TOTAL|MINS",
''<div align="right">''||to_char(round(avg(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "AVG|MINS",
''<div align="right">''||to_char(round(max(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "MAX|MINS",
''<div align="right">''||to_char(round(min(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "MIN|MINS",
''<div align="right">''||to_char(round(stddev(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "RUN|STHDEV MINS",
''<div align="right">''||to_char(round(stddev(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 1440, 2),''999,999,999,999.99'')||''</div>'' "WAIT|STHDEV MINS",
''<div align="right">''||to_char(round(sum(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 1440, 2),''999,999,999,999.99'')||''</div>'' "#WAITED|MINS",
''<div align="right">''||to_char(round(avg(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 1440, 2),''999,999,999,999.99'')||''</div>'' "AVG|WAIT MINS",
c.request_class_name "TYPE"
from apps.fnd_concurrent_request_class c, apps.fnd_application f, apps.fnd_concurrent_programs_vl p,
apps.fnd_concurrent_requests r
where r.program_application_id = p.application_id and r.concurrent_program_id = p.concurrent_program_id
and r.status_code in (''C'',''G'') and r.phase_code = ''C'' and p.application_id = f.application_id
and r.program_application_id = f.application_id and r.request_class_application_id = c.application_id(+)
and r.concurrent_request_class_id = c.request_class_id(+)
group by c.request_class_name, f.application_short_name, p.concurrent_program_name, p.user_concurrent_program_name, r.priority
order by count(*)',
p_title => 'Elapsed Time History of Concurrent Requests',
p_fail_condition => 'RS',
p_problem_descr => 'This section identifies the total time duration for recently completed requests.',
p_solution => 'The output produced can be cross referenced with the enabled managers and defined workshifts outputs,
for better allocation of requests across the existing managers/workshifts. <br>
For example you can consider assigning quick requests to one manager and/or workshift, and assigning slow requests to another manager and/or workshift. <br>
Requests with varying runtimes can also be moved to their own manager, or remain with the standard manager queue.',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_ELAPSEDHIST');
debug('begin add_signature: CP4_STD_MGR_ENV');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_ENV',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "Manager", a.application_name, v.VARIABLE, v.VALUE
FROM apps.fnd_concurrent_queues_vl q, apps.fnd_application_vl a, FND_CONC_QUEUE_ENVIRON v
WHERE a.application_id = q.application_id
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
and a.application_id = v.CONCURRENT_QUEUE_ID(+)',
p_title => 'Environment',
p_fail_condition => 'NRS',
p_problem_descr => 'Standard Manager is not found.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_ENV');
debug('begin add_signature: CP4_STD_MGR_RULES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_RULES',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Specialization Rules',
p_fail_condition => '[c.include_flag]=[I]',
p_problem_descr => 'Standard Manager has INCLUDES.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_RULES');
debug('begin add_signature: CP4_STD_MGR_WRK_SHIFTS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_WRK_SHIFTS',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "Manager", a.application_name,
p.concurrent_time_period_name "Work Shift", p.description "Description",
qs.min_processes "Processes", qs.service_parameters "Parameter", qs.sleep_seconds "Sleep Seconds"
from apps.fnd_concurrent_queues_vl q, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y''
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Work Shifts',
p_fail_condition => 'NRS',
p_problem_descr => 'Standard Manager is not found.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_WRK_SHIFTS');
debug('begin add_signature: CP4_STD_MGR_DEFINE_R12');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_DEFINE_R12',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "Manager", q.CONCURRENT_QUEUE_NAME "Short Name", q.enabled_flag "Enabled",
a.application_name "Application Name", q.description "Description", decode(q.manager_type,''0'',''Internal Concurrent Manager'',''1'',''Concurrent Manager'', ''2'',''Internal Monitor'', ''3'',''Transaction Manager'', ''4'',''Conflict Resolution Manager'',''5'',''Scheduler/Prereleaser Manager'', ''6'',''Service Manager'') "TYPE", q.DATA_GROUP_ID "Data Group", q.RESOURCE_CONSUMER_GROUP "Consumer Group",
q.cache_size, q.node_name "Primary Node", q.os_queue "Primary System Queue",
q.node_name2 "Second Node", q.os_queue2 "Second System Queue"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Standard Manager Definition',
p_fail_condition => '[q.enabled_flag] <> [Y]',
p_problem_descr => 'Standard Manager is not enabled.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule<br>
"Excluded" is ok. <br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.<br><br>
As per the Oracle E-Business Suite System Administrator''s Guide - Configuration:
"A manager named Standard. The Standard manager accepts any and all requests; it has no specialization. The Standard manager is active all the time; it works 365 days a year, 24 hours a day.<br>
<b>ATTENTION:</b> You should not alter the definition of the Standard concurrent manager. If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs."',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL('CP4_STD_MGR_ENV','CP4_STD_MGR_RULES','CP4_STD_MGR_WRK_SHIFTS'),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_DEFINE_R12');
debug('begin add_signature: CP1_CONC_REQ1');
add_signature(
p_sig_id => 'CP1_CONC_REQ1',
p_sig_sql => 'select ''FND_CONCURRENT_REQUESTS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONCURRENT_REQUESTS
union
select ''FND_RUN_REQUESTS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_RUN_REQUESTS
union
select ''FND_CONC_REQUEST_ARGUMENTS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_REQUEST_ARGUMENTS
union
select ''FND_DUAL'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_DUAL
union
select ''FND_CONCURRENT_PROCESSES'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONCURRENT_PROCESSES
union
select ''FND_CONC_STAT_LIST'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_STAT_LIST
union
select ''FND_CONC_STAT_SUMMARY'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_STAT_SUMMARY
union
select ''FND_ENV_CONTEXT'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_ENV_CONTEXT
union
select ''FND_CONC_PP_ACTIONS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_PP_ACTIONS
union
select ''FND_RUN_REQ_PP_ACTIONS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_RUN_REQ_PP_ACTIONS',
p_title => 'Your overall Concurrent Processing HealthCheck Status is in need of Immediate Review!',
p_fail_condition => 'RS',
p_problem_descr => 'The FND_CONCURRENT_REQUESTS Table has '||to_char(g_reqid_cnt,'999,999,999,999')||' rows of completed runtime data which exceeds the acceptable thresholds that were entered to run this Analyzer.<BR><BR>
This Gauge is merely a simple indicator about volume of completed Concurrent Request runtime data on '||g_rep_info('Instance')||', which can be adjusted when running this Analyzer.<br>
It displays GREEN if less than '||to_char(g_min_vol,'999,999,999,999')||' rows are found, ORANGE if less than '||to_char(g_max_vol,'999,999,999,999')||', and RED if over '||to_char(g_max_vol,'999,999,999,999')||' rows are found.',
p_solution => 'Clean up Concurrent Request Data and move the needle to green by scheduling the <b>FNDCPPUR - <i>Purge Concurrent Request and/or Manager Data</i></b> on a regular basis.
<br><br>
Run these queries to gather more details about all old requests<br>
<blockquote>
<table width="100%" border="0">
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg5" onClick="showDetails(5);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts By Year
<div style="display:none; width: 90%" id="detailTxt5">
<blockquote>
select to_char(actual_start_date,''YYYY'') "STARTED", to_char(actual_completion_date,''YYYY'') "ENDED", <br>
count(request_id) "COUNT" <br>
from fnd_concurrent_requests <br>
where actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by to_char(actual_start_date,''YYYY''), to_char(actual_completion_date,''YYYY'')<br>
order by 1;
</blockquote>
</div></td>
</tr>
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg11" onClick="showDetails(11);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts by Concurrent Program
<div style="display:none; width: 90%" id="detailTxt11">
<blockquote>
select fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY'') "STARTED",<br> to_char(r.actual_completion_date,''YYYY'') "ENDED", count(r.request_id) "COUNT" <br>
from fnd_concurrent_requests r, fnd_concurrent_programs_tl fcp<br>
where r.concurrent_program_id = fcp.concurrent_program_id<br>
and r.actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY''),
to_char(r.actual_completion_date,''YYYY'')<br>
order by 2;
</blockquote>
</div></td>
</tr>
</table>
</blockquote>
For more information please review: <br>
[104282.1] - Concurrent Processing - Purge Concurrent Request and/or Manager Data Program (FNDCPPUR)<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite
',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_CONC_REQ1');
debug('begin add_signature: CP3_CPADV1');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV1',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME "QUEUE NAME", q.USER_CONCURRENT_QUEUE_NAME "USER QUEUE NAME",
a.application_short_name "MODULE", q.cache_size "CACHE", p.concurrent_time_period_name "TIME PERIOD",
qs.min_processes "MIN PROCESSES", qs.max_processes "MAX PROCESSES", qs.sleep_seconds "SLEEP SECS"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y''
and nvl(q.control_code,''X'') <> ''E''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Concurrent Managers Active/Enabled and Workshifts',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Managers Active/Enabled and Workshifts',
p_solution => 'This section collects the Concurrent Managers that are currently Active and Enabled to process data, and associated with a specific Workshift, and establishes a baseline list of managers defined on your system.
The Workshifts are created to define specific times when a Manager can run requests.<br>
The resulting data is for review and confirmation by your teams, and serves as a baseline for comparison with later outputs above. <br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices.',
p_success_msg => 'This section collects the Concurrent Managers that are currently Active and Enabled to process data, and associated with a specific Workshift, and establishes a baseline list of managers defined on your system.
The Workshifts are created to define specific times when a Manager can run requests.<br>
The resulting data is for review and confirmation by your teams, and serves as a baseline for comparison with later outputs above. <br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV1');
debug('begin add_signature: CP4_STD_MGR_DEFINE_11I');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_DEFINE_11I',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "MANAGER", q.CONCURRENT_QUEUE_NAME "SHORT NAME", q.enabled_flag "ENABLED",
a.application_name "APPLICATION NAME", q.description "DESCRIPTION", decode(q.manager_type,''0'',''Internal Concurrent Manager'',''1'',''Concurrent Manager'', ''2'',''Internal Monitor'', ''3'',''Transaction Manager'', ''4'',''Conflict Resolution Manager'',''5'',''Scheduler/Prereleaser Manager'', ''6'',''Service Manager'') "TYPE", q.DATA_GROUP_ID "DATA GROUP", q.RESOURCE_CONSUMER_GROUP "CONSUMER GROUP",
q.cache_size "CACHE SIZE", q.node_name "PRIMARY NODE", q.os_queue "PRIMARY SYSTEM QUEUE",
q.node_name2 "2ND NODE", q.os_queue2 "2ND SYSTEM QUEUE"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Standard Manager Definition',
p_fail_condition => '[q.enabled_flag] <> [Y]',
p_problem_descr => 'Standard Manager is not enabled.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule<br>
"Excluded" is ok. <br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.<br><br>
As per the Oracle E-Business Suite System Administrator''s Guide - Configuration:
"A manager named Standard. The Standard manager accepts any and all requests; it has no specialization. The Standard manager is active all the time; it works 365 days a year, 24 hours a day.<br>
<b>ATTENTION:</b> You should not alter the definition of the Standard concurrent manager. If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs."',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL('CP4_STD_MGR_RULES','CP4_STD_MGR_WRK_SHIFTS'),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_DEFINE_11I');
debug('begin add_signature: CP3_CPADV2');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV2',
p_sig_sql => 'SELECT f.concurrent_queue_name, f.concurrent_queue_id "CONC QUEUE ID",
f.user_concurrent_queue_name "QUEUE NAME", f.max_processes "MAX", f.running_processes "RUNNING",
DECODE(f.control_code, ''B'',''B=Activated'',''A'',''A=Activating'',''E'',''E=Deactivated'',
''D'',''D=Deactivating'',''R'',''R=Restarting'',''Q'',''Q=Resuming Concurrent Manager'',
''P'',''P=Suspended'',''O'',''O=Suspending Concurrent Manager'',
''H'',''H=System Hold, Fix Manager before resetting counters'',
''N'',''N=Target node/queue unavailable'',''X'',''X=Terminated'',
''T'',''T=Terminating'',''U'',''U=Updating Environment Information'',''V'',''V=Verifying'') "CONTROL CODE",
f.target_node "ACTUAL NODE", f.enabled_flag "ENABLED",
to_char(f.last_update_date,''DD-MON-RR HH24:MI:SS'') "LAST_UPDATE_DATE",
f.node_name "PRIMARY NODE", f.node_name2 "SECONDARY NODE"
FROM fnd_concurrent_queues_vl f
where f.enabled_flag = ''Y''
order by f.application_id, f.concurrent_queue_id',
p_title => 'Concurrent Managers Active/Enabled Overview',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Managers which are Active or Enabled',
p_solution => 'Review the fnd_concurrent_queues_vl view table',
p_success_msg => 'Displays a list of Active Managers',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV2');
debug('begin add_signature: CP1_ORPHANED_PURGE_DATA');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_ORPHANED_PURGE_DATA',
p_sig_sql => 'select ''FND_CONC_REQUEST_ARGUMENTS'' TABLE_NAME,
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT OF ORPHANED REQUEST_IDS" from fnd_conc_request_arguments
where request_id in ((select request_id from fnd_conc_request_arguments)
minus (select request_id from fnd_concurrent_requests))
union
select ''FND_CONC_PP_ACTIONS'' TABLE_NAME,
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT OF ORPHANED REQUEST_IDS" from fnd_conc_pp_actions
where concurrent_request_id in ((select concurrent_request_id from fnd_conc_pp_actions))',
p_title => 'Orphaned Purge Concurrent Data',
p_fail_condition => 'RS',
p_problem_descr => 'There are orphaned concurrent request records found that will not be purged using the concurrent program (FNDCPPUR) - Purge Concurrent Request and/or Manager Data.
',
p_solution => 'This data must have been manually purged but did not include all associated tables which cause the orphaned records identified.<br><br>
To correct the problem deleting FND_CONCURRENT_PROCESSES can cause,
the following SQL Statement may be run on the database:<blockquote>
delete from fnd_conc_request_arguments
where request_id in ((select request_id from fnd_conc_request_arguments)
minus (select request_id from fnd_concurrent_requests));<br><br>
delete from fnd_conc_pp_actions
where concurrent_request_id in ((select concurrent_request_id from fnd_conc_pp_actions)
minus (select request_id from fnd_concurrent_requests));
</blockquote>
For more details, please review :<br>
[104282.1] - Concurrent Processing - Purge Concurrent Request and/or Manager Data Program (FNDCPPUR)',
p_success_msg => 'No Orphaned Concurrent Request Data found.',
p_print_condition => nvl('FAILURE','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_ORPHANED_PURGE_DATA');
debug('begin add_signature: CP2_CURRENTREQS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_CURRENTREQS',
p_sig_sql => 'SELECT w.seconds_in_wait "Secondswait", w.event "waitEvent", w.p1||chr(10)||w.p2||chr(10)||w.p3 "Session Wait",
p.spid||chr(10)||s.process "ServerClient", s.sid||chr(10)||s.serial#||chr(10)||s.sql_hash_value "SidSerialSQLHash",
u.user_name||chr(10)||PHASE_CODE||'' ''||STATUS_CODE||chr(10)||s.status "DBPhaseStatusCODEUser",
Request_id||chr(10)||priority_request_id||chr(10)||Parent_request_id "Request_id",
concurrent_program_name, user_concurrent_program_name,
requested_start_Date||chr(10)||round((sysdate- requested_start_date)*1440, 2)||''M'' "RequestStartDate",
ARGUMENT_TEXT, CONCURRENT_QUEUE_ID, QUEUE_DESCRIPTION
FROM FND_CONCURRENT_WORKER_REQUESTS, fnd_user u, v$session s, v$process p, v$session_wait w
WHERE (Phase_Code=''R'')and hold_flag != ''Y''and Requested_Start_Date <= SYSDATE
AND ('''' IS NULL OR ('''' = ''B'' AND PHASE_CODE = ''R'' AND STATUS_CODE IN (''I'', ''Q'')))and ''1'' in (0,1,4)
and requested_by=u.user_id and s.paddr=p.addr and s.sid=w.sid and oracle_process_id = p.spid
and oracle_session_id = s.audsid
order by requested_start_date',
p_title => 'Requests Currently Running on a System',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Requests currently Running on this instance.',
p_solution => 'This table reflects a summary for all concurrent requests running on the instance with their current state.',
p_success_msg => 'This reflects a summary for all concurrent requests running on the instance with their current state.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_CURRENTREQS');
debug('begin add_signature: EBS_VERSION');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'EBS_VERSION',
p_sig_sql => 'SELECT instance_name, release_name, host_name,
startup_time, version
from fnd_product_groups, v$instance',
p_title => 'E-Business Suite Version',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the EBS Instance Information',
p_solution => '',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: EBS_VERSION');
debug('begin add_signature: CP4_STD_MGR_DEFINE_CACHE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_DEFINE_CACHE',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "MANAGER", q.CONCURRENT_QUEUE_NAME "SHORT NAME", q.enabled_flag "ENABLED",
a.application_name "APPLICATION", q.description "DESCRIPTION", decode(q.manager_type,''0'',''Internal Concurrent Manager'',''1'',''Concurrent Manager'', ''2'',''Internal Monitor'', ''3'',''Transaction Manager'', ''4'',''Conflict Resolution Manager'',''5'',''Scheduler/Prereleaser Manager'', ''6'',''Service Manager'') "TYPE", q.DATA_GROUP_ID "DATA GROUP", q.RESOURCE_CONSUMER_GROUP "CONSUMER GROUP",
q.cache_size "CACHE SIZE", q.node_name "PRIMARY NODE", q.os_queue "PRIMARY SYSTEM QUEUE",
q.node_name2 "2ND NODE", q.os_queue2 "2ND SYSTEM QUEUE"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Standard Manager Cache Size',
p_fail_condition => '[q.cache_size] > [5]',
p_problem_descr => 'Standard Manager Cache Size is set to '||g_cache||'.',
p_solution => 'By setting the cache size at a higher number, the concurrent manager does not have to read its requests list each time it runs a request.<br>However, the manager does not recognize any priority changes you make for a particular request if it has already read that request into its cache. Further, even if you give a higher priority to a new request, that new request must wait until the buffer is empty and the manager returns to look at the requests list. That request may have to wait a long time if you set the buffer size to a high number.<br><br>
You should use cache size to tune your concurrent managers to work most efficiently for you site''s needs. If your organization tends to reprioritize jobs going to a certain manager, that manager should have its buffer size set fairly low.<br><br>
<b>Tip:</b> Enter a value of 1 when defining a manager that runs long, time-consuming jobs, and a value of 3 or 4 for managers that run small, quick jobs."',
p_success_msg => 'Standard Manager Cache Size is set to '||g_cache||'.
<br><br>
According to the "Oracle Applications System Administrator''s Guide - Configuration" Defining Concurrent Managers section : <br>
Release 12 (Part No. B31453-04)<br>
Release 11i (Part No. B13925-06)<br><br>
"Cache Size (Concurrent Manager only)<br>
Enter the number of requests your manager remembers each time it reads which requests to run. For example, if a manager''s workshift has 1 target process and a cache value of 3, it will read three requests and wait until these three requests have been run before reading new requests.
<br><br>
In reading requests, the manager will only put requests it is allowed to run into its cache. For example, if you have defined your manager to run only Order Entry reports then the manager will put only Order Entry requests into its cache.
<br><br>
If you enter 1, the concurrent manager must look at its requests list each time it is ready to process another request.
',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_DEFINE_CACHE');
debug('begin add_signature: CP1_CONC_REQ2');
add_signature(
p_sig_id => 'CP1_CONC_REQ2',
p_sig_sql => 'select to_char(actual_completion_date,''YYYY'') "COMPLETED",
''<div align="right">''||to_char(count(request_id),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests where phase_code=''C''
group by to_char(actual_completion_date,''YYYY'')
order by to_char(actual_completion_date,''YYYY'') desc',
p_title => 'Your overall Concurrent Processing HealthCheck Status is in need of Review!',
p_fail_condition => 'RS',
p_problem_descr => 'The FND_CONCURRENT_REQUESTS Table has '||to_char(g_reqid_cnt,'999,999,999,999')||' rows of completed runtime data which is above the minimum, but below the maximum acceptable thresholds that were entered to run this Analyzer.<BR><BR>
This Gauge is merely a simple indicator about volume of completed Concurrent Request runtime data on '||g_rep_info('Instance')||', which can be adjusted when running this Analyzer.<br>
It displays GREEN if less than '||to_char(g_min_vol,'999,999,999,999')||' rows are found, ORANGE if less than '||to_char(g_max_vol,'999,999,999,999')||', and RED if over '||to_char(g_max_vol,'999,999,999,999')||' rows are found.',
p_solution => 'Clean up Concurrent Request Data and move the needle to green by scheduling the <b>FNDCPPUR - <i>Purge Concurrent Request and/or Manager Data</i></b> on a regular basis.
<br><br>
Run these queries to gather more details about your old requests<br>
<blockquote>
<table width="100%" border="0">
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg5" onClick="showDetails(5);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts By Year
<div style="display:none; width: 90%" id="detailTxt5">
<blockquote>
select to_char(actual_start_date,''YYYY'') "STARTED", to_char(actual_completion_date,''YYYY'') "ENDED", <br>
count(request_id) "COUNT" <br>
from fnd_concurrent_requests <br>
where actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by to_char(actual_start_date,''YYYY''), to_char(actual_completion_date,''YYYY'')<br>
order by 1;
</blockquote>
</div></td>
</tr>
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg11" onClick="showDetails(11);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts by Concurrent Program
<div style="display:none; width: 90%" id="detailTxt11">
<blockquote>
select fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY'') "STARTED",<br> to_char(r.actual_completion_date,''YYYY'') "ENDED", count(r.request_id) "COUNT" <br>
from fnd_concurrent_requests r, fnd_concurrent_programs_tl fcp<br>
where r.concurrent_program_id = fcp.concurrent_program_id<br>
and r.actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY''),
to_char(r.actual_completion_date,''YYYY'')<br>
order by 2;
</blockquote>
</div></td>
</tr>
</table>
</blockquote>
For more information please review: [1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite
',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_CONC_REQ2');
debug('begin add_signature: CP1_ENV2');
add_signature(
p_sig_id => 'CP1_ENV2',
p_sig_sql => 'select VARIABLE_NAME, replace(value,'':'',chr(10)) "VALUE"
from FND_ENV_CONTEXT
where CONCURRENT_PROCESS_ID = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = ''FNDICM'')
and VARIABLE_NAME in (''APPLLKOR'',''AF_CLASSPATH'',''AF_JLIB'',''AF_JRE_TOP'',
''AF_LD_LIBRARY_PATH'',''AFJSMARG'',''AFJVAPRG'',''APPLCSF'',''APPLDCP'',
''APPLFENV'',''APPLLOG'',''APPLORB'',''APPLORC'',''APPLOUT'',''APPLPTMP'',
''APPLTMP'',''APPS_JDBC_URL'',''CA_FILEIO_64'',''CLASSPATH'',
''CONTEXT_FILE'',''CONTEXT_NAME'',''DE_DISABLE_PLS_512'',''DISPLAY'',
''EVENT_10932'',''FND_TOP'',''FNDNAM'',''FNDSM_SCRIPT'',''HOSTNAME'',
''LD_LIBRARY_PATH'',''NLS_LANG'',''NLS_NUMERIC_CHARACTERS'',
''ORACLE_HOME'',''PLATFORM'',''PRINTER'',''REPORTS60_PATH'',
''REPORTS_CLASSPATH'',''REPORTS_NO_DUMMY_PRINTER'',''REPORTS_PATH'',
''REPORTS_POST'',''REPORTS_PRE'',''REPORTS_TMP'',''TK_PRINT_STATUS'',
''TK_PRINTER'',''TNS_ADMIN'',''TWO_TASK'',''XDO_TOP'',''XENVIRONMENT'')
order by VARIABLE_NAME',
p_title => 'Concurrent Processing Environment Variables',
p_fail_condition => 'RS',
p_problem_descr => 'The Concurrent Manager for '||g_nodename||' is "'||g_cp_status||'".',
p_solution => 'The Concurrent Manager was last started on '||g_cp_start_date||', and last updated on '||g_last_update_date||'.<br>
The current Concurrent Manager logs are found :<br>
'||g_logfile_name||'.<br><br>Refer to [1355735.1] - Difference between APPLPTMP and APPLTMP Directories in EBS',
p_success_msg => 'There is a problem identifying the Concurrent Processing Environment Variables for '||g_nodename||'.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_ENV2');
debug('begin add_signature: CP3_CPADV3');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV3',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME "QUEUE NAME", p.concurrent_time_period_name "TIME PERIOD", qs.min_processes "MIN PROCESSES"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id and a.application_id = q.application_id
and qs.queue_application_id = q.application_id and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y'' and nvl(q.control_code,''X'') <> ''E'' and qs.min_processes >0 and i.status <> ''I''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Active Managers for Applications not Installed/Used',
p_fail_condition => 'RS',
p_problem_descr => 'There are Concurrent Managers that are active for Application modules not Installed or Used.',
p_solution => 'These unused managers can impact performance, and deactivating them can reduce current application overhead on the instance.',
p_success_msg => 'There are no Concurrent Managers that are active for Application modules not Installed or Used.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV3');
debug('begin add_signature: CP2_CONCREQTOTALS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_CONCREQTOTALS',
p_sig_sql => 'SELECT decode(phase_code, ''P'', ''Pending requests'',''R'', ''Running requests'',''C'', ''Completed requests'') "PHASE", ''<div align="right">''||to_char(count(request_id),''999,999,999,999'')||''</div>'' "# OF REQUESTS"
FROM fnd_concurrent_requests
GROUP BY phase_code',
p_title => 'FND_CONCURRENT_REQUESTS Totals',
p_fail_condition => 'RS',
p_problem_descr => 'Provides a count of concurrent requests in a state of: Pending, Running, or Completed.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of how often you are purging Concurrent Request tables. <br>
If the total records are too large performance issues can result and FNDCPPUR should be run, otherwise there is no immediate action required.',
p_success_msg => 'There are no concurrent requests in a state of: Pending, Running, or Completed.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_CONCREQTOTALS');
debug('begin add_signature: CP1_INVALIDS_ALL_LOW');
add_signature(
p_sig_id => 'CP1_INVALIDS_ALL_LOW',
p_sig_sql => 'select d.owner, d.object_type, substr(d.object_name,0,3)||''%...'' "OBJECT_NAME", ''<div align="right">''||to_char(count(d.status),''999,999,999,999'')||''</div>'' "COUNT"
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'',''APPLSYSPUB'',''CTXSYS'',''PUBLIC'',''SYS'',''SYSTEM'')
group by d.owner, d.object_type, substr(d.object_name,0,3)
order by 4 desc',
p_title => 'There are '||g_apps_invalid_cnt||' Invalid Objects Found',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_apps_invalid_cnt||' Invalid Objects found in your instance.',
p_solution => 'The above list summarizes quickly what products the INVALID objects belong to.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
We next check if any belong to FND, as this control Concurrent Processing in particular.<br>
Consider running ADADMIN and compiling the entire APPS Schema, or just for the Product in question.<br><br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
Troubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work !!!
There are no invalid objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_ALL_LOW');
debug('begin add_signature: CP1_CONC_REQ3');
add_signature(
p_sig_id => 'CP1_CONC_REQ3',
p_sig_sql => 'select to_char(actual_completion_date,''YYYY'') "COMPLETED", count(request_id) "COUNT"
from fnd_concurrent_requests where phase_code=''C''
group by to_char(actual_completion_date,''YYYY'')
order by to_char(actual_completion_date,''YYYY'') desc',
p_title => 'Your overall Concurrent Processing HealthCheck Status is Healthy!',
p_fail_condition => 'RS',
p_problem_descr => 'The FND_CONCURRENT_REQUESTS Table has '||to_char(g_reqid_cnt,'999,999,999,999')||' rows of completed runtime data which is within acceptable thresholds that were entered to run this Analyzer.<BR><BR>
This Gauge is merely a simple indicator about volume of completed Concurrent Request runtime data on '||g_rep_info('Instance')||', which can be adjusted when running this Analyzer.<br>
It displays GREEN if less than '||to_char(g_min_vol,'999,999,999,999')||' rows are found, ORANGE if less than '||to_char(g_max_vol,'999,999,999,999')||', and RED if over '||to_char(g_max_vol,'999,999,999,999')||' rows are found.',
p_solution => 'Clean up Concurrent Request Data and move the needle to green.<BR>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite.',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_CONC_REQ3');
debug('begin add_signature: CP1_FNDRSRUN');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_FNDRSRUN',
p_sig_sql => 'select app_short_name "TOP", subdir "SUBDIR", filename "FILENAME", version "VERSION"
from (
select *
from ad_files f, ad_file_versions fv
where f.FILE_ID=fv.FILE_ID
and f.FILENAME like ''FNDRSRUN%''
order by fv.version_segment1 desc,
fv.version_segment2 desc, fv.version_segment3 desc,
fv.version_segment4 desc, fv.version_segment5 desc,
fv.version_segment6 desc, fv.version_segment7 desc,
fv.version_segment8 desc, fv.version_segment9 desc,
fv.version_segment10 desc,
fv.translation_level desc)
where rownum = 1',
p_title => 'Identify the version of FNDRSRUN',
p_fail_condition => 'NRS',
p_problem_descr => 'There is no version for FNDRSRUN form.',
p_solution => '',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_FNDRSRUN');
debug('begin add_signature: CP1_ENV3');
add_signature(
p_sig_id => 'CP1_ENV3',
p_sig_sql => 'select VARIABLE_NAME, VALUE
from FND_ENV_CONTEXT
where CONCURRENT_PROCESS_ID = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = ''FNDICM'')
and VARIABLE_NAME in (''APPLLKOR'',''AF_CLASSPATH'',''AF_JLIB'',''AF_JRE_TOP'',
''AF_LD_LIBRARY_PATH'',''AFJSMARG'',''AFJVAPRG'',''APPLCSF'',''APPLDCP'',
''APPLFENV'',''APPLLOG'',''APPLORB'',''APPLORC'',''APPLOUT'',''APPLPTMP'',
''APPLTMP'',''APPS_JDBC_URL'',''CA_FILEIO_64'',''CLASSPATH'',
''CONTEXT_FILE'',''CONTEXT_NAME'',''DE_DISABLE_PLS_512'',''DISPLAY'',
''EVENT_10932'',''FND_TOP'',''FNDNAM'',''FNDSM_SCRIPT'',''HOSTNAME'',
''LD_LIBRARY_PATH'',''NLS_LANG'',''NLS_NUMERIC_CHARACTERS'',
''ORACLE_HOME'',''PLATFORM'',''PRINTER'',''REPORTS60_PATH'',
''REPORTS_CLASSPATH'',''REPORTS_NO_DUMMY_PRINTER'',''REPORTS_PATH'',
''REPORTS_POST'',''REPORTS_PRE'',''REPORTS_TMP'',''TK_PRINT_STATUS'',
''TK_PRINTER'',''TNS_ADMIN'',''TWO_TASK'',''XDO_TOP'',''XENVIRONMENT'')
order by VARIABLE_NAME',
p_title => 'Concurrent Processing Environment Variables',
p_fail_condition => 'RS',
p_problem_descr => 'The Concurrent Manager Environment for '||g_nodename||' may not be available. It is currently in "'||g_cp_status||'" status.',
p_solution => 'Concurrent Manager was last started on '||g_cp_start_date||', and last updated on '||g_last_update_date||'.<br>
The current Concurrent Manager logs are found :<br>
'||g_logfile_name||'.<br><br>Refer to [1355735.1] - Difference between APPLPTMP and APPLTMP Directories in EBS',
p_success_msg => 'There is a problem identifying the Concurrent Processing Environment Variables for '||g_nodename||'.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_ENV3');
debug('begin add_signature: CP4_RUN_ALONE_PROGRAMS2');
add_signature(
p_sig_id => 'CP4_RUN_ALONE_PROGRAMS2',
p_sig_sql => 'SELECT r.request_id "REQ ID", a.application_name "APPLICATION",
t.user_concurrent_program_name "PROGRAM", p.concurrent_program_name "SHORT NAME",
DECODE(p.execution_method_code, ''I'',''PL/SQL Concurrent Program'',''K'',''Java Concurrent Program'',
''P'',''Oracle*Reports Concurrent Program'',''Q'',''SQL*Plus Concurrent Program'') "EXECUTION METHOD",
DECODE(p.queue_method_code,''B'',''B=Yes'',''I'',''I=No'') "QUEUE METHOD", u.user_name "USER",
TO_CHAR(r.requested_start_date, ''DD-MON-RR HH24:MI:SS'') "STARTED",
r.is_sub_request "IS SUB REQUEST",
DECODE(r.PHASE_CODE, ''C'',''Completed'',''I'',''I=Inactive'',''P'',''P=Pending'',''R'',''R=Running'') "PHASE",
DECODE(r.STATUS_CODE, ''A'',''Waiting'',''B'',''B=Resuming'',''C'',''C=Normal'',
''D'',''D=Cancelled'',''E'',''E=Error'',''G'',''G=Warning'',
''H'',''H=On Hold'',''I'',''I=Normal'',''M'',''M=No Manager'',
''P'',''P=Scheduled'',''Q'',''Q=Standby'',''R'',''R=Normal'',
''S'',''S=Suspended'',''T'',''T=Terminating'',''U'',''U=Disabled'',
''W'',''W=Paused'',''X'',''X=Terminated'',''Z'',''Z=Waiting'') "STATUS"
FROM apps.fnd_concurrent_programs_tl t,
apps.fnd_concurrent_programs p, apps.fnd_application_tl a,
apps.fnd_concurrent_requests r,apps.fnd_languages l,
apps.fnd_user u
WHERE a.application_id = t.application_id
and r.concurrent_program_id = t.concurrent_program_id
and t.concurrent_program_id = p.concurrent_program_id
AND r.nls_language = l.nls_language
AND l.language_code = t.language
AND l.language_code = a.language
AND r.requested_by = u.user_id
and p.run_alone_flag = ''Y''',
p_title => 'Run Alone Programs',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_run_alone_cnt||' <strong>Run Alone</strong> Concurrent Programs defined in this '||g_rep_info('Instance')||' instance that are enabled, and currently there are '||g_run_alone_now_cnt||' running or scheduled to run via Concurrent Manager.',
p_solution => 'Concurrent "Run Alone" programs will cause a momentary "Inactive No Manager" and/or "Pending" status, because no program can run while a "Run Alone" program runs.<br><br> Check the above list of program(s) that may be causing any prolonged "Inactive No Manager" state.<br>
The "Run Alone" option should be used very sparingly and only with short / quick running programs, because it blocks all other programs while it is queued / running.
',
p_success_msg => 'There are '||g_run_alone_cnt||' <strong>Run Alone</strong> Concurrent Programs defined in this '||g_rep_info('Instance')||' instance, that are enabled, but currently none being run or scheduled to run via Concurrent Manager.<br><br>
It is possible to define a concurrent program to be "Run-Alone" or to be "Incompatible" with specific concurrent programs by editing the concurrent program''s definition using the
Concurrent Programs window.<br><br>
Program incompatibility and run-alone program definitions are enforced by the Conflict Resolution Manager (CRM).<br>
For more details see: Oracle E-Business Suite System Administrator''s Guide - Configuration - Concurrent Programs, page 6-65.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP4_RUN_ALONE_PROGRAMS2');
debug('begin add_signature: CP3_CPADV4');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV4',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME "QUEUE NAME", q.max_processes "MAX PROCESSES", q.running_processes "RUNNING", q.node_name "NODE1", q.node_name2 "NODE2",
p.concurrent_time_period_name "TIME PERIOD", qs.min_processes "MIN PROCESSES"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id and a.application_id = q.application_id
and qs.queue_application_id = q.application_id and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y'' and nvl(q.control_code,''X'') <> ''E'' and qs.min_processes >0 and q.manager_type = 1
and p.concurrent_time_period_name not in (''Weekend'',''Off-Peak AM'',''Off-Peak PM'')
order by qs.min_processes desc,q.concurrent_queue_name',
p_title => 'Total Target Processes for Request Managers Excluding Off-Hours',
p_fail_condition => 'RS',
p_problem_descr => 'Total Target Processes for Request Managers Excluding Off-Hours<br>
This identifies the total number of processes that can be run for a given concurrent manager. <br>
The greater the number of processes defined can impact increased Concurrent Processing loads. ',
p_solution => 'The resulting data is for review and confirmation by your teams, and serves as a baseline for comparison with later outputs above. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'There are no rows found for Total Target Processes for Request Managers Excluding Off-Hours',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV4');
debug('begin add_signature: CP2_CONCREQS2');
add_signature(
p_sig_id => 'CP2_CONCREQS2',
p_sig_sql => 'SELECT request_id "REQUEST ID", nvl(meaning, ''UNKNOWN'') "STATUS", user_concurrent_program_name "PROGRAM NAME",
to_char(actual_start_date, ''DD-MON-RR HH24:MI:SS'') "STARTED", decode(run_alone_flag, ''Y'', ''Yes'', ''No'') "RUN ALONE"
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv
WHERE phase_code = ''R'' AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code
AND fcr.concurrent_program_id = fcpv.concurrent_program_id AND fcr.program_application_id = fcpv.application_id
ORDER BY actual_start_date, request_id',
p_title => 'Running Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no concurrent requests currently running on this '||g_rep_info('Instance')||' instance.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently running on the system.<br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently running on the system.<br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP2_CONCREQS2');
debug('begin add_signature: CP1_PURGEREQS');
add_signature(
p_sig_id => 'CP1_PURGEREQS',
p_sig_sql => 'SELECT r.REQUEST_ID, u.user_name, r.PHASE_CODE, r.ACTUAL_START_DATE,
c.CONCURRENT_PROGRAM_NAME, p.USER_CONCURRENT_PROGRAM_NAME, r.ARGUMENT_TEXT,
r.RESUBMIT_INTERVAL, r.RESUBMIT_INTERVAL_UNIT_CODE, r.RESUBMIT_END_DATE
FROM fnd_concurrent_requests r, FND_CONCURRENT_PROGRAMS_TL p, fnd_concurrent_programs c, fnd_user u
WHERE r.CONCURRENT_PROGRAM_ID = p.CONCURRENT_PROGRAM_ID and r.requested_by = u.user_id
and p.CONCURRENT_PROGRAM_ID = c.CONCURRENT_PROGRAM_ID
and c.CONCURRENT_PROGRAM_NAME = ''FNDCPPUR''
AND p.language = ''US''
and r.ACTUAL_COMPLETION_DATE is null and r.PHASE_CODE in (''P'',''R'')
order by c.CONCURRENT_PROGRAM_NAME, r.ARGUMENT_TEXT',
p_title => 'Verify Purge and/or Manager Data Programs Scheduled to Run',
p_fail_condition => 'NRS',
p_problem_descr => '<b>There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, but no "Purge Concurrent Request and/or Manager Data" program (FNDCPPUR) scheduled or running</b>',
p_solution => 'Please Review Concurrent Processing purging status with your team.<br><br>
Run the concurrent program "Purge Concurrent Request and/or Manager Data" (FNDCPPUR) with "Entity" parameter as "ALL" for all requests, or for specific requests that have large volumes of purge eligible data as seen above. The last purge of Concurrent Request data completed on No Date info available for VISION.<br>
FNDCPPUR should be scheduled and run on a regular basis to avoid performance issues. Run the query behind the SQL SCRIPT button to get the complete list of purge eligible concurrent request data.<br><br>
Additionally, the following are very good methods to follow for optimizing the process:
<ul><li>Run the job during hours of low workload. Doing this after hours will lessen the contention on the tables from running against your daily processing.</li>
<li>To get the requests under control, run the FNDCPPUR program with Age=20 or Age=18 would be a good method. That means, all requests older than 18 or 20 days will be purged.</li>
<li>Once the requests are under control, run the FNDCPPUR program with Age=7 to maintain an efficient process. This would solely depend on the level of processing that is performed at your site</li></ul>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite<br>
[1095625.1] - Health Check Alert: Purge the eligible records from the FND_CONCURRENT_REQUESTS table<br><br>
<b>Note:</b> This section is only looking at the scheduled jobs in FND_CONCURRENT_REQUESTS table. Jobs scheduled using other tools (DBMS_JOBS, CONSUB, or PL/SQL, etc) are not reflected here, so keep this in mind.',
p_success_msg => '<b>There is a "Purge Concurrent Request and/or Manager Data" program (FNDCPPUR) scheduled or running on '||g_rep_info('Instance')||'.</b><br>
There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, and eligible for purging.<br><br>
Run the query behind the SQL SCRIPT button to get the complete list of purge eligible concurrent request data.<br><br>
Additionally, the following are very good methods to follow for optimizing the "Purge Concurrent Request and/or Manager Data" process:
<ul><li>Run the job during hours of low workload. Doing this after hours will lessen the contention on the tables from running against your daily processing.</li>
<li>To get the requests under control, run the FNDCPPUR program with Age=20 or Age=18 would be a good method. That means, all requests older than 18 or 20 days will be purged.</li>
<li>Once the requests are under control, run the FNDCPPUR program with Age=7 to maintain an efficient process. This would solely depend on the level of processing that is performed at your site</li></ul>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite<br>
[1095625.1] - Health Check Alert: Purge the eligible records from the FND_CONCURRENT_REQUESTS table<br><br>
<b>Note:</b> This section is only looking at the scheduled jobs in FND_CONCURRENT_REQUESTS table. Jobs scheduled using other tools (DBMS_JOBS, CONSUB, or PL/SQL, etc) are not reflected here, so keep this in mind.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_PURGEREQS');
debug('begin add_signature: CP2_PENDREQ');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_PENDREQ',
p_sig_sql => 'SELECT ''Pending'' "PHASE", meaning "STATUS", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "# REQUESTS"
FROM fnd_concurrent_requests, fnd_lookups
WHERE LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code AND phase_code = ''P''
GROUP BY meaning',
p_title => 'Total Pending Requests by Status Code',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Pending Requests currently found on this ''||g_rep_info(''Instance'')||'' instance.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently pending on the system. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently pending on the system. <br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_PENDREQ');
debug('begin add_signature: CP2_TOP_10_CONC_REQS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_TOP_10_CONC_REQS',
p_sig_sql => 'select u.user_name, cp.CONCURRENT_PROGRAM_ID "CP ID", cp.CONCURRENT_PROGRAM_NAME "SHORT NAME", cp.USER_CONCURRENT_PROGRAM_NAME "PROGRAM NAME",
''<div align="right">''||to_char(count(r.request_id),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests r, fnd_user u, fnd_concurrent_programs_vl cp
where r.requested_by = u.user_id
and r.CONCURRENT_PROGRAM_ID = cp.CONCURRENT_PROGRAM_ID
and u.user_name in (select user_name from (
select u.user_name, count(r.request_id)
from fnd_concurrent_requests r, fnd_user u
where r.requested_by = u.user_id
group by u.user_name
order by 2 desc)
where rownum < 11)
group by u.user_name, cp.CONCURRENT_PROGRAM_ID, cp.CONCURRENT_PROGRAM_NAME, cp.USER_CONCURRENT_PROGRAM_NAME
order by 5 desc',
p_title => 'Top 10 Users Running Concurrent Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'No Users are found to be running Concurrent Requests',
p_solution => 'Check the FND_CONCURRENT_REQUESTS table for data.',
p_success_msg => 'List of top 10 users that are running/scheduling Concurrent Requests and the Concurrent Programs they are running. This list is for performance review.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_TOP_10_CONC_REQS');
debug('begin add_signature: CP3_CPADV5');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV5',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME, q.USER_CONCURRENT_QUEUE_NAME, q.cache_size, qs.MAX_PROCESSES "ACTUAL", qs.min_processes "TARGET"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id and a.application_id = q.application_id
and qs.queue_application_id = q.application_id and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y'' and nvl(q.control_code,''X'') <> ''E'' and qs.min_processes >0 and q.manager_type = 1
group by q.CONCURRENT_QUEUE_NAME, q.USER_CONCURRENT_QUEUE_NAME, q.cache_size, qs.min_processes, qs.MAX_PROCESSES
having decode(max(qs.min_processes),1,2,max(qs.min_processes)) > nvl(q.cache_size,1)
order by q.concurrent_queue_name',
p_title => 'Display Managers Cache Size, Actual & Target Processes',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Queue or Managers defined in this instance.',
p_solution => 'A Managers cache size reflects the number of requests a manager adds to its queue, each time it reads available requests to run. <br>
For example, if a manager has 1 target process and a cache value of 3, it will read 3 requests and run those requests before returning to cache additional requests.
<br><br>
Tip: Enter a value of 1 when defining a manager that runs long, time-consuming jobs, and a value of 3 or 4 for managers that run small, quick jobs. <BR><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices',
p_success_msg => 'Please review the list of Concurrent Managers for correct Cache Size and Actual & Target Processes.<br><br>
A Managers cache size reflects the number of requests a manager adds to its queue, each time it reads available requests to run. <br>
For example, if a manager has 1 target process and a cache value of 3, it will read 3 requests and run those requests before returning to cache additional requests.
<br><br>
Tip: Enter a value of 1 when defining a manager that runs long, time-consuming jobs, and a value of 3 or 4 for managers that run small, quick jobs. <BR><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV5');
debug('begin add_signature: CP1_PURGELIGIBLE');
add_signature(
p_sig_id => 'CP1_PURGELIGIBLE',
p_sig_sql => 'select p.USER_CONCURRENT_PROGRAM_NAME, decode(r.phase_code,''C'',''Complete'') STATUS,
''<div align="right">''||to_char(count(r.request_id),''999,999,999,999'')||''</div>'' "COUNT"
FROM fnd_concurrent_requests r, FND_CONCURRENT_PROGRAMS_TL p
WHERE r.CONCURRENT_PROGRAM_ID = p.CONCURRENT_PROGRAM_ID
and r.phase_code=''C''
and p.language = ''US''
group by p.USER_CONCURRENT_PROGRAM_NAME, r.phase_code
order by count(r.request_id) desc',
p_title => 'Total Purge Eligible Records in FND_CONCURRENT_REQUESTS',
p_fail_condition => 'RS',
p_problem_descr => 'There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, and eligible for purging.',
p_solution => 'Review Concurrent Processing purging status with your team.<br><br>
Run the concurrrent program "Purge Concurrent Request and/or Manager Data" (FNDCPPUR) with "Entity" parameter as "ALL" for all requests, or for specific requests that have large volumes of purge eligible data as seen above. The last purge of Concurrent Request data completed on No Date info available for VISION.<br><br>
FNDCPPUR should be scheduled and run on a regular basis to avoid performance issues. Run the query behind the SQL SCRIPT button to get the complete list of purge eligible concurrent request data.<br><br>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite<br>
[1095625.1] - Health Check Alert: Purge the eligible records from the FND_CONCURRENT_REQUESTS table<br><br>
<b>Note:</b> This section is only looking at the scheduled jobs in FND_CONCURRENT_REQUESTS table. Jobs scheduled using other tools (DBMS_JOBS, CONSUB, or PL/SQL, etc) are not reflected here, so keep this in mind.',
p_success_msg => 'There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, and eligible for purging.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_PURGELIGIBLE');
debug('begin add_signature: CP1_INVALIDS_FND_LOW');
add_signature(
p_sig_id => 'CP1_INVALIDS_FND_LOW',
p_sig_sql => 'select d.owner, d.object_name, d.object_type, d.status
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'')
and d.object_name like ''FND%''',
p_title => 'Check for Invalid FND Objects',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_fnd_invalid_cnt||' Invalid FND Objects found in your instance.',
p_solution => 'The above list summarizes quickly what FND Objects are INVALID.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
FND Objects are very important, as this control Concurrent Processing in particular.<br><br>
<br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
Debug and Validate Invalid Objects [300056.1] for more information.',
p_success_msg => 'Nice Work!!
There are no Invalid FND Objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_FND_LOW');
debug('begin add_signature: CP2_PENDING_REQUESTS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_PENDING_REQUESTS',
p_sig_sql => 'SELECT ''Pending Requests Regularly Scheduled:'' "PENDING REQUESTS",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNTS"
from fnd_concurrent_requests
WHERE (requested_start_date > sysdate OR status_code = ''P'') AND phase_code = ''P''
union
SELECT ''Pending Requests Non Regularly Scheduled:'' "Pending Requests",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests
WHERE requested_start_date <= sysdate AND status_code != ''P'' AND phase_code = ''P''
union
SELECT ''Pending Requests On Hold:'' "Pending Requests",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests
WHERE hold_flag = ''Y'' AND phase_code = ''P''
union
SELECT ''Pending Requests Not On Hold:'' "Pending Requests",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests
WHERE hold_flag != ''Y'' AND phase_code = ''P''',
p_title => 'Types of Pending Requests and Counts',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows found for pending requests.
',
p_solution => 'Ensure that Concurrent Manager is up and running.',
p_success_msg => 'Displays a list a Pending Requests for : <br>
<ul>
<li>Pending Requests Regularly Scheduled:</li>
<li>Pending Requests Non Regularly Scheduled:</li>
<li>Pending Requests On Hold:</li>
<li>Pending Requests Not On Hold:</li>
</ul>',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_PENDING_REQUESTS');
debug('begin add_signature: CP3_CPADV11');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV11',
p_sig_sql => 'SELECT q.concurrent_queue_name "CONCURRENT QUEUE NAME",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT",
''<div align="right">''||to_char(round(sum(r.actual_completion_date - r.actual_start_date) * 24, 2),''999,999,999,999.99'')||''</div>'' "ELAPSED",
''<div align="right">''||to_char(round(avg(r.actual_completion_date - r.actual_start_date) * 24, 2),''999,999,999,999.99'')||''</div>'' "AVG",
''<div align="right">''||to_char(round(stddev(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 24, 2),''999,999,999,999.99'')||''</div>'' "WSTDDEV",
''<div align="right">''||to_char(round(sum(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 24, 2),''999,999,999,999.99'')||''</div>'' "WAITED",
''<div align="right">''||to_char(round(avg(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 24, 2),''999,999,999,999.99'')||''</div>'' "AVGWAIT"
from apps.fnd_concurrent_programs p, apps.fnd_concurrent_requests r, apps.fnd_concurrent_queues q,
apps.fnd_concurrent_processes p
where r.program_application_id = p.application_id and r.concurrent_program_id = p.concurrent_program_id
and r.phase_code=''C'' -- completed and r.status_code in (''C'',''G'') -- completed normal or with warning
and r.controlling_manager=p.concurrent_process_id and q.concurrent_queue_id=p.concurrent_queue_id
and r.concurrent_program_id=p.concurrent_program_id
group by q.concurrent_queue_name',
p_title => 'Concurrent Manager Request Summary by Manager',
p_fail_condition => 'RS',
p_problem_descr => 'These are the concurrent managers being used, and can be compared with the actual concurrent managers allocated at startup. <br>
This only considers requests with completion status of normal/warning.',
p_solution => 'Please consider deactivation of any managers which are consistently not being used, and are listed as Active/Enabled above.',
p_success_msg => 'There are no concurrent managers are being used, and can be compared with the actual concurrent managers allocated at startup.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV11');
debug('begin add_signature: CP1_INVALIDS_ALL_HIGH');
add_signature(
p_sig_id => 'CP1_INVALIDS_ALL_HIGH',
p_sig_sql => 'select d.owner, d.object_type, substr(d.object_name,0,3)||''%...'' "OBJECT_NAME", ''<div align="right">''||to_char(count(d.status),''999,999,999,999'')||''</div>'' "COUNT"
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'',''APPLSYSPUB'',''CTXSYS'',''PUBLIC'',''SYS'',''SYSTEM'')
group by d.owner, d.object_type, substr(d.object_name,0,3)
order by 4 desc',
p_title => 'Check for Invalid Objects All',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_apps_invalid_cnt||' Invalid Objects found in your E-Business Suite instance.',
p_solution => 'The above list summarizes quickly what products the INVALID objects belong to.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
We next check if any belong to FND, as they control Concurrent Processing in particular.<br>
Consider running ADADMIN and compiling the entire APPS Schema.<br><br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br><br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
Troubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work !!!
There are no invalid objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_ALL_HIGH');
debug('begin add_signature: CP1_NODE_INFO');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_NODE_INFO',
p_sig_sql => 'SELECT substr(fn.node_name, 1, 20) "NODE_NAME", flkup.meaning "PLATFORM", fn.node_mode, fn.server_address, substr(fn.host, 1, 15) "HOST",
substr(fn.domain, 1, 20) "DOMAIN", substr(fn.support_cp, 1, 3) "CP", substr(fn.support_web, 1, 3) "WEB",
substr(fn.support_admin, 1, 3) "ADMIN", substr(fn.support_forms, 1, 3) "FORMS",
substr(fn.SUPPORT_DB, 1, 3) "DB", substr(fn.VIRTUAL_IP, 1, 30) "VIRTUAL_IP"
from fnd_nodes fn, fnd_lookups flkup
where flkup.lookup_type=''PLATFORM''
and fn.platform_code=flkup.lookup_code',
p_title => 'Instance Node Details',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the EBS Instance Information',
p_solution => '',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_NODE_INFO');
debug('begin add_signature: CP4_STD_MGR');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Standard Manager Analysis',
p_fail_condition => 'NRS',
p_problem_descr => 'Standard Manager is not running.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR');
debug('begin add_signature: CP2_SCHEDULEDREQ');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_SCHEDULEDREQ',
p_sig_sql => 'SELECT request_id REQ_ID, fu.user_name REQUESTED_BY, nvl(meaning, ''UNKNOWN'') status, user_concurrent_program_name PROGRAM_NAME,
to_char(request_date, ''DD-MON-RR HH24:MI:SS'') SUBMITTED, to_char(requested_start_date, ''DD-MON-RR HH24:MI:SS'') START_DATE
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv, fnd_user fu
WHERE fcr.requested_by = fu.user_id
and phase_code = ''P'' AND (fcr.requested_start_date >= sysdate OR status_code = ''P'')
AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code AND fcr.concurrent_program_id = fcpv.concurrent_program_id
AND fcr.program_application_id = fcpv.application_id
ORDER BY requested_start_date',
p_title => 'Listing of Scheduled Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Scheduled Requests',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system.<br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [213021.1] - Concurrent Processing (CP) / APPS Reporting Scripts',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system.<br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [213021.1] - Concurrent Processing (CP) / APPS Reporting Scripts',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_SCHEDULEDREQ');
debug('begin add_signature: CP1_PARAMETERS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_PARAMETERS',
p_sig_sql => 'SELECT name, value
from v$parameter
where upper(name) in (''AQ_TM_PROCESSES'',''JOB_QUEUE_PROCESSES'',''JOB_QUEUE_INTERVAL'',
''UTL_FILE_DIR'',''NLS_LANGUAGE'',''NLS_TERRITORY'',
''CPU_COUNT'',''PARALLEL_THREADS_PER_CPU'')
UNION
select parameter, value from v$nls_parameters where parameter in (''NLS_CHARACTERSET'')',
p_title => 'Concurrent Processing Database Parameter Settings',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the Concurrent Processing Database Parameter Settings',
p_solution => 'Verify the Concurrent Processing Database Parameter Settings are set',
p_success_msg => 'For more information refer to [396009.1] - Database Initialization Parameters for Oracle E-Business Suite Release 12',
p_print_condition => nvl('SUCCESS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_PARAMETERS');
debug('begin add_signature: CP3_CPADV12');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV12',
p_sig_sql => 'SELECT a.CONCURRENT_QUEUE_ID "Queue ID", a.QUEUE_APPLICATION_ID "Apps ID",
b.user_CONCURRENT_QUEUE_NAME "Concurrent Manager", decode(a.PHASE_CODE, ''P'',''PENDING'',''R'',''Running'') Phase,count(1)
FROM FND_CONCURRENT_WORKER_REQUESTS a, fnd_concurrent_queues_vl b
WHERE (a.Phase_Code = ''P'' or a.Phase_Code = ''R'') and a.hold_flag != ''Y'' and a.Requested_Start_Date <= SYSDATE
AND ('''' IS NULL OR ('''' = ''B'' AND a.PHASE_CODE = ''R'' AND a.STATUS_CODE IN (''I'', ''Q''))) and ''1'' in (0,1,4)
And a.concurrent_queue_id=b.concurrent_queue_id
group by a.CONCURRENT_QUEUE_ID, a.QUEUE_APPLICATION_ID, b.user_CONCURRENT_QUEUE_NAME, a.PHASE_CODE
order by 1',
p_title => 'Check Manager Queues for Pending Requests',
p_fail_condition => 'RS',
p_problem_descr => 'There are concurrent requests that are in a Pending state. ',
p_solution => 'The output above is for review and confirmation by your team. Typically when there are requests pending, the number should be the same as the number of actual processes. <br>
However if there are no pending requests or requests were just submitted, the number of requests running may be less than the number of actual processes. <br>
Also note if a concurrent program is incompatible with another program currently running, it does not start until the incompatible program has completed. In this case, the number of requests running may be less than number of actual processes even when there are requests pending.',
p_success_msg => 'There are no concurrent requests that are in a Pending state.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV12');
debug('begin add_signature: CP1_INVALIDS_FND_HIGH');
add_signature(
p_sig_id => 'CP1_INVALIDS_FND_HIGH',
p_sig_sql => 'select d.owner, d.object_name, d.object_type, d.status
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'')
and d.object_name like ''FND%''',
p_title => 'Check for Invalid FND Objects',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_fnd_invalid_cnt||' Invalid FND Objects found in your instance.',
p_solution => 'The above list summarizes quickly what FND Objects are INVALID.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
FND Objects are very important, as this control Concurrent Processing in particular.<br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br><br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
roubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work!!
There are no Invalid FND Objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_FND_HIGH');
debug('begin add_signature: CP4_STD_MGR_INCL');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_INCL',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.include_flag = ''I''
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Standard Manager has an INCLUDE defined',
p_fail_condition => 'RS',
p_problem_descr => 'The Standard concurrent manager has been altered with an INCLUDE. <br>
',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule--"Excluded" is ok. <br>
If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs.
<br><br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)<br>
Any changes requires that you "Verify" the Internal Concurrent Manager on the "Administer Concurrent Managers" screen.<br><br>
When changing manager specialization or program incompatibilities, remember to "Verify" the ICM on the Administer Concurrent Manager form or bounce (restart) the concurrent managers for the changes to take effect.
',
p_success_msg => 'No rows were selected so I am calling this a success.',
p_print_condition => nvl('FAILURE','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_INCL');
debug('begin add_signature: CP_STD_MGR_INCLUDES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP_STD_MGR_INCLUDES',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and c.include_flag = ''I''
and a.language=t.language',
p_title => 'Standard Manager INCLUDES',
p_fail_condition => 'RS',
p_problem_descr => 'The Standard Manager has an INCLUDE!!
',
p_solution => 'You should not alter the definition of the Standard concurrent manager. <br>
If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs.
<br><br>
Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization rule--"Excluded" is ok. <br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)<br>
Any changes requires that you "Verify" the Internal Concurrent Manager on the "Administer Concurrent Managers" screen.
When changing manager specialization or program incompatibilities, remember to "Verify" the ICM on the Administer Concurrent Manager form or bounce (restart) the concurrent managers for the changes to take effect.
',
p_success_msg => 'There are no INCLUDE rules assigned to the Standard Manager.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP_STD_MGR_INCLUDES');
debug('begin add_signature: CP3_CPADV17');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV17',
p_sig_sql => 'SELECT v.concurrent_queue_name "CONCURRENT QUEUE NAME", v.concurrent_queue_id "QUEUE ID",
v.user_concurrent_queue_name "NAME", v.max_processes "TARGET", v.running_processes "ACTUAL",
v.control_code "CODE", v.target_node "TARGET NODE",
TO_CHAR(v.last_update_date, ''DD-MON-RR HH24:MI:SS'') "LAST UPDATE",
v.node_name "NODE NAME", s.service_parameters "SERVICE PARAMETERS",
c.developer_parameters "DEVELOPER PARAMETERS"
FROM fnd_concurrent_queues_vl v, fnd_concurrent_queue_size s,
fnd_cp_services c
WHERE v.concurrent_queue_name like ''FNDCPOPP%''
and v.concurrent_queue_id = s.concurrent_queue_id
and v.manager_type = c.service_id',
p_title => 'Check the Configuration of OPP',
p_fail_condition => 'RS',
p_problem_descr => 'OPP is currently configured, identifying the: Service ID, Service Handle, and Parameters used.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your current OPP configuration. <br>
You can cross reference the collected information with existing notes on OPP best practices :<br>
[1399454.1] - Tuning Output Post Processor (OPP) to Improve Performance<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite',
p_success_msg => 'OPP is currently not configured.<br><br>
Please check existing notes on OPP best practices :<br>
[1399454.1] - Tuning Output Post Processor (OPP) to Improve Performance<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV17');
debug('begin add_signature: CP1_INVALIDS_BY_SCHEMA');
add_signature(
p_sig_id => 'CP1_INVALIDS_BY_SCHEMA',
p_sig_sql => 'select d.owner,
''<div align="right">''||to_char(count(d.status),''999,999,999,999'')||''</div>'' "COUNT"
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'',''APPLSYSPUB'',''CTXSYS'',''PUBLIC'',''SYS'',''SYSTEM'')
group by d.owner',
p_title => 'There are '||g_apps_invalid_cnt||' Invalid Objects Found',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_apps_invalid_cnt||' Invalid Objects found in your instance schemas.',
p_solution => 'The above list summarizes quickly what schemas the INVALID objects belong to.<br><br>
It is recommended that you drill down into each schema and re-compile these in order to make them VALID again.<br>
We also check if any belong to FND, as this control Concurrent Processing in particular.<br>
Consider running ADADMIN and compiling the entire APPS Schema, or just for the Product in question.<br><br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br>
Please follow Troubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work !!!
There are no invalid objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_BY_SCHEMA');
debug('begin add_signature: CP2_PENDREQHOLD');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_PENDREQHOLD',
p_sig_sql => 'SELECT request_id "REQ ID", nvl(meaning, ''UNKNOWN'') "STATUS", user_concurrent_program_name "PROGRAM NAME",
to_char(request_date, ''DD-MON-RR HH24:MI:SS'') "SUBMITTED"
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv
WHERE phase_code = ''P'' AND hold_flag = ''Y'' AND fcr.requested_start_date <= sysdate
AND status_code != ''P'' AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code
AND fcr.concurrent_program_id = fcpv.concurrent_program_id AND fcr.program_application_id = fcpv.application_id
ORDER BY request_date, request_id',
p_title => 'Listing of Pending Requests on Hold',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Pending Requests on Hold and wating to be run',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system. <br>
Otherwise there is no immediate action required.<br>
To get a complete list of Pending Requests on Hold including the Request ID, run the query behind the SQL SCRIPT button.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of Pending Requests on Hold and wating to be run. <br>
Otherwise there is no immediate action required.<br>
To get a complete list of Pending Requests on Hold including the Request ID, run the query behind the SQL SCRIPT button.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_PENDREQHOLD');
debug('begin add_signature: CP2_SCHEDULEDREQ2');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_SCHEDULEDREQ2',
p_sig_sql => 'SELECT request_id id, nvl(meaning, ''UNKNOWN'') status, user_concurrent_program_name pname,
to_char(request_date, ''DD-MON-RR HH24:MI:SS'') submitd, to_char(requested_start_date, ''DD-MON-RR HH24:MI:SS'') requestd
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv
WHERE phase_code = ''P'' AND hold_flag = ''N'' AND fcr.requested_start_date <= sysdate
AND status_code != ''P'' AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code
AND fcr.concurrent_program_id = fcpv.concurrent_program_id AND fcr.program_application_id = fcpv.application_id
ORDER BY request_date, request_id',
p_title => 'Listing of Scheduled Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'There are not scheduled requests waiting to run that are currently not on hold.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of Pending Requests waiting to run that are currently not on hold.. <br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_SCHEDULEDREQ2');
debug('begin add_signature: CP4_STD_MGR_VALIDATE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_VALIDATE',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Validate Standard Manager Definition',
p_fail_condition => 'RS',
p_problem_descr => 'You should not alter the definition of the Standard concurrent manager. <br>
',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule--"Excluded" is ok. <br>
If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs.
<br><br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)<br>
Any changes requires that you "Verify" the Internal Concurrent Manager on the "Administer Concurrent Managers" screen.<br><br>
When changing manager specialization or program incompatibilities, remember to "Verify" the ICM on the Administer Concurrent Manager form or bounce (restart) the concurrent managers for the changes to take effect.
',
p_success_msg => 'No rows were selected so I am calling this a success.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_VALIDATE');
debug('begin add_signature: CP3_FND_CP_GSM_OPP_AQTBL');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_FND_CP_GSM_OPP_AQTBL',
p_sig_sql => 'select ''AQ$_FND_CP_GSM_OPP_AQTBL'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.FND_CP_GSM_OPP_AQTBL
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_S'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_S
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_T'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_T
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_T'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_T
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_H'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_H
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_I'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_I
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_I'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_I
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_G'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_G
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_L'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_L',
p_title => 'Status of AQ$_FND_CP_GSM_OPP_AQTBL tables',
p_fail_condition => '[COUNT] > [500]',
p_problem_descr => '<b>The AQ$_FND_CP_GSM_OPP_AQTBL table has many rows</b><br>
AQs tables are used to look for "subscriptions" by FNDSMs. <br>That is, when ICM calls for FNDSM to start, they "subscribe" to this queue to identify its status. The time taking for the process cleanup prior to the ICM starting up the regular CMs is correlated to the number of processes that were not stopped cleanly. In case of un-clean shutdown, the process to restart will be longer as manager spends extra cycles to perform housekeeping tasks.',
p_solution => '<ul><li>It is highly recommended to always ensure the clean shutdown of the concurrent managers.</li>
<li>The Purge Concurrent Request and/or Manager Data Program request should be run periodically, however, it does not Purge AQ Tables.<br>
For maintaining a healthy level of records in FND_CONCURRENT_REQUESTS instead of running ''Purge Concurrent Program'' with the same parameters for all the applications, try running it for different applications depending on the number of days the data should be kept for.</li>
<li>It is recommended to schedule a cron job to query records in APPLSYS.FND_CP_GSM_OPP_AQTBL to monitor it and use DBMS_AQADM.PURGE_QUEUE_TABLE to purge the table as needed.</li>
<li>Follow the steps outlined in <b>[1156523.1] - <i>How To Purge FND_AQ Tables</i></b> on how to purge the FND_CP_GSM_OPP_AQTBL table manually to clean up the associated tables and indexes.</li></ul>',
p_success_msg => 'The AQ$_FND_CP_GSM_OPP_AQTBL table counts look fine.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_FND_CP_GSM_OPP_AQTBL');
debug('begin add_signature: CP1_PROFILES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_PROFILES',
p_sig_sql => 'SELECT t.PROFILE_OPTION_ID "PROFILE OPTION ID", t.PROFILE_OPTION_NAME "NAME", z.language "LANG", z.USER_PROFILE_OPTION_NAME "DISPLAY NAME",
v.PROFILE_OPTION_VALUE "VALUE", z.DESCRIPTION
from fnd_profile_options t, fnd_profile_option_values v, fnd_profile_options_tl z
where (v.PROFILE_OPTION_ID (+) = t.PROFILE_OPTION_ID)
and (v.level_id = 10001)
and (z.PROFILE_OPTION_NAME = t.PROFILE_OPTION_NAME)
and (z.language = ''US'')
and (t.PROFILE_OPTION_NAME in (''CONC_GSM_ENABLED'',''CONC_PP_RESPONSE_TIMEOUT'',''CONC_TM_TRANSPORT_TYPE'',''GUEST_USER_PWD'',
''AFLOG_ENABLED'',''AFLOG_FILENAME'',''AFLOG_LEVEL'',''AFLOG_BUFFER_MODE'',''AFLOG_MODULE'',
''FND_FWK_COMPATIBILITY_MODE'',''FND_VALIDATION_LEVEL'',''FND_MIGRATED_TO_JRAD'',''AMPOOL_ENABLED'',
''CONC_PP_PROCESS_TIMEOUT'',''CONC_DEBUG'',''CONC_COPIES'',''CONC_FORCE_LOCAL_OUTPUT_MODE'',''CONC_HOLD'',
''CONC_CD_ID'',''CONC_PMON_METHOD'',''CONC_PP_INIT_DELAY'',''CONC_PRINT_WARNING'',''CONC_REPORT_ACCESS_LEVEL'',
''CONC_REQUEST_LIMIT'',''CONC_SINGLE_THREAD'',''CONC_TOKEN_TIMEOUT'',''CONC_VALIDATE_SUBMISSION'',
''FND_CONC_ALLOW_DEBUG'',''CP_INSTANCE_CHECK'',''FND_NATIVE_CLIENT_ENCODING'',''ICX_CLIENT_IANA_ENCODING'',
''FS_SVC_PREFIX'',''FS_MAX_TRANS'',''FND_SMTP_HOST'',''FND_SMTP_PORT'',''CONC_FORCE_LOCAL_OUTPUT_FILE_MODE'',
''CONC_DATE_INCREMENT_OPTION'',''FS_DELETE'',''FS_ENABLED'',''FS_MAX_TRANS'',''EDITOR_PS'',''FNDCPVWR_FONT_SIZE'',
''FS_MIME_PDF'',''FS_MIME_XML''))
order by t.PROFILE_OPTION_NAME',
p_title => 'E-Business Suite Profile Settings',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the E-Business Suite Profile Settings',
p_solution => 'Verify the E-Business Suite Profile Settings',
p_success_msg => 'E-Business Suite Profile Settings',
p_print_condition => nvl('SUCCESS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_PROFILES');
debug('begin add_signature: CP4_XDO_SETTINGS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_XDO_SETTINGS',
p_sig_sql => 'select property_code "PROPERTY CODE", value, config_level "CONFIG LEVEL", data_source_code "DATA SOURCE CODE", template_code "TEMPLATE CODE", application_short_name "APP SHORT NAME", last_update_date "LAST UPDATE"
from XDO_CONFIG_VALUES order by property_code',
p_title => 'XDO Settings',
p_fail_condition => 'NRS',
p_problem_descr => 'No XDO Settings for this instance.',
p_solution => 'Need a solution here.',
p_success_msg => 'XDO Settings have been found on this instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_XDO_SETTINGS');
debug('begin add_signature: CP_STD_MGR_LONG_RUN');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP_STD_MGR_LONG_RUN',
p_sig_sql => 'SELECT r.request_id "REQ ID", a.application_name "APPLICATION",
t.user_concurrent_program_name "PROGRAM", p.concurrent_program_name "SHORT NAME",
DECODE(p.execution_method_code, ''I'',''PL/SQL Concurrent Program'',''K'',''Java Concurrent Program'',
''P'',''Oracle*Reports Concurrent Program'',''Q'',''SQL*Plus Concurrent Program'') "EXECUTION METHOD",
DECODE(p.queue_method_code,''B'',''B=Yes'',''I'',''I=No'') "QUEUE METHOD", u.user_name "USER",
TO_CHAR(r.requested_start_date, ''DD-MON-RR HH24:MI:SS'') "STARTED",
r.is_sub_request "IS SUB REQUEST",
DECODE(r.PHASE_CODE, ''C'',''Completed'',''I'',''I=Inactive'',''P'',''P=Pending'',''R'',''R=Running'') "PHASE",
DECODE(r.STATUS_CODE, ''A'',''Waiting'',''B'',''B=Resuming'',''C'',''C=Normal'',
''D'',''D=Cancelled'',''E'',''E=Error'',''G'',''G=Warning'',
''H'',''H=On Hold'',''I'',''I=Normal'',''M'',''M=No Manager'',
''P'',''P=Scheduled'',''Q'',''Q=Standby'',''R'',''R=Normal'',
''S'',''S=Suspended'',''T'',''T=Terminating'',''U'',''U=Disabled'',
''W'',''W=Paused'',''X'',''X=Terminated'',''Z'',''Z=Waiting'') "STATUS"
FROM apps.fnd_concurrent_programs_tl t,
apps.fnd_concurrent_programs p, apps.fnd_application_tl a,
apps.fnd_concurrent_requests r,apps.fnd_languages l,
apps.fnd_user u
WHERE a.application_id = t.application_id
and r.concurrent_program_id = t.concurrent_program_id
and t.concurrent_program_id = p.concurrent_program_id
AND r.nls_language = l.nls_language
AND l.language_code = t.language
AND l.language_code = a.language
AND r.requested_by = u.user_id
and p.run_alone_flag = ''Y''',
p_title => 'Long Running Programs',
p_fail_condition => 'RS',
p_problem_descr => 'This is my Warning message because rows were detected
<br><br>
"Run Alone" programs will cause a momentary "Inactive No Manager" and/or "Pending" status, because no program can run while a "Run Alone" program runs. With the following SQL, check what program(s) are causing the prolonged "Inactive No Manager" state.
',
p_solution => 'My Warning solution
<br><br>
The "Run Alone" option should be used very sparingly and only with short / quick running programs, because it block all other programs while it is queued / running.
',
p_success_msg => 'No rows were found so this is a success, meaning no long running programs are found.???',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP_STD_MGR_LONG_RUN');
debug('begin add_signature: CP1_FND_FILE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_FND_FILE',
p_sig_sql => 'SELECT name, value
FROM v$parameter
WHERE name = ''utl_file_dir''',
p_title => 'Check FND_FILE Setup',
p_fail_condition => 'NRS',
p_problem_descr => 'The FND_FILE Setup is not enabled.',
p_solution => 'Need to correct this<br>Please review [210062.1] - Concurrent Processing - Generic Service Management (GSM) in Oracle Applications, for more information.',
p_success_msg => '<b>FND_FILE Setup is enabled as expected.</b><br>
For more information, please review [261693.1] - Concurrent Processing - Troubleshooting Concurrent Request ORA-20100 errors in the request logs.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_FND_FILE');
debug('begin add_signature: CP2_LASTMONDAILY');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_LASTMONDAILY',
p_sig_sql => 'SELECT trunc(REQUESTED_START_DATE) "REQUESTED START DATE", ''<div align="right">''||to_char(count(request_id),''999,999,999,999'')||''</div>'' "COUNTS"
FROM FND_CONCURRENT_REQUESTS
WHERE REQUESTED_START_DATE BETWEEN sysdate-30 AND sysdate
group by rollup(trunc(REQUESTED_START_DATE))',
p_title => 'Volume of Daily Concurrent Requests for Last Month',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows showing Volume of Daily Concurrent Requests for Last Month',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of your average monthly throughput, and identify any spikes or drops. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of your average monthly throughput, and identify any spikes or drops. <br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_LASTMONDAILY');
debug('begin add_signature: BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE',
p_sig_sql => 'select
b.user_profile_option_name profile_name
, a.profile_option_name profile_short_name
, decode(to_char(c.level_id),''10001'',''Site''
,''10002'',''Application''
,''10003'',''Responsibility''
,''10004'',''User''
,''Unknown'') Level_type
, decode(to_char(c.level_id),''10001'',''Site''
,''10002'',nvl(h.application_short_name,to_char(c.level_value))
,''10003'',nvl(g.responsibility_name,to_char(c.level_value))
,''10004'',nvl(e.user_name,to_char(c.level_value))
,''Unknown'') level_value
, c.PROFILE_OPTION_VALUE profile_value
from
apps.fnd_profile_options a
, apps.FND_PROFILE_OPTIONS_VL b
, apps.FND_PROFILE_OPTION_VALUES c
, apps.FND_USER d
, apps.FND_USER e
, apps.FND_RESPONSIBILITY_VL g
, apps.FND_APPLICATION h
where
b.user_profile_option_name like ''%Concurrent%Force%Output%''
and a.profile_option_name = b.profile_option_name
and a.profile_option_id = c.profile_option_id
and a.application_id = c.application_id
and c.last_updated_by = d.user_id (+)
and c.level_value = e.user_id (+)
and c.level_value = g.responsibility_id (+)
and c.level_value = h.application_id (+)
order by
b.user_profile_option_name, c.level_id,
decode(to_char(c.level_id),''10001'',''Site''
,''10002'',nvl(h.application_short_name,to_char(c.level_value))
,''10003'',nvl(g.responsibility_name,to_char(c.level_value))
,''10004'',nvl(e.user_name,to_char(c.level_value))
,''Unknown'')',
p_title => 'Verify Force Local Output File Mode Profile',
p_fail_condition => 'NRS',
p_problem_descr => 'Concurrent: Force Local Output File Mode profile option is not set.',
p_solution => 'Please set Concurrent: Force Local Output File Mode profile option.',
p_success_msg => 'Concurrent: Force Local Output File Mode is set as expected',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE');
debug('begin add_signature: CP2_RUNALONE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_RUNALONE',
p_sig_sql => 'SELECT CONCURRENT_PROGRAM_NAME "SHORT NAME", USER_CONCURRENT_PROGRAM_NAME "PROGRAM NAME", RUN_ALONE_FLAG "RUN ALONE", ENABLED_FLAG "ENABLED", DESCRIPTION
FROM FND_CONCURRENT_PROGRAMS_VL
WHERE (RUN_ALONE_FLAG=''Y'')
order by RUN_ALONE_FLAG, ENABLED_FLAG desc',
p_title => 'Identify/Resolve the "Pending/Standby" Issue, if Caused by Run Alone Flag',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Requests that Identify/Resolve the "Pending/Standby" Issue, if Caused by Run Alone Flag',
p_solution => 'The output provided is for review and confirmation by your teams, and is intended to identify any concurrent program definitions causing Pending/Standby Requests which may require review.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and is intended to identify any concurrent program definitions causing Pending/Standby Requests which may require review.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_RUNALONE');
debug('begin add_signature: OPP_PENDING_REQS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'OPP_PENDING_REQS',
p_sig_sql => 'select concurrent_request_id, action_type
from fnd_conc_pp_actions
where action_type >= 6
and processor_id is null',
p_title => 'Check Pending OPP Requests',
p_fail_condition => 'RS',
p_problem_descr => 'There are pending OPP Requests
',
p_solution => 'We need a solution for pending OPP Requests if this is really a Warning scenario.<br><br>
<b>Note :</b>Output Post Processing currently does not display “Pending Requests” like any other Manager (for Example Standard Manager).<br><br>
This keep the customers in dark with respect to “workload of OPP”. They could not perform “sizing” of the OPP ; to handle the load of the system. For Standard Manager, they know how many requests pending (on the screen) . Hence they could resize the Manager process accordingly. But OPP they could not do so.
Support is currently using the following query to find pending requests against OPP (Based on Dev input)
</blockquote>
SQL> select concurrent_request_id, action_type
from fnd_conc_pp_actions
where action_type >= 6
and processor_id is null;</blockquote>
Most of the time, Requests stuck in Running/Normal as the requests wait at OPP. Because they do not know the pending queue size (OPP), customer inadvertently increases the Standard Manager process to speed up which goes in vain. That results in performance issue in the concurrent manager layer.
We need to display the “Pending Requests” in Concurrent Administer Screen for “OPP”.<br><br>
Bug 24626221 - CONCURRENT ADMINISTER SCREEN TO DISPLAY PENDING REQUESTS',
p_success_msg => 'Success!!!<br>
There are no OPP pending requests at this time.<br><br>
<b>Note :</b>Output Post Processing currently does not display “Pending Requests” like any other Manager (for Example Standard Manager).<br><br>
This keep the customers in dark with respect to “workload of OPP”. They could not perform “sizing” of the OPP ; to handle the load of the system. For Standard Manager, they know how many requests pending (on the screen) . Hence they could resize the Manager process accordingly. But OPP they could not do so.
Support is currently using the following query to find pending requests against OPP (Based on Dev input)
</blockquote>
SQL> select concurrent_request_id, action_type
from fnd_conc_pp_actions
where action_type >= 6
and processor_id is null;</blockquote>
Most of the time, Requests stuck in Running/Normal as the requests wait at OPP. Because they do not know the pending queue size (OPP), customer inadvertently increases the Standard Manager process to speed up which goes in vain. That results in performance issue in the concurrent manager layer.
We need to display the “Pending Requests” in Concurrent Administer Screen for “OPP”.<br><br>
Bug 24626221 - CONCURRENT ADMINISTER SCREEN TO DISPLAY PENDING REQUESTS',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: OPP_PENDING_REQS');
debug('begin add_signature: CP2_TABLESPACES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_TABLESPACES',
p_sig_sql => 'SELECT SEGMENT_NAME "TABLE NAME",
''<div align="right">''||to_char(sum(BLOCKS),''999,999,999,999'')||''</div>'' "TOTAL BLOCKS",
''<div align="right">''||to_char(sum(bytes/1024/1024),''999,999,999,999'')||''</div>'' "SIZE IN MB"
from dba_segments
where segment_name in (''FND_CONCURRENT_REQUESTS'',''FND_CONCURRENT_PROCESSES'',''FND_CONCURRENT_QUEUES'',
''FND_ENV_CONTEXT'',''FND_EVENTS'',''FND_EVENT_TOKENS'')
group by segment_name
order by 2',
p_title => 'Tablespace Statistics for the FND_CONCURRENT Tables',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows found for Tablespace Statistics for the FND_CONCURRENT Tables',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_TABLESPACES');
debug('begin add_signature: CP2_TABLESPACES2');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_TABLESPACES2',
p_sig_sql => 'SELECT table_name "TABLE NAME", ''<div align="right">''||to_char(blocks,''999,999,999,999'')||''</div>'' "BLOCKS",
''<div align="right">''||to_char(empty_blocks,''999,999,999,999'')||''</div>'' "EMPTY BLOCKS",
''<div align="right">''||to_char(num_rows,''999,999,999,999'')||''</div>'' "LAST ANALYZED",
''<div align="right">''||to_char(sample_size,''999,999,999,999'')||''</div>'' "SAMPLE SIZE"
FROM all_tables
WHERE table_name in (''FND_CONCURRENT_REQUESTS'',''FND_CONCURRENT_PROCESSES'',
''FND_CONCURRENT_QUEUES'',''FND_ENV_CONTEXT'',''FND_EVENTS'',''FND_EVENT_TOKENS'')',
p_title => 'Additional Tablespace Statistics for the FND_CONCURRENT Tables',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows found for Additional Tablespace Statistics for the FND_CONCURRENT Tables',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_TABLESPACES2');
EXCEPTION WHEN OTHERS THEN
print_log('Error in load_signatures');
raise;
END load_signatures;
---------------------------------
-- MAIN ENTRY POINT
---------------------------------
PROCEDURE main(
p_min_volume IN NUMBER DEFAULT 3500
,p_max_volume IN NUMBER DEFAULT 5000
,p_max_output_rows IN NUMBER DEFAULT 30
,p_debug_mode IN VARCHAR2 DEFAULT 'Y')
IS
l_sql_result VARCHAR2(1);
l_step VARCHAR2(5);
l_analyzer_end_time TIMESTAMP;
l_completion_status BOOLEAN;
BEGIN
-- re-initialize values
g_sect_no := 1;
g_sig_id := 0;
g_item_id := 0; -- CG REMOVE
g_sig_count := 0 ;
-- initialize the global results hash
g_results('S') := 0;
g_results('W') := 0;
g_results('E') := 0;
g_results('I') := 0;
-- CG CHANGE This should be generated automagically but need to rethink the init/validation steps. We need to initialize the g_debug_mode flag before the file init!
g_debug_mode := nvl(p_debug_mode, 'Y');
IF g_is_concurrent THEN
g_rep_info('Calling From'):='Concurrent Program';
ELSE
g_rep_info('Calling From'):='SQL Script';
END IF;
l_step := '10';
initialize_files;
l_step := '15';
set_cloud_flag;
IF (g_cloud_flag) THEN
debug ('CG Cloud flag: TRUE');
ELSE
debug ('CG Cloud flag: FALSE');
END IF;
-- Title of analyzer!! - do not add word 'analyzer' at the end as it is appended in code where title is called
analyzer_title := 'Concurrent Processing';
l_step := '20';
validate_parameters(
p_min_volume => p_min_volume
,p_max_volume => p_max_volume
,p_max_output_rows => p_max_output_rows
,p_debug_mode => p_debug_mode );
l_step := '30';
l_step := '25';
print_page_header;
l_step := '30';
print_rep_header(analyzer_title);
print_execdetails;
print_parameters;
l_step := '40';
load_signatures;
l_step := '45';
create_hyperlink_table;
l_step := '50';
-- Start of Sections and signatures
l_step := '60';
debug('begin section: Main Section');
-- Print the menu of the section screen
start_main_section;
debug('begin section: EBS_CP_OVERVIEW');
start_section('E-Business Applications Concurrent Processing Analyzer Overview');
if (g_reqid_cnt < 100) THEN
show_data_gauge;
set_item_result(run_stored_sig('CP1_CONC_REQ3'));
elsif (g_reqid_cnt > 99) THEN
show_gauge_chart;
if (g_reqid_cnt > 5000) THEN
set_item_result(run_stored_sig('CP1_CONC_REQ1'));
elsif (g_reqid_cnt > 3500) THEN
set_item_result(run_stored_sig('CP1_CONC_REQ2'));
else
set_item_result(run_stored_sig('CP1_CONC_REQ3'));
end if;
end if;
set_item_result(run_stored_sig('CP1_ORPHANED_PURGE_DATA'));
set_item_result(run_stored_sig('EBS_VERSION'));
set_item_result(run_stored_sig('CP1_FNDRSRUN'));
set_item_result(run_stored_sig('CP1_PURGEREQS'));
set_item_result(run_stored_sig('CP1_PURGELIGIBLE'));
set_item_result(run_stored_sig('CP1_NODE_INFO'));
set_item_result(run_stored_sig('CP1_PARAMETERS'));
if (g_cp_status = 'Active') THEN
set_item_result(run_stored_sig('CP1_ENV1'));
elsif (g_cp_status = 'Deactivated') THEN
set_item_result(run_stored_sig('CP1_ENV2'));
else
set_item_result(run_stored_sig('CP1_ENV3'));
end if;
set_item_result(run_stored_sig('CP1_PROFILES'));
set_item_result(run_stored_sig('CP1_INVALIDS_BY_SCHEMA'));
if (g_apps_invalid_cnt > 100) then
set_item_result(run_stored_sig('CP1_INVALIDS_ALL_HIGH'));
else
set_item_result(run_stored_sig('CP1_INVALIDS_ALL_LOW'));
end if;
if (g_fnd_invalid_cnt > 5) then
set_item_result(run_stored_sig('CP1_INVALIDS_FND_HIGH'));
else
set_item_result(run_stored_sig('CP1_INVALIDS_FND_LOW'));
end if;
set_item_result(run_stored_sig('CP1_FND_FILE'));
set_item_result(check_rec_patches_7);
IF g_rep_info('Apps Version')>='12.2' THEN
set_item_result(check_rec_patches_2);
END IF;
IF (g_rep_info('Apps Version') < '12.0' ) THEN
set_item_result(check_rec_patches_1);
END IF;
if ((g_rep_info('Apps Version') < '12.0' ) and (g_CU2 = 'EXPLICIT') and (g_CU1 = 'NOT_APPLIED')) then
set_item_result(check_rec_patches_1); --Check 11i Recommended Patches
elsif ((g_rep_info('Apps Version') < '12.1' ) and (g_RUP6 = 'EXPLICIT')) then
set_item_result(check_rec_patches_3); --Check R12.0 Recommended Patches minus RUP4
elsif ((g_rep_info('Apps Version') < '12.1' ) and (g_RUP6 = 'NOT_APPLIED') and (g_RUP4 = 'NOT_APPLIED')) then
set_item_result(check_rec_patches_2); --Check R12.0 Recommended Patches Min RUP4
else
set_item_result(check_rec_patches_4); --Check Recommended Patches
end if;
end_section;
debug('end section: EBS_CP_OVERVIEW');
debug('begin section: EBS_CP_REQUEST');
start_section('E-Business Applications Concurrent Request Analysis');
set_item_result(run_stored_sig('CP2_LONGRPTS'));
set_item_result(run_stored_sig('CP2_ELAPSEDHIST'));
set_item_result(run_stored_sig('CP2_CURRENTREQS'));
set_item_result(run_stored_sig('CP2_CONCREQTOTALS'));
set_item_result(run_stored_sig('CP2_CONCREQS2'));
set_item_result(run_stored_sig('CP2_PENDREQ'));
set_item_result(run_stored_sig('CP2_TOP_10_CONC_REQS'));
set_item_result(run_stored_sig('CP2_PENDING_REQUESTS'));
set_item_result(run_stored_sig('CP2_SCHEDULEDREQ'));
set_item_result(run_stored_sig('CP2_PENDREQHOLD'));
set_item_result(run_stored_sig('CP2_SCHEDULEDREQ2'));
set_item_result(run_stored_sig('CP2_LASTMONDAILY'));
set_item_result(run_stored_sig('CP2_RUNALONE'));
set_item_result(run_stored_sig('CP2_TABLESPACES'));
set_item_result(run_stored_sig('CP2_TABLESPACES2'));
end_section;
debug('end section: EBS_CP_REQUEST');
debug('begin section: EBS_CONC_MGR');
start_section('E-Business Applications Concurrent Manager Analysis');
set_item_result(run_stored_sig('CP3_CPADV1'));
set_item_result(run_stored_sig('CP3_CPADV2'));
set_item_result(run_stored_sig('CP3_CPADV3'));
set_item_result(run_stored_sig('CP3_CPADV4'));
set_item_result(run_stored_sig('CP3_CPADV5'));
set_item_result(run_stored_sig('CP3_CPADV11'));
set_item_result(run_stored_sig('CP3_CPADV12'));
set_item_result(run_stored_sig('CP3_CPADV17'));
set_item_result(run_stored_sig('CP3_FND_CP_GSM_OPP_AQTBL'));
set_item_result(run_stored_sig('BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE'));
set_item_result(run_stored_sig('OPP_PENDING_REQS'));
set_item_result(run_stored_sig('CP4_XDO_SETTINGS'));
end_section;
debug('end section: EBS_CONC_MGR');
debug('begin section: STANDARD_MANAGER');
start_section('Standard Manager Analysis');
IF g_std_mgr = 'STANDARD' and g_enabled = 'Y' and
(g_rep_info('Apps Version') >= '12.2.4' ) THEN
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_R12'));
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_CACHE'));
END IF;
IF g_std_mgr = 'STANDARD' and g_enabled = 'Y' and
(g_rep_info('Apps Version') < '12.2.4' ) THEN
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_11I'));
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_CACHE'));
END IF;
set_item_result(run_stored_sig('CP4_RUN_ALONE_PROGRAMS2'));
set_item_result(run_stored_sig('CP4_STD_MGR'));
set_item_result(run_stored_sig('CP4_STD_MGR_INCL'));
set_item_result(run_stored_sig('CP_STD_MGR_INCLUDES'));
set_item_result(run_stored_sig('CP4_STD_MGR_VALIDATE'));
set_item_result(run_stored_sig('CP4_XDO_SETTINGS'));
set_item_result(run_stored_sig('CP_STD_MGR_LONG_RUN'));
end_section;
debug('end section: STANDARD_MANAGER');
-- End of Sections and signatures
end_main_section;
l_step := '140';
g_analyzer_elapsed := stop_timer(g_analyzer_start_time);
get_current_time(l_analyzer_end_time);
print_execution_time (l_analyzer_end_time);
print_mainpage;
print_footer;
print_hidden_xml;
close_files;
IF g_is_concurrent THEN
l_completion_status:=FND_CONCURRENT.SET_COMPLETION_STATUS('NORMAL','');
END IF;
EXCEPTION WHEN others THEN
g_retcode := 2;
g_errbuf := 'Error in main at step '||l_step||': '||sqlerrm;
print_log(g_errbuf);
IF g_is_concurrent THEN
l_completion_status:=FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',g_errbuf);
END IF;
END main;
BEGIN
null;
main(
p_min_volume => p_min_volume
,p_max_volume => p_max_volume );
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('Error encountered: '||sqlerrm);
END;
/
show errors
exit;
-- Exit required for bundling project so do not remove
SET ECHO OFF
SET VERIFY OFF
SET DEFINE '~'
SET ESCAPE ON
WHENEVER SQLERROR EXIT
REM $Id: cp_analyzer.sql, 200.24 2017/03/31 09:10:25 WILLIAM.BURBAGE@ORACLE.COM Exp $
REM +=========================================================================+
REM | Copyright (c) 2001 Oracle Corporation |
REM | Redwood Shores, California, USA |
REM | All rights reserved. |
REM +=========================================================================+
REM | Framework 4.0.1 |
REM | |
REM | FILENAME |
REM | cp_analyzer.sql |
REM | |
REM | DESCRIPTION |
REM | |
REM | HISTORY |
REM +=========================================================================+
REM REM
REM ANALYZER_BUNDLE_START
REM
REM COMPAT: 11i 12.0 12.1 12.2
REM
REM MENU_TITLE: Concurrent Processing Analyzer
REM
REM MENU_START
REM
REM SQL: Run Concurrent Processing Analyzer
REM FNDLOAD: Load Concurrent Processing Analyzer as a Concurrent Program
REM
REM MENU_END
REM
REM
REM HELP_START
REM
REM Concurrent Processing Analyzer Help [Doc ID: 1411723.1]
REM
REM Compatible with: [11i|12.0|12.1|12.2]
REM
REM Explanation of available options:
REM
REM (1) Runs cp_analyzer.sql as APPS user to create an HTML report
REM
REM (2) Install Concurrent Processing Analyzer as Concurrent Program
REM o Runs FNDLOAD as APPS
REM o Defines the analyzer as a concurrent executable/program
REM o Adds the analyzer to default request group: "System Administrator Reports"
REM
REM HELP_END
REM
REM FNDLOAD_START
REM
REM PROD_TOP: FND_TOP
REM PROG_NAME: CP_ANALYZER_SQL
REM DEF_REQ_GROUP: System Administrator Reports
REM PROG_TEMPLATE: CPAZ.ldt
REM PROD_SHORT_NAME: FND
REM CP_FILE: cp_analyzer_cp.sql
REM APP_NAME: Application Object Library
REM
REM FNDLOAD_END
REM
REM DEPENDENCIES_START
REM
REM
REM
REM DEPENDENCIES_END
REM
REM OUTPUT_TYPE: UTL_FILE
REM
REM ANALYZER_BUNDLE_END
declare
apps_version FND_PRODUCT_GROUPS.RELEASE_NAME%TYPE;
BEGIN
SELECT max(release_name) INTO apps_version
FROM fnd_product_groups;
apps_version := substr(apps_version,1,4);
-- Validation to verify analyzer is run on proper e-Business application version
if apps_version NOT IN ('11.5','12.0','12.1','12.2') then
dbms_output.put_line('***************************************************************');
dbms_output.put_line('*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***');
dbms_output.put_line('***************************************************************');
dbms_output.put_line('*** This instance is eBusiness Suite version '|| apps_version ||' ');
dbms_output.put_line('*** This Analyzer script is compatible for following version(s): ');
dbms_output.put_line('*** 11i,12.0,12.1,12.2 ');
dbms_output.put_line('*** Note: the error below is intentional ');
raise_application_error(-20001, 'ERROR: The script requires eBusiness versions 11i,12.0,12.1,12.2');
end if;
END;
/
PROMPT ===========================================================================
PROMPT (Optional) Minimum acceptable volume of closed runtime FND_CONCURRENT_REQUEST data
PROMPT ===========================================================================
PROMPT
ACCEPT p_min_volume NUMBER DEFAULT '3500' PROMPT 'Enter the Minimum acceptable volume of FND_CONCURRENT_REQUEST data (3500): '
PROMPT
PROMPT ===========================================================================
PROMPT (Optional) Maximum acceptable volume of closed runtime FND_CONCURRENT_REQUEST data
PROMPT ===========================================================================
PROMPT
ACCEPT p_max_volume NUMBER DEFAULT '5000' PROMPT 'Enter the Maximum acceptable volume of FND_CONCURRENT_REQUEST data (5000): '
PROMPT
PROMPT
PROMPT
Prompt Concurrent Processing Analyzer is running...
PROMPT
DECLARE
l_debug_mode VARCHAR2(1) := 'Y';
p_min_volume NUMBER := '~p_min_volume';
p_max_volume NUMBER := '~p_max_volume';
TYPE section_rec IS RECORD(
name VARCHAR2(255),
result VARCHAR2(1), -- E,W,S
error_count NUMBER,
warn_count NUMBER,
success_count NUMBER,
print_count NUMBER);
TYPE rep_section_tbl IS TABLE OF section_rec INDEX BY BINARY_INTEGER;
TYPE hash_tbl_2k IS TABLE OF VARCHAR2(2000) INDEX BY VARCHAR2(255);
TYPE hash_tbl_4k IS TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(255);
TYPE hash_tbl_8k IS TABLE OF VARCHAR2(8000) INDEX BY VARCHAR2(255);
TYPE col_list_tbl IS TABLE OF DBMS_SQL.VARCHAR2_TABLE;
TYPE varchar_tbl IS TABLE OF VARCHAR2(255);
TYPE results_hash IS TABLE OF NUMBER INDEX BY VARCHAR(1);
TYPE parameter_rec IS RECORD(
pname VARCHAR2(255),
pvalue VARCHAR2(2000));
TYPE parameter_hash IS TABLE OF parameter_rec;
TYPE signature_rec IS RECORD(
sig_sql VARCHAR2(32000),
title VARCHAR2(255),
fail_condition VARCHAR2(4000),
problem_descr VARCHAR2(32000),
solution VARCHAR2(4000),
success_msg VARCHAR2(4000),
print_condition VARCHAR2(8),
fail_type VARCHAR2(1),
print_sql_output VARCHAR2(2),
limit_rows VARCHAR2(1),
extra_info HASH_TBL_4K,
child_sigs VARCHAR_TBL := VARCHAR_TBL(),
include_in_xml VARCHAR2(1));
TYPE signature_tbl IS TABLE OF signature_rec INDEX BY VARCHAR2(255);
TYPE colsType IS TABLE OF VARCHAR(126) INDEX BY VARCHAR(126);
TYPE hyperlinkColType IS RECORD(
cols colsType
);
TYPE sourceToDestType IS TABLE OF hyperlinkColType INDEX BY VARCHAR2(126);
TYPE destToSourceType IS TABLE OF hyperlinkColType INDEX BY VARCHAR2(126);
TYPE resultType IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(32);
TYPE sig_record IS RECORD(
sig_id VARCHAR2(320),
sig_name VARCHAR2(320),
sig_result VARCHAR2(10)
);
TYPE signatures_tbl IS TABLE OF sig_record;
TYPE section_record IS RECORD(
name VARCHAR2(320),
title VARCHAR (320),
sigs signatures_tbl,
results results_hash
);
TYPE section_record_tbl IS TABLE OF section_record;
----------------------------------
-- Global Variables --
----------------------------------
g_sect_no NUMBER := 1;
g_log_file UTL_FILE.FILE_TYPE;
g_out_file UTL_FILE.FILE_TYPE;
g_is_concurrent BOOLEAN := (to_number(nvl(FND_GLOBAL.CONC_REQUEST_ID,0)) > 0);
g_debug_mode VARCHAR2(1);
g_max_output_rows NUMBER := 10;
g_family_result VARCHAR2(1);
g_errbuf VARCHAR2(1000);
g_retcode VARCHAR2(1);
g_section_id VARCHAR2(300);
g_query_start_time TIMESTAMP;
g_query_elapsed INTERVAL DAY(2) TO SECOND(3);
g_analyzer_start_time TIMESTAMP;
g_analyzer_elapsed INTERVAL DAY(2) TO SECOND(3);
g_signatures SIGNATURE_TBL;
g_sections REP_SECTION_TBL;
g_sql_tokens HASH_TBL_2K;
g_rep_info HASH_TBL_2K;
g_parameters parameter_hash := parameter_hash();
g_exec_summary HASH_TBL_2K;
g_item_id INTEGER := 0;
g_sig_id INTEGER := 0;
g_parent_sig_id VARCHAR2(320);
analyzer_title VARCHAR2(255);
g_mos_patch_url VARCHAR2(255) :=
'https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?patchId=';
g_mos_doc_url VARCHAR2(255) :=
'https://support.oracle.com/epmos/faces/DocumentDisplay?parent=ANALYZER&sourceId=1411723.1&id=';
g_hidden_xml XMLDOM.DOMDocument;
g_dx_summary_error VARCHAR2(4000);
g_preserve_trailing_blanks BOOLEAN := false;
g_sec_detail section_record_tbl := section_record_tbl();
g_level NUMBER := 1;
g_result resulttype;
g_cloud_flag BOOLEAN := FALSE;
g_sig_count NUMBER := 0;
g_hypercount NUMBER := 1;
g_dest_to_source destToSourceType;
g_source_to_dest sourceToDestType;
g_results results_hash;
beginmin number;
beginmax number;
maxitems number;
cls_cnt number;
g_reqid_cnt number;
g_min_vol number;
g_max_vol number;
g_cp_status VARCHAR2(15);
g_nodename VARCHAR2(30);
g_cp_start_date DATE;
g_logfile_name VARCHAR2(240);
g_last_update_date DATE;
g_apps_invalid_cnt number;
g_fnd_invalid_cnt number;
g_CU1 varchar2(15);
g_CU2 varchar2(15);
g_RUP4 varchar2(15);
g_RUP6 varchar2(15);
g_run_alone_cnt number;
g_run_alone_now_cnt number;
g_std_mgr VARCHAR2(30);
g_enabled VARCHAR2(1);
g_cache NUMBER(3);
----------------------------------------------------------------
-- Debug, log and output procedures --
----------------------------------------------------------------
PROCEDURE enable_debug IS
BEGIN
g_debug_mode := 'Y';
END enable_debug;
PROCEDURE disable_debug IS
BEGIN
g_debug_mode := 'N';
END disable_debug;
PROCEDURE print_log(p_msg IN VARCHAR2) is
BEGIN
-- print only when debug flag is 'Y'
IF g_debug_mode = 'Y' THEN
IF NOT g_is_concurrent THEN
utl_file.put_line(g_log_file, p_msg);
utl_file.fflush(g_log_file);
ELSE
fnd_file.put_line(FND_FILE.LOG, p_msg);
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line(substr('Error in print_log: '||sqlerrm,1,254));
raise;
END print_log;
PROCEDURE debug(p_msg VARCHAR2) is
l_time varchar2(25);
BEGIN
-- print only when debug flag is 'Y'
IF (g_debug_mode = 'Y') THEN
l_time := to_char(sysdate,'DD-MON-YY HH24:MI:SS');
IF NOT g_is_concurrent THEN
utl_file.put_line(g_log_file, l_time||'-'||p_msg);
ELSE
fnd_file.put_line(FND_FILE.LOG, l_time||'-'||p_msg);
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in debug');
raise;
END debug;
PROCEDURE print_out(p_msg IN VARCHAR2
,p_newline IN VARCHAR DEFAULT 'Y' ) is
BEGIN
IF NOT g_is_concurrent THEN
IF (p_newline = 'N') THEN
utl_file.put(g_out_file, p_msg);
ELSE
utl_file.put_line(g_out_file, p_msg);
END IF;
utl_file.fflush(g_out_file);
ELSE
IF (p_newline = 'N') THEN
fnd_file.put(FND_FILE.OUTPUT, p_msg);
ELSE
fnd_file.put_line(FND_FILE.OUTPUT, p_msg);
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_out');
raise;
END print_out;
PROCEDURE print_error
(p_msg VARCHAR2,
p_sig_id VARCHAR2 DEFAULT '',
p_section_id VARCHAR2 DEFAULT '')
IS
BEGIN
print_out('<div class="data sigcontainer signature E section print analysis" level="1" id="'||p_sig_id||'" style="display: none;">'||p_msg);
print_out('</div>');
-- ER #124 Show in unix session the error if parameter or additional validation failed.
IF NOT g_is_concurrent THEN
IF p_msg LIKE 'INVALID ARGUMENT:%' THEN
-- from Parameters validations if exist
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** ERROR ERROR ERROR ERROR ERROR ERROR ****');
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** The analyzer did not run to completion!');
dbms_output.put_line('**** '||p_msg);
dbms_output.put_line('**** Please rerun the analyzer with proper parameter value.');
ELSIF p_msg LIKE 'PROGRAM ERROR%' THEN
-- from calls in run_sig_sql and run_stored_sig which are seen in output only
null;
ELSE
-- from Additional Validation if exist
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** ERROR ERROR ERROR ERROR ERROR ERROR ****');
dbms_output.put_line('**************************************************');
dbms_output.put_line('**** The analyzer did not run to completion!');
dbms_output.put_line('**** '||p_msg);
END IF;
END IF;
END print_error;
----------------------------------------------------------------
--- Time Management ---
----------------------------------------------------------------
PROCEDURE get_current_time (p_time IN OUT TIMESTAMP) IS
BEGIN
SELECT localtimestamp(3) INTO p_time
FROM dual;
END get_current_time;
FUNCTION stop_timer(p_start_time IN TIMESTAMP) RETURN INTERVAL DAY TO SECOND IS
l_elapsed INTERVAL DAY(2) TO SECOND(3);
BEGIN
SELECT localtimestamp - p_start_time INTO l_elapsed
FROM dual;
RETURN l_elapsed;
END stop_timer;
FUNCTION format_elapsed (p_elapsed IN INTERVAL DAY TO SECOND) RETURN VARCHAR2 IS
l_days VARCHAR2(3);
l_hours VARCHAR2(2);
l_minutes VARCHAR2(2);
l_seconds VARCHAR2(6);
l_fmt_elapsed VARCHAR2(80);
BEGIN
l_days := EXTRACT(DAY FROM p_elapsed);
IF to_number(l_days) > 0 THEN
l_fmt_elapsed := l_days||' days';
END IF;
l_hours := EXTRACT(HOUR FROM p_elapsed);
IF to_number(l_hours) > 0 THEN
IF length(l_fmt_elapsed) > 0 THEN
l_fmt_elapsed := l_fmt_elapsed||', ';
END IF;
l_fmt_elapsed := l_fmt_elapsed || l_hours||' Hrs';
END IF;
l_minutes := EXTRACT(MINUTE FROM p_elapsed);
IF to_number(l_minutes) > 0 THEN
IF length(l_fmt_elapsed) > 0 THEN
l_fmt_elapsed := l_fmt_elapsed||', ';
END IF;
l_fmt_elapsed := l_fmt_elapsed || l_minutes||' Min';
END IF;
l_seconds := EXTRACT(SECOND FROM p_elapsed);
IF length(l_fmt_elapsed) > 0 THEN
l_fmt_elapsed := l_fmt_elapsed||', ';
END IF;
l_fmt_elapsed := l_fmt_elapsed || l_seconds||' Sec';
RETURN(l_fmt_elapsed);
END format_elapsed;
----------------------------------------------------------------
--- Set Cloud flag ---
----------------------------------------------------------------
PROCEDURE set_cloud_flag IS
l_response VARCHAR2(2000);
BEGIN
BEGIN
SELECT '1'
INTO l_response
FROM dual
WHERE EXISTS (
SELECT 1
FROM (SELECT db_domain AS domain FROM fnd_databases
UNION ALL
SELECT domain AS domain FROM fnd_nodes) domains
WHERE UPPER(domains.domain) LIKE '%ORACLECLOUD.%');
-- If a row is selected we are on the cloud
IF SQL%ROWCOUNT > 0 THEN
g_cloud_flag := TRUE;
RETURN;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
g_cloud_flag := FALSE;
WHEN OTHERS THEN
g_cloud_flag := FALSE;
dbms_output.put_line('Exception: '||sqlerrm||' in initialize_files');
END;
BEGIN
-- set transfertimeout to 15 seconds, we don’t want the analyzer waiting more than that
UTL_HTTP.set_transfer_timeout(15);
SELECT Utl_http.request('http://192.0.0.192/latest/meta-data')
INTO l_response
FROM dual;
-- Check if the response is indeed from an Oracle cloud 192.0.0.192 service
IF lower(l_response) LIKE '%local-hostname%' THEN
g_cloud_flag := TRUE;
RETURN;
END IF;
EXCEPTION
WHEN OTHERS THEN
-- we are NOT on the cloud
g_cloud_flag := FALSE;
RETURN;
END;
END set_cloud_flag;
----------------------------------------------------------------
--- File Management ---
----------------------------------------------------------------
PROCEDURE initialize_files is
l_date_char VARCHAR2(20);
l_log_file VARCHAR2(200);
l_out_file VARCHAR2(200);
l_file_location V$PARAMETER.VALUE%TYPE;
l_instance VARCHAR2(40);
l_host VARCHAR2(40);
NO_UTL_DIR EXCEPTION;
BEGIN
get_current_time(g_analyzer_start_time);
IF NOT g_is_concurrent THEN
SELECT to_char(sysdate,'YYYY-MM-DD_hh_mi') INTO l_date_char from dual;
SELECT instance_name, host_name
INTO l_instance, l_host
FROM v$instance;
l_log_file := 'CP_Analyzer_'||l_instance||'_'||l_date_char||'.log';
l_out_file := 'CP_Analyzer_'||l_instance||'_'||l_date_char||'.html';
SELECT decode(instr(value,','),0,value,
SUBSTR (value,1,instr(value,',') - 1))
INTO l_file_location
FROM v$parameter
WHERE name = 'utl_file_dir';
-- Set maximum line size to 10000 for encoding of base64 icon
IF l_file_location IS NULL THEN
RAISE NO_UTL_DIR;
ELSE
g_out_file := utl_file.fopen(l_file_location, l_out_file, 'w',32000);
IF g_debug_mode = 'Y' THEN
g_log_file := utl_file.fopen(l_file_location, l_log_file, 'w',10000);
END IF;
END IF;
dbms_output.put_line('Files are located on Host : '||l_host);
dbms_output.put_line('Output file : '||l_file_location||'/'||l_out_file);
IF g_debug_mode = 'Y' THEN
dbms_output.put_line('Log file : '||l_file_location||'/'||l_log_file);
END IF;
END IF;
EXCEPTION
WHEN NO_UTL_DIR THEN
dbms_output.put_line('Exception: Unable to identify a valid output '||
'directory for UTL_FILE in initialize_files');
raise;
WHEN OTHERS THEN
dbms_output.put_line('Exception: '||sqlerrm||' in initialize_files');
raise;
END initialize_files;
PROCEDURE close_files IS
BEGIN
debug('Entered close_files');
print_out('</BODY></HTML>');
IF NOT g_is_concurrent THEN
debug('Closing files');
IF g_debug_mode = 'Y' THEN
utl_file.fclose(g_log_file);
END IF;
utl_file.fclose(g_out_file);
END IF;
END close_files;
----------------------------------------------------------------
-- REPORTING PROCEDURES --
----------------------------------------------------------------
----------------------------------------------------------------
-- UTILITIES --
----------------------------------------------------------------
----------------------------------------------------------------
-- Replace invalid chars in the sig name (so we can use the --
-- the sig name as CSS class --
----------------------------------------------------------------
FUNCTION replace_chars(p_name VARCHAR2) RETURN VARCHAR2 IS
l_name VARCHAR2(512);
BEGIN
-- replace existing _ with double _ and spaces with _ (to avoid multi-word section and signature names)
-- replace also existing - with double - and . with _ (as Firefox does not accept . in the css class name)
l_name := REPLACE(p_name, '%', '_PERCENT_');
l_name := REPLACE(l_name, ':', '_COLON_');
l_name := REPLACE(l_name, '/', '_SLASH_');
l_name := REPLACE(l_name, '&', '_AMP_');
l_name := REPLACE(l_name, '<', '_LT_');
l_name := REPLACE(l_name, '>', '_GT_');
l_name := REPLACE(l_name, '(', '__');
l_name := REPLACE(l_name, ')', '__');
l_name := REPLACE(l_name, '_', '__');
l_name := REPLACE(l_name, '-', '--');
l_name := REPLACE(l_name, '.', '-');
l_name := REPLACE(l_name, ',', '----');
RETURN REPLACE(l_name, ' ', '_');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_page_header: '||sqlerrm);
return p_name;
END replace_chars;
----------------------------------------------------------------
--- Escape HTML characters (< , > ) ---
----------------------------------------------------------------
FUNCTION escape_html_chars(p_text VARCHAR2) RETURN VARCHAR2 IS
l_out_text VARCHAR2(32767);
BEGIN
l_out_text := REPLACE(REPLACE(p_text, '>', '>'), '<', '<');
RETURN l_out_text;
EXCEPTION
WHEN OTHERS THEN
print_log('Exception: '||sqlerrm||' in escape_html_chars');
END escape_html_chars;
----------------------------------------------------------------
-- Prints the Cloud image in the page header and --
-- also in the Execution Details pop-up page, --
-- if the domain like “%oraclecloud.internal%” --
----------------------------------------------------------------
PROCEDURE print_cloud_image IS
BEGIN
IF (g_cloud_flag = TRUE) THEN
print_out ('<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAepJREFUeNq01U9IVFEUx/FxHEFNNAPdCEGMKLQJpVwIokYzJYpiCNGqchEIQiBUIu0E/4DgQlwVBq2Cgv4oBQOC/6hAWrQIXAilhC5caCL+qcX4PfJb2HDHec9mLnx478277553z5x7XzAejwcyKRjIcMuKRCLJ7p3FA3SgHL/xDeN47zVAdjgcdv1+EQtoQylCKIB1vo0LOMAfBU7aXCkqwkecxxc0Ig9leIhd3MEHrGAGl/wE6NHgn1GvAfaxhhG0YhoxbKuP9b3qJUA+bum8TylIbDb4NVzXrJ5phq8wpoDOAPfwE5W6/uThP9zBfQU9h27N+C0KjwcYxgRKsIj+JG/vanHcRbOe21JxvLEisjJt4WRSA9qf9/I/S98qbF7p67QZPNKN3jQMbu0HHuv8KEC1Lp6ncQFP6VhlAbJ14cr5rHJ8khnHc3s65gS1/K3dcHTM9/C2rj6XdVy2AC90MYjihI5XbL9KoSZxf8MTnb+zAE9VmhXaGlq0cPymKEt72Gs0YQOjFuCv6vargljJLvlI0RkdB/AdN7GJdgsS0s111KLLSgu5x1IU8LHgfukFh7Ca6ntgbQ51KQa2NDb42U3/+V54ePOcE79o9t10tWg06mtlxWKxU81g7pQLzXOAUMZSlK52KMAAKSLBDAvj51YAAAAASUVORK5CYII=" class="smallimg" title="This is a Cloud instance">');
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_cloud_image: '||sqlerrm);
END print_cloud_image;
----------------------------------------------------------------
-- Prints HTML page header and auxiliary Javascript functions --
-- Notes: --
-- Looknfeel styles for the o/p must be changed here --
----------------------------------------------------------------
PROCEDURE print_page_header is
BEGIN
-- HTML header
print_out('
<HTML><HEAD>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta http-equiv="X-UA-Compatible" content="IE=edge">');
-- Page Title
print_out('<TITLE>CP Analyzer Report</TITLE>');
-- Styles
print_out('
<STYLE type="text/css">
* {
font-family: "Segoe UI";
color: #505050;
font-size: inherit;
}
a {
color: #3973ac;
border: none;
text-decoration: none;
}
img {
border: none;
}
a.hypersource {
color: blue;
text-decoration: underline;
}
a.nolink {
color: #505050;
text-decoration: none;
}
.successcount {
color: #76b418;
font-size: 20px;
font-weight: bold;
}
.warncount {
color: #fcce4b;
font-size: 20px;
font-weight: bold;
}
.errcount {
color: #e5001e;
font-size: 20px;
font-weight: bold;
}
.infocount {
color: #000000;
font-size: 20px;
font-weight: bold;
}
input[type=checkbox] {
cursor: pointer;
border: 0;
display:none;
}
.exportcheck {
margin-bottom: 0;
padding-bottom: 0;
}
.export2Txt {
padding-left: 2px;
}
.pageheader {
position: fixed;
top: 0;
width: 100%;
height: 75px;
background-color: #F5F5F5;
color: #505050;
margin: 0px;
border: 0;
padding: 0;
box-shadow: 10px 0px 5px #888888;
z-index: 1;
}
.header_s1 {
margin-top: 6px;
}
.header_img {
float: left;
margin-top: 8px;
margin-right: 8px;
}
.header_title {
display: inline;
font-weight: 600;
font-size: 20px;
}
.header_subtitle {
font-weight: 300;
font-size: 13px;
}
.menubox_subtitle {
font-weight: 300;
font-size: 13px;
}
.header_version {
height: 16px;
lenght: 32px;
opacity: 0.85;
}
td.hlt {
padding: inherit;
font-family: inherit;
font-size: inherit;
font-weight: bold;
color: #333333;
background-color: #FFE864;
text-indent: 0px;
}
.blacklink:link, .blacklink:visited, .blacklink:link:active, .blacklink:visited:active {
color: #505050;
}
.blacklink:hover{
color: #808080;
}
.error_small, .success_small, .warning_small {
vertical-align:middle;
display: inline-block;
width: 24px;
height: 24px;
}
.h1 {
font-size: 20px;
font-weight: bold;
}
.background {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAIElEQVQIW2P49evX27dvf4EBhMGAzIEwGNCUQFWRpREAFU9npcsNrzoAAAAASUVORK5CYII=");
}
.body {
top: 30px;
width: 100%;
padding: 0;
font-size: 14px;
}
.footerarea {
height: 35px;
bottom: 0;
position: fixed;
width: 100%;
background-color: #F5F5F5;
border-top: 1px solid #D9DFE3;
z-index:100;
}
.footer {
visibility: visible;
max-height: 29px;
min-height: 29px;
background-color: #F5F5F5;
color: #145c9e;
font-weight: normal;
font-size: 14px;
}
.separator {
border-left: 1px solid #D6DFE6;
margin-left: 10px;
margin-right: 10px;
height: 22px;
width: 0px;
vertical-align: middle;
display: inline-block;
}
body {
color: #505050;
margin: 0;
padding: 0;
background-color: #F5F5F5;
overflow-y: auto;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAIElEQVQIW2P49evX27dvf4EBhMGAzIEwGNCUQFWRpREAFU9npcsNrzoAAAAASUVORK5CYII=");
}
.header, .footer { padding: 0 1em;}
.icon {
border: none;
vertical-align:middle;
width: 32px;
height: 32px;
display: inline-block;
}
.table1 {
vertical-align: middle;
text-align: left;
padding: 3px;
margin: 1px;
min-width: 1200px;
font-size: small;
border-spacing: 1px;
border-collapse: collapse;
}
tr.tdata td{
border: 1px solid #f2f4f7;
}
.topmenu {
position: absolute;
right: 50px;
float: right;
bottom: 10;
font-size: 12px;
color: #505050;
font-weight: bold;
text-shadow: none;
background-color: #f7f8f9;
background-image: none;
}
.fullsection {
padding-right: 5px;
}
.menubutton {
border: 1px solid;
cursor: pointer;
style: inline;
float: left;
background-color: #fafafa;
background-image: none;
padding: 4px 15px 1px 10px;
height: 28px;
border-color: #d9dfe3;
filter: none;
border-left-color: rgba(217, 223, 227, 0.7);
border-right-color: rgba(217, 223, 227, 0.7);
text-shadow: none;
vertical-align: middle;
font-weight: 600;
font-size: 14px;
}
.menubutton:hover {
background-color: #EEEEEE;
}
.smallimg {
padding: 0px 2px 1px 0px;
vertical-align: middle;
height: 18px;
width: 18px;
opacity: 0.75;
}
.menubox {
border: 1px solid lightblue;
background-color: #FFFFFF;
style: inline;
width: 250px;
height: 290px;
float: left;
padding: 10px;
border-radius:2px;
border: 1px solid #E7E7E9;
}
.menuboxitem {
white-space: nowrap;
font-size: 18px;
cursor: pointer;
padding: 10px 0 10px 0;
}
.menuboxitem:hover {
background-color: #EEEEEE;
}
.menuboxitemt {
white-space: nowrap;
font-size: 18px;
padding: 10px 0 10px 0;
}
.mboxelem {
margin-left:8px;
text-align:left;
display:inline-block;
}
.mboxinner {
margin-left: 15px;
margin-top: 6px;
}
.mainmenu {
scroll-y: auto;
padding: 50px 100px 50px 100px;
}
.maindata {
display: none;
width: auto;
overflow: visible;
min-height: 600px;
height: 100%;
}
.leftcell {
width:200px;
vertical-align:top;
padding: 0;
}
.rightcell {
vertical-align:top;
padding: 0;
}
.floating-box {
display: inline-block;
width: 277px;
height: 120px;
margin: 5px;
padding: 10px;
border: 1px solid #E7E7E9;;
background-color: #FFFFFF;
text-align: center;
border-radius:2px;
font-size: 16px;
}
.floating-box:hover {
background-color: #bfdde5;
font-weight: 600;
}
.textbox {
text-align: center;
height: 60px;
width: 100%;
}
.counternumber {
padding: 5px;
vertical-align: top;
height: 100%;
display: inline;
vertical-align:middle;
}
.counterbox {
padding-top: 10px;
height: 30px;
font-size:20px;
font-weight:bold;
width: 100%;
border: none;
}
.popup {
width:100%;
height:100%;
display:none;
position:fixed;
top:0px;
left:0px;
background:rgba(0,0,0,0.75);
border: solid 1px #8794A3;
border-color: #c4ced7;
color: #333333;
}
.popup-inner {
max-width:700px;
width:90%;
padding:0;
position:absolute;
top:50%;
left:50%;
-webkit-transform:translate(-50%, -50%);
transform:translate(-50%, -50%);
box-shadow:0px 2px 6px rgba(0,0,0,1);
border-radius:3px;
background:#fff;
font-size: 14px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAIElEQVQIW2P49evX27dvf4EBhMGAzIEwGNCUQFWRpREAFU9npcsNrzoAAAAASUVORK5CYII=");
}
');
print_out('
.popup-title {
display: table-cell;
vertical-align: top;
top: 10px;
padding: 10px;
border-bottom: 1px solid lightblue;
background-color: #F5F5F5;
}
.close-button {
display: inline-block;
padding: 4px 7px 1px 7px;
margin-right:20px;
margin-bottom:20px;
float:right;
vertical-align: bottom;
min-height: 18px;
border: 1px solid #c4ced7;
border-radius: 2px;
background-color: #E4E8EA;
font-size: 12px;
color: #000000;
text-shadow: 0px 1px 0px #FFFFFF;
font-weight: bold;
}
.close-button:hover {
background-color: #FFFFFF;
}
.popup-paramname {
display: table-cell;
width: 33%;
text-align: left;
vertical-align: top;
padding: 10px 5px 5px 10px;
}
.popup-paramval {
display: table-cell;
width: 67%;
text-align: left;
vertical-align: top;
padding: 10px 10px 5px 5px;
}
.close-link {
padding: 0 12px 10px 10px;
text-align: right;
float: right;
font-color: blue;
}
.popup-value {
display: table-cell;
vertical-align: top;
top: 10px;
border-bottom: 1px solid lightblue;
background-color: #F5F5F5;
}
.sectionmenu {
border-top: 1px solid #E7E7E9;
border-radius: 5px 0 0 5px;
margin: 0 0 2px 7px;
left:0px;
width:200px;
z-index: 3;
}
.sectionbutton {
cursor: pointer;
background-color: #e7ecf0;
border-left: 1px solid #D6DFE6;
border-bottom: 1px solid #D6DFE6;
border:right: 2px solid white
font-weight: normal;
font-size: 14px;
border-top: 0;
border-right: 0;
border-radius: 5px 0 0 5px;
padding: 5px;
display: none;
margin-right: 0;
word-wrap: break-word;
}
.sigcontainer {
font-weight: normal;
font-size: 12px;
background-color: #FFFFFF;
border: 1px solid #D6DFE6;
border-radius: 3px;
padding: 5px;
margin: 5px 5px 5px 5px;
width: auto;
display: block;
z-index:2;
}
.containertitle {
font-weight: bold;
font-size: 25px;
text-align: center;
padding-bottom: 10px;
padding-top: 5px;
}
.searchbox {
width:100%;
font-size: 14px;
display:block;
padding-left: 5px;
}
.search{
display:block;
font-weight: normal;
font-size: 12px;
color: #333333;
border-radius: 2px;
background-color: #FCFDFE;
border: 1px solid #DFE4E7;
padding: 6px 5px 5px 5px;
height: 28px;
margin-top: 5px;
}
.expcoll {
display:block;
padding-left:5px;
padding-top:5px;
padding-bottom:5px;
margin-left:10px;
float:left;
font-size: 12px;
}
.sigtitle {
font-size: small;
}
.sigdetails {
font-size: 12px;
margin-bottom: 2px;
padding: 6px;
}
.signature {
border-style: 1px solid #EAEAEA;
padding: 6px;
font-size: 12px;
font-weight: normal;
}
.divtable {
overflow-x: hidden;
width: 100%;
z-index:3;
margin: 3px;
margin-right: 10px;
}
.results {
z-index:4;
margin: 5px;
}
.divitemtitle{
text-align: left;
font-size: 18px;
font-weight: 600;
color: #336699;
border-bottom-style: dotted;
border-bottom-width: 1px;
border-bottom-color: #336699;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.divitemtitlet{
font-size: 16px;
font-weight: 600;
color: #336699;
border-bottom-style: none;
}
.arrowright, .arrowdown {
display: inline-block;
cursor: context-menu;
font-size: 12px;
color: #336699;
padding: 2px 0px 10px 2px;
vertical-align: middle;
height: 18px;
width: 18px;
}
.divwarn {
color: #333333;
background-color: #FFEF95;
border: 0px solid #FDC400;
padding: 9px;
margin: 0px;
font-size: small;
min-width:1200px;
}
.divwarn1 {
font-size: small;
font-weight: bold;
color: #9B7500;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.solution {
font-weight: normal;
color: #0572ce;
font-size: small;
font-weight: bold
}
.detailsmall {
text-decoration:none;
font-size: xx-small;
cursor: pointer;
display: inline;
}
.divuar {
border: 1px none #00CC99;
font-size: small;
font-weight: normal;
background-color: #ffd6cc;
color: #333333;
padding: 9px;
margin: 3px;
min-width:1200px;
}
.divuar1 {
font-size: small;
font-weight: bold;
color: #CC0000;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.divok {
border: 1px none #00CC99;
font-size: small;
font-weight: normal;
background-color: #d9f2d9;
color: #333333;
padding: 9px;
margin: 3px;
min-width:1200px;
}
.divok1 {
font-size: small;
font-weight: bold;
color: #006600;
margin-bottom: 9px;
padding-bottom: 2px;
margin-left: 3px;
margin-right: 3px;
}
.anchor{
padding-top: 100px;
color: #505050;
}
.tabledata tr[visible=''false''],
.no-result{
display:none;
}
.exportAll {
display:inline;
}
.exportAllImg {
display:inline;
}
.tabledata tr[visible=''true'']{
display:table-row;
}
.counter{
padding:8px;
color:#ccc;
}
.tablesorter-default .header,
.tablesorter-default .tablesorter-header {
background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
background-position: center right;
background-repeat: no-repeat;
cursor: pointer;
white-space: normal;
padding: 4px 20px 4px 4px;
}
.tablesorter-default thead .headerSortUp,
.tablesorter-default thead .tablesorter-headerSortUp,
.tablesorter-default thead .tablesorter-headerAsc {
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
border-bottom: #CC6666 1px solid;
}
.tablesorter-default thead .headerSortDown,
.tablesorter-default thead .tablesorter-headerSortDown,
.tablesorter-default thead .tablesorter-headerDesc {
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
border-bottom: #CC6666 1px solid;
}
.tablesorter-default thead .sorter-false {
background-image: none;
cursor: default;
padding: 4px;
}
');
print_out('
.brokenlink {
display: inline-block;
height: 15px;
width: 10px;
background-image: url("data:image/false;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAABLSURBVChTY/wPBAxEACYoTRCgKrw3h+GTrCrDO+85DH+hQjBApol4AHaFGkoMzFAmDNDaaiUlnDqJNpHMmNlTzvCO0gCndqJgYAAAyhkXWDyo/t0AAAAASUVORK5CYII=");
}
');
print_out('
.siginfo_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXNJREFUeNqUU80uA1EYPXNHSliMaJPZ6EITi5LY8ARiUSuPYFOKjXTjISxYo30ADyCxaDyENGLVkJakSYsR/RlFnXvvVCYzpvRLzvzdc858Ofe7BraLCNQCkSXWiTnvW4W4JArEjZ885nuOEUfELuJJgSmLq+N6peem0XbSaFb3+XZG5ImO30CKL2DZa0gkEarYhMa0LWiSw0t93uvwXXiU40hxsOLkWPaq1y2kwSKRQ2I2xO0fLCmESnN3pFaowBJJEzDw/yJXaZCVGWQwaf1OO7yO9lCaakYapH7SDrQ/1EhrUiKyyWF/V3/oY7ALFXy4GLm05l6oCWs7oxt0XuW1JA2KaFQ/2VNkBuGtJFdpUJAhlokTNGp7/kEamkGjBqWhdhBiHk69RNe/W2+S49SvvPMAE8sb8i7bOYfbmsHz4wpM04DJ5oSp0+51gbcn4OH2C93WKbmbhKtHKnyc5WhvqQGTM8KtIu5kYN5xLvvJ3wIMAEduatirqrxIAAAAAElFTkSuQmCC");
}
');
print_out('
.export_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2QUVENDk5NjdGMjM2ODExODIyQURBRDlDNkZERTUzMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBOTRBQzQzMTQ3NjkxMUU0OTZEMEZDMjFEMDE4Q0VDRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBOTRBQzQzMDQ3NjkxMUU0OTZEMEZDMjFEMDE4Q0VDRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTM0ODVEQ0I0ODIwNjgxMTgyMkFCMTdDQzcxMzg3NzIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkFFRDQ5OTY3RjIzNjgxMTgyMkFEQUQ5QzZGREU1MzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6s1KKrAAAAf0lEQVR42mI07fb79+PvT0YGMgAXM8c/FpBmCRVpcvQzvLjzlImJgUIw8AYw7tix47+trS1Zmg8fPjwIvMCCTzJgey6G2AbPyaS5oNk8H4UmygXINteenIhCEx0GMBthTkZ3OkEDYDbCXIMtPHB6AZdtNEuJ74G0AJn63wAEGACAQStffMHfsAAAAABJRU5ErkJggg==");
}
');
print_out('
.export_txt_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADaGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjZBRUQ0OTk2N0YyMzY4MTE4MjJBREFEOUM2RkRFNTMzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE5NEFDNDMxNDc2OTExRTQ5NkQwRkMyMUQwMThDRUNGIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE5NEFDNDMwNDc2OTExRTQ5NkQwRkMyMUQwMThDRUNGIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzQ4NURDQjQ4MjA2ODExODIyQUIxN0NDNzEzODc3MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2QUVENDk5NjdGMjM2ODExODIyQURBRDlDNkZERTUzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqzUoqsAAABNSURBVDhPY7T3OPOfgQIANiBqohyUSxpYlv+IgQnKJhsMvAGMO3bs+G9rawvlkgYOHz48HMJg1IDBYADjnj17/v/58wfKJQ2wsbExAABtqBQh7LAlsQAAAABJRU5ErkJggg==");
}
');
print_out('
.sort_ico {
display: inline-block;
height: 16px;
width: 16px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALhJREFUeNpi/P//PwMMtO15wQikVgMxiA6pcpFASELkwXygOCNMjIkBFdQBcTAQBwFxPQMRgAnJ9AA0TXVAsSCiDAAq1AFSi6BOhwEQeyFQTpcYFywEYl4s8jxAvBifASzQQDHGF1BEhQG5YNQAaCzgA8BYOQukjLAlaSC4SIwLEoD4MxbxL0AcS9AAYHq4DKTigRg5Y4HY8SA5osIAqHA9kGpEEmoCiq0jKgyQNQGxLjSPwA0DCDAAMMM1IrHFpIQAAAAASUVORK5CYII=");
}
');
print_out('
.information_ico {
display: inline-block;
height: 32px;
width: 32px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdhJREFUeNrEl70vA3EYx69NK5VSFjpLu0lKLF0s0kXKZmEn5i5qtHmJhD+AmYENsTSWiq2RSzppY2660FKSDvV95Fuheud3516+yWe5l+f53u/tniewvX+oKWoILIA5MA0mwAjvPYNHcA9uwCV4UQkaUngmCfJgBUQNnhknabAOXsEJ2AUVs+BBk3sRsAPKYNUkeT9F+U6ZJiJWDSTAHb98QLMveXeDsZKqBmbALefZKUmsImObGhCX1yCuOa84YyeNDAyCMzCmuSeJfc5cvwxsgSnNfaWY64cBWXQ5i4ECPVhRrjsVXQObIKx5pzBzfhoY5iHjtZYltxjIWjxknJLkzMpRnLEZoOOAiUyQq9IvpULcAVZXv1MjkpARiPk4ArGgzbnvOOVADDR8HIGGGKj6aKAqBnQfDehioOCjgYIYuGIN57VaklsMNMGpjb+g6nUjSdHa7G5DKT7bHn59m8Xq1+9YSucDi+eAESqSZuShX0XkxY7Q+1VEojewBOouJq8zR8uoKpapmAc1F5LXGLvyV19QArMOT4fOmCXVzqjCPm/vn7ujzRhpox7R7G/4ztZsEhx9nzcFyXo65rt5xrLdHct2WWMpvdjTno/ymaee9vxCtT3/EGAAeihgXfXnZOsAAAAASUVORK5CYII=");
}
');
print_out('
.warn_ico {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA15JREFUeNqsV81qFEEQ7umZjbuLgqgg69/Bg+bgQb1kD3qQmFXEJxB8Ah9AxLN4SbyYTR5AyAsoimZzioLJQfAgmlwUwRVNIoG4ycrOTPt9szPLZDI/PZMtqMxmuru+r6q7aqqN3odbIkm63X+D35ZlHldKPFBKTUDP4FUVT8kxwzBcPLbx/A6dNwzx2LadX+XyAZElRhYBAI+7rmq6rnveNKWQUhJwoBQQGSjmCcdxOW9FSuOeZVkLhQjYtn0YBl/BWB1GSETkEUSANgRIL4HoTdjYjJsnE8CvAbiNhXWGMS+4v2WCa2FjjLZgc1yLACbewYKWaZoVer5foQ3ags03tJ1KgCwx8RnYSw2vO9AL0IvQv1nRoE3ajkZChsCPYMJzsJVQHeeaOKSfoB/xezprMm3SNjBeEGsPARy4lxivaO43PZ4M/T+ZFYUgEsAoE2sXAf/QjeXYc3q/FkrXDZ0oBGeCWMFWeASQ57M5wOnpVMx7RmFLlwQwZzwCYFJjkcmRatNh74tFwWTBOkdsieJ1nxUuh/eDvUeeL1JD41O6USAmsUFA3WB5zeH9Ruj/K76Go/BUxxAxPWz8ORXU9AzZipz8JHmiEwViEhuuq6omgaj3SR8wrSj0MVWVZ0BqEEg6+YWj0I+A0N58Le+LZAS8Fy6/40P0XisjiElsRMDYziDAqreeMPYW+i4lCs00AsQ2Ou8nPiMnRxM+QPT+bFzh0RHUiKN4fIUeio45jsOS/IUH8DXbqASZKQqeFQViEtvYWW7U0D61YxrIju/97xQPF32gqxlR+AY9GNNvnkDjYf1EVVplDxeR2TTwcEblzQhiEZPYXlPKTyNetiJROInFbTEEgd1jeKxFvG+AwLz0P48L7F7ZxYbkkhieXA51XvwQLRN8V1vut2Q/kA3lIl2wbquO098FgdMgsL6rJcOLPxi4jQkuU2TY0k87xyVGAL6nK/a34i6YujGHcl+e0yZtR29KMqZdmsPEBkMVORMFwe0g7Dx0c1o3Iz8SNZTLJZ7YItHgGq6lDdpKuiPKlMZxs38vNBuoWis01uv1vL1EQynC34/+pVR5Y5zDuVizyrWlUqmedC/0cDQ8YbqM+tfzhyB1XSmH1/NK5Hq+41/PW5j7iNfzkZHs6/l/AQYA4OEjjlxSJk0AAAAASUVORK5CYII=");
}
');
print_out('
.error_ico {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA8BJREFUeNq0V81rE0EUf7PpponWCnoRoSJa0VKoCtKDVuvFkxar9SJePNRDBS3mj1BEeip4MRdBq4cKgiKCIH6hIFoVRYVWCuIH4snSNEmT7Ph7u5O63c7sbmI68JL9mvf7vTfvvXkjvtEGMo0cyYXrFSRWlYkyDsl+h2gT3rRALH4niBxIHvIVD+4JEhfnSf5eyW8ihogiAOBtJZJXKkS7oc5KQCmjWh6wO6QSEKMyrvAvE0Rv8e1gE9FEGAEr5F2qmcS1AsmPUN6DaysFSBsvEj5w5QFXURNPwl2ahMCznfDCa8hd93GNBNoxcbpI8oQNZc3K6riDCSXxy/NA/iD0fIdXOmMRwIRuTHiPy3Vwv2tVvYM9xSRAaA0MmgCJnigCW/DhE0xIJb2JDRlJz4NJ6H4IEh0mAmkF3pxsGPQSEjYC+iljLSGAFMuW4HZ7MTiCn0YhhyAXIKUYWEXIechhyGWVIAskcLMWSq4vSkM83Ipo/8QBF1jzUaTi2eoN8pqJ3HJ16UcBcgRz7vvmMIkhv0WIMYls6YL1H1wPwC1ZXAhNwD0I1AVOqQHIfBxwnY6El64C9SLrLgGsb+UiY+vXfY+mODGJYwESJnAee4MPmoCFJe8G9moLF8Nc4Qx5fk65PUjijo+EERxzj+LvjC71LNcLlBFfqO2NRWKHbQ4qBhlQlgcB+ngFQ8BvmOKl5JZu+U5MUtsfRGdrIjyyjSR0Iwq8GoxI+xmOgRYrThoj+nXLUQ94dRlcbN5SRdxaEkEiLnh1v5Dm2DMO6dUs4yjVWiHZekfG+5YrXL8h1XTZEWkJYzOBnNMA8FpJOB6BHK/BtFMnONZ8IEadMBJgbBAQtyskw9LPCI6/MRWYfbWSYEzGtlCXR8DGMXjhUgR4Usl4CIkRnfUwWTI2x8AMLl6U9F54FQHuT1EtCdI0pYyFwvecsS21OZziTlaTXwdigEeR2O+/KXsekNj8Bkk1shwM3AvcxD593FrcgA5BIXvsMWQXJAOxI4oVkxhRljP4aX/qAYP7xDFY/zl4LkijikxJkuuXoyXzItpd5p/Q347/uWBPmIdpvfikME9yWcChNQ/w3iq4riue4g+qJBpBw/kHPgfX78PtZOi5AM5/iQ+7cPlrDtPK/wHOc/PQgQb/B3Ru12WVaTOahCc2crAgZWTRO+/FHqrx5HTj5vMqlnYze7fWs2GBj2ZQ0AmvPONOtuAq9QBkYGOpqK2QLYbLHWTTI8ztQL6fVG1bfafjGo7ns7iZAvC47bXzs3GO538FGABlYXzRnnOThQAAAABJRU5ErkJggg==");
}
');
print_out('
.success_ico {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZJREFUeNqsl8tLFVEcx2fOqHgjKoIyQwyiUqJFi8AbBCWmlhpFG0PoH6igVkW0iSCiZYuK1j0gSFpkDx+ZRYusv0A3QfQgiLCNWXln+nzHuXKdOzN3HO+Bn+c6c8738z2POQ/7/FCDFZf+/vu3+NsxpsGzrIuW53WSN3uet4rHJnjt2rY9a1vWJ8u2R8mvFVz3e11trVUp1VQqALgD2E0EW4wxlgKYxR/LDsp4MuJ5qym30yUoe9bY9lShUDjtOM7LTAaovA7Yc8TyiFh1xsSK+EZkiPBLUV6G0RjD3CTvD6ExE1XXxMDbaclXKubVjU4CPKHnLNVFo01aaHakMkDBAdyP0fqcWr7SJA1poTki7UQDcknBuzWOY7K0Oqk3pCntcE+YEvh6uuoJjo2pInwRhKa0YQyJVWaAyfKMmZtzqgt/S7QTN4o9AaNerCUG/Ennum3VGPOS9IboZi2ZIM7x+0pxTohVHArfAN/v7SrDXxOHAc+WPLtMfCyagHnLN4CTRsalpYpdL3hPCK60jdhUHAqYO8Q2jMeFKk66iSg468EWsjEiVzopfTZ90W1su1rw3gh4E9k40bzkqxBTbFw02eUG5ol3xJ8VwjcH8K1lyzdMsY12tZCB2UBsL/l+4ldG+EYybUTbI/cPGYBtIpbjAcRGgu14kqwzwcSrGPiGAN5acX2KaVHpmeBDjAnB+yLgWuXUgF2pVkgdJkLP7iDiVDAxHgNfSzZM7E45d1yjkwxjUfqwn7iXYOIxcSQCvobsBbEnDVlMsQ3T73PIgNKJOBPE8Qi4jmdPiXzab9Y3AFvnq2G33ECsiXAqge9bzqLhM2GrB66zOcSVSzTB8/pgSA4sd9USU2zDxvCNiTBdSDZxP2yC/+vIBomu5cLFEtNnB4vCKTaGpDr9pSYC+EOt+1nWbLFgnlncjnV0ZnOYTGFiELha/Ig4lhUO6z3M0SXHcsajh4nxhcGpT9iajwaRKanrYczR/b1lRzIc/eRFHw7dhEmZOUlT2mLA+hF5KtZQ0PqT8xQsVNGEtKQp7fBNyUSc4x9QsAvHcxXmROoxl5Y0pZ3qZuRPSttu1LVKF9QsvaE6qisNacXdEU3CjWbG1b0Q557rTklsfqE1VsTS7T9zF7p6Aey606rLhSQfdy9MdTumJfpcWoPr+SUgB4PreS50Pf8dXM/HKHvVv57XVJS3/gswABvS7PkJ4jDUAAAAAElFTkSuQmCC");
}
');
print_out('
.error_small {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRJREFUeNqcVstLFXEU/uY392ZlZdd7vXZ7mKhBaWjLNgX6J7QoaudGCSKCgjYSFj02QkEQlhEEtuwvSG6LNhLSLh9JaGXm28TMzHn0nXHGZsaZrnbgMO/vO7/vnN85o42hAnH2HdaxBVg3f8I+vQw7bcBO2LyfgGYUQVvYDq13F7T2fdD74jC0KIJfsKsmYL6cgXkiBR0pKBRDQ5Ku8TmJQFIJAJMwUQo1WAr9DI8DBQn4UfMXGF27ofQcwYscyHiz6GOknIVl74feVg79rv+58l8w4o6PMJ4xGr2SQhQC9wAq+O4B6NonGHfGYXZGElDri59hXj3EqPkytmpZflNDEbmaVsp2PSCRaP4Bq8Np6MoFl1w+p3+jt9DTMbjT9KfOIoALgjfFnHAVVhUStXughhLyliSUF8oXeXcvVprl5CSKXvCQd4IM2gS9iT7gU+O8rIQVp2ZgCeZxxaTWSrXkgrJ89U5I9N4FmvoHOJxcu8ZkM+lm3TyxhaA9tbFaWhl5bQxJFHi9K6VjUs5S2ouw2pRsolSwmMRS9NckqYsgaeJ5GLyHXhIE0LEEu1ExwZni6HIUzfNhkhjwsvDH3OGSizLFXakn4+t9A8lmwD2ZBFtJPRbYTpbrYTPdco7uQe5DRSbzd/x7ktDGkCyeRVXXuq0SU7AVO+LMUjSBBz7o3aBU9SG5YkkEk9izisnIzzqrDdhcFLireT6CpJE+7wfgHsBOaG9UCdTtBbItB1fxOATe4Eto1t3ZfpJ+epd3Ia18jgR7oW4IQX8W6t1kcBUVIfBXoWqJIqn0TgSrHKqPBP1Os1thsxtisytjs8v9bXbdbh5awpsoMD6AJ/TD9LNSPGx00iaso0jWMMkj6wOHS7oyAuO+tOvsf7RrL/IxejUSlxn9Qzjj1TWOuwcW9IOjnAkiVm6LJDLVpqk723SHBx4gEMtAv8ZVDo/DeETZ1GZGppSjRM4iMY8geYlV2Vlw6LMKqqfWhn6Df+hvo9vuJlqkS3n/4JF/FW85i88x2tFN/VWEfltukfAUI8wQWNfW+oyxA9o0fwx6KMc9kg/EYfwRYABD0jtDqxO2xwAAAABJRU5ErkJggg==");
}
');
print_out('
.warning_small {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAxVJREFUeNqclktvElEUxy+XGZgGqBQsLdpSibFd2LhRE2NcunLha4MfQvsBjAsXvl9RUxJNdKELbeNr4dKVpjFGbWO0JpJaG7AttbWAlLEwPMb/wdIM41yoPck/XO6Z+zuXO/ecg1QcO8BENpPM7NGKpdMFrbRLK5a9pVLFbrMxXZbsRUniWadDGnXI0rnNQe8rEcNmFYDA6rI2lFPzPR3trczjUpiiyEyWONN1xhCUaVqZLal5NjefZR63Ene1OI4h0JumARIzqTOLafVkMLDBRnDsuKlRkOT8L93ndUV7unwnjD7J+GXq++LTVFo9si0cYK0exYoVgSrQI+NkZ6CVuV1OW2zyx/FKRe8Oh/yHaz5eG8SnU9cJvr0vKIJ/IPDox8RjfI6ZnQjA+vs2sVRGPUSsugB05nAM9G7tYIpTFp3ERcD1lfEFqwecTokRg1jEXA2AF/qQztyDXQjsq+lYnkATVg8Sg1hgDlcDINLepVx+C51jA7uM3Zd37gh9gmIY03u4JHqYWGCGiM1x5U51tjeEJ6F7K+NuqHdlfB+aFQYBk9gcSbQb97hRgGvYccE8iTmNfKJFxCQ2R8K0tSjCF5uBbjUIfhtKWzmISWxeKlfsSHsRIIqd5hoEIN+glYOYxOYNFi9DN0xz09A309xN6LcIIkl2XqYiJst2s+8udr9gOvd+C8ZP6A40YJwEkxGbOxz2zHK+aF5Ugq6YJ3FFX0AjFkGuQnUQYoKd5ii5b3FnzQuGsNu4VfUVnEQCemCcICbY7zjV87mFrHmBZRIh6H5onyBI3S8mJrE5avgI7myCSq7BKuz/TTOWb2ISu1qu0SwiqOevqeS6/9ajcZw1W4/l1EK1NwT8nshqsaNOhGYxiHrO8oUiW68hcxkxiFXrbqt5gE404GtzPfscS7LsUn5dOx//Mkvw58T6p+GQhbv9R9v97rOT8QXd9E6atsyJqXl9o88dRTc7uNamP0wll0ovNX2qLbWSQklE99zQ9BP0HtfU9IV/WzT8bUFtqaY/MpQSFPf8vSxL57uC3pcixh8BBgBX2nwB4HBekwAAAABJRU5ErkJggg==");
}
');
print_out('
.success_small {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNJREFUeNqclstrE1EUxu/cmWTyzjRWK0pbce/CF4qCRRHqRutjUVcuXEtXIoIVilZdCeJj48KVqAWpSOtCdOGL4vMfUPFRbYttSNM0zWTefmdM4jhO0jYXPs5k5s7vzL3nnnMinRptY/XGXE7dbpnOgGVYW2AV27ZFxgRHlASDc6EghsQPkiRcTGWiL+oxpHpgQ7PuaarZmVQiLJ4MMynEGRc5Y44jWJYdNk2nVVfN7vl8uVvXrO8hWTyazkRf+1ncfyOfVQcXCvqYHJU6165XWCoTYbhmosSZIOD7uQBnIovgHj2jOTR3YU4fy8+UrjVcwex0abhU1A+tWB1nkViILXXQKuWIJMxMFk84DmtvWRU7+N8K4P0KwdvaU8uCV0c4IjF6F4weYv3jgPa8VDT6Wtck3L1uYnyFTuLdcWIQi5g1Bwjo3WSLLGCZzcA/Q7ugy1AXGFPEAnPIdVDIqTtwWtbRPjYJ3w39rPz+Br0hFpgdxOY4bv1JRW4G/skHp3Ec6vkTeJkRmyOJtoajoWbge3zwY9BNSHCDDiaxOTK0JfQ3sDp0Grq6THgvdAsSqzeISWyJ0t/N0MpXTHzJu8FBAmVhzgVtC+ZMUIJVxhHothfuBhdMl+0DvKxeAHIe5mwQ3HNvP3SnXslxHWFYtmVXf4/gyzIeJ4MVJx8D4Pug+7TdQWBiEpujMuZNo+ZgE/QkwMlmLxzP98IM14O7uQUm2LMcJfetphreZ+Tkqc9J0QPvgnkIRRsdMx1MsN9xqufzec3/fKPfSQW+E2YUii12jolJbI5m8Qrldhx1vaET2G0wj6DE4vAylfBxYrunCM2id35Wc7SyGeTkGeBnYB9D6cXgxCAWMWvFjjpRLBG6np0sMk/Aq2MDNLgUOL1LDGJVu1stD5SVsb5YIvzg148CK5eMZRcmHV9O74IxQqzAlolOdDieki/kpktOQEwa7nl2asFB774BxoGGTV9pjfYLnI2i3A4VcvkOtx2i/9aafiWJaDswpxbQeDrcG9T0A1O8MrGTupJp2gNaTvX8bXHT36IExTl/n1DkS5j/vN7qfgswAFMPc0H/GzIVAAAAAElFTkSuQmCC");
}
</STYLE>');
-- JS and end of header
print_out('<script type="text/javascript">
/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */');
print_out('!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,o=/^-ms-/,p=/-([\\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);');
print_out('for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)');
print_out('if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\\\x20\\\\t\\\\r\\\\n\\\\f]",N="(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+",O=N.replace("w","w#"),P="\\\\["+M+"*("+N+")(?:"+M+"*([*^$|!\~]?=)"+M+"*(?:''((?:\\\\\\\\.|[^\\\\\\\\''])*)''|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\"|("+O+"))|)"+M+"*\\\\]",Q=":("+N+")(?:\\\\(((''((?:\\\\\\\\.|[^\\\\\\\\''])*)''|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|"+P+")*)|.*)\\\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+\~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\\\]''\\"]*?)"+M+"*\\\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\("+M+"*(even|odd|(([+-]|)(\\\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\\\d+)|))"+M+"*\\\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+\~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\("+M+"*((?:-\\\\d)?\\\\d*)"+M+"*\\\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\\d$/i,$=/^[^{]+\\{\\s*\\[native \\w/,_=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ab=/[+\~]/,bb=/''|\\\\/g,cb=new RegExp("\\\\\\\\([\\\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;');
print_out('if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\\\$&"):b.setAttribute("id",s),s="[id=''"+s+"''] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(\~b.sourceIndex||D)-(\~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(');
print_out('function(a){return a.innerHTML="<div class=''a''></div><div class=''a i''></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''''><option selected=''''></option></select>",a.querySelectorAll("[msallowclip^='''']").length&&q.push("[*^$]="+M+"*(?:''''|\\"\\")"),a.querySelectorAll("[selected]").length||q.push("\\\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");');
print_out('b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!\~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='''']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);');
print_out('while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"=''$1'']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"\~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"\~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];');
print_out('return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"\~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;');
print_out('return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||\~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();');
print_out('return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}');
print_out('function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;');
print_out('return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--)');
print_out('{if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href=''#''></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,v=/^.[^:#\\[\\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];');
print_out('return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);');
print_out('var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c)');
print_out('{return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:');
print_out('function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c)');
print_out('{return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");');
print_out('if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a)');
print_out('{return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);');
print_out('m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();');
print_out('if(b.innerHTML=" <link/><table></table><a href=''/a''>a</a><input type=''checkbox''/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type=''radio'' checked=''checked'' name=''t''/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\\.(.+)|)$/;function ab(){return!0}');
print_out('function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\\\.)"+p.join("\\\\.(?:.*\\\\.|)")+"(\\\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));');
print_out('i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\\\.)"+q.join("\\\\.(?:.*\\\\.|)")+"(\\\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);');
print_out('var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;');
print_out('return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;');
print_out('this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:');
print_out('function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};');
print_out('m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);');
print_out('return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\\d+="(?:null|\\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\\\s/>]","i"),hb=/^\\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,jb=/<([\\w:]+)/,kb=/<tbody/i,lb=/<|&#?\\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ob=/^$|\\/(?:java|ecma)script/i,pb=/^true\\/(.*)/,qb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,rb={option:[1,"<select multiple=''multiple''>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);');
print_out('e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}');
print_out('m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));');
print_out('h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,');
print_out('function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];');
print_out('return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};');
print_out('function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder=''0'' width=''0'' height=''0''/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();');
print_out('var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:');
print_out('function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href=''/a''>a</a><input type=''checkbox''/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\\([^)]*\\)/i,Nb=/opacity\\s*=\\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).');
print_out('toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;');
print_out('if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){');
print_out('return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")');
print_out('},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}');
print_out('function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function()');
print_out('{if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function()');
print_out('{m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=');
print_out('function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href=''/a''>a</a><input type=''checkbox''/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:');
print_out('function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:');
print_out('function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");');
print_out('return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\\t\\r\\n\\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))');
print_out('return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:');
print_out('function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\\?/,xc=/(,)|(\\[|{)|(}|])|"(?:[^"\\\\\\r\\n]|\\\\["\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\\/\\//,Gc=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));');
print_out('if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:');
print_out('function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};');
print_out('if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");');
print_out('function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;');
print_out('while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\\[\\]$/,Sc=/\\r?\\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,');
print_out('function(a){return{name:b.name,value:a.replace(Sc,"\\r\\n")}}):{name:b.name,value:c.replace(Sc,"\\r\\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});');
print_out('function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\\?(?=&|$)|\\?\\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];');
print_out('return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});');
print_out('var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");');
print_out('return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});');
print_out('</script>');
print_out('<script type="text/javascript">
/*!
* TableSorter 2.15.3 min - Client-side table sorting with ease!
* Copyright (c) 2007 Christian Bach
*/');
print_out('!function(g){g.extend({tablesorter:new function(){function d(){var a=arguments[0],b=1<arguments.length?Array.prototype.slice.call(arguments):a;if("undefined"!==typeof console&&"undefined"!==typeof console.log)console[/error/i.test(a)?"error":/warn/i.test(a)?"warn":"log"](b);else alert(b)}function u(a,b){d(a+" ("+((new Date).getTime()-b.getTime())+"ms)")}function m(a){for(var b in a)return!1;return!0}function p(a,b,c){if(!b)return"";var h=a.config,e=h.textExtraction,f="",f="simple"===e?h.supportsTextContent? b.textContent:g(b).text():"function"===typeof e?e(b,a,c):"object"===typeof e&&e.hasOwnProperty(c)?e[c](b,a,c):h.supportsTextContent?b.textContent:g(b).text();return g.trim(f)}function t(a){var b=a.config,c=b.$tbodies=b.$table.children("tbody:not(."+b.cssInfoBlock+")"),h,e,w,k,n,g,l,z="";if(0===c.length)return b.debug?d("Warning: *Empty table!* Not building a parser cache"):"";b.debug&&(l=new Date,d("Detecting parsers for each column"));c=c[0].rows;if(c[0])for(h=[],e=c[0].cells.length,w=0;w<e;w++){k= b.$headers.filter(":not([colspan])");k=k.add(b.$headers.filter(''[colspan="1"]'')).filter(''[data-column="''+w+''"]:last'');n=b.headers[w];g=f.getParserById(f.getData(k,n,"sorter"));b.empties[w]=f.getData(k,n,"empty")||b.emptyTo||(b.emptyToBottom?"bottom":"top");b.strings[w]=f.getData(k,n,"string")||b.stringTo||"max";if(!g)a:{k=a;n=c;g=-1;for(var m=w,y=void 0,x=f.parsers.length,r=!1,t="",y=!0;""===t&&y;)g++,n[g]?(r=n[g].cells[m],t=p(k,r,m),k.config.debug&&d("Checking if value was empty on row "+g+", column: "+ m+'': "''+t+''"'')):y=!1;for(;0<=--x;)if((y=f.parsers[x])&&"text"!==y.id&&y.is&&y.is(t,k,r)){g=y;break a}g=f.getParserById("text")}b.debug&&(z+="column:"+w+"; parser:"+g.id+"; string:"+b.strings[w]+"; empty: "+b.empties[w]+"\\n");h.push(g)}b.debug&&(d(z),u("Completed detecting parsers",l));');
print_out('b.parsers=h}function v(a){var b=a.tBodies,c=a.config,h,e,w=c.parsers,k,n,q,l,z,m,y,x=[];c.cache={};if(!w)return c.debug?d("Warning: *Empty table!* Not building a cache"):"";c.debug&&(y=new Date);c.showProcessing&&f.isProcessing(a, !0);for(l=0;l<b.length;l++)if(c.cache[l]={row:[],normalized:[]},!g(b[l]).hasClass(c.cssInfoBlock)){h=b[l]&&b[l].rows.length||0;e=b[l].rows[0]&&b[l].rows[0].cells.length||0;for(n=0;n<h;++n)if(z=g(b[l].rows[n]),m=[],z.hasClass(c.cssChildRow))c.cache[l].row[c.cache[l].row.length-1]=c.cache[l].row[c.cache[l].row.length-1].add(z);else{c.cache[l].row.push(z);for(q=0;q<e;++q)k=p(a,z[0].cells[q],q),k=w[q].format(k,a,z[0].cells[q],q),m.push(k),"numeric"===(w[q].type||"").toLowerCase()&&(x[q]=Math.max(Math.abs(k)|| 0,x[q]||0));m.push(c.cache[l].normalized.length);c.cache[l].normalized.push(m)}c.cache[l].colMax=x}c.showProcessing&&f.isProcessing(a);c.debug&&u("Building cache for "+h+" rows",y)}function A(a,b){var c=a.config,h=c.widgetOptions,e=a.tBodies,w=[],k=c.cache,d,q,l,z,p,y,x,r,t,s,v;');
print_out('if(m(k))return c.appender?c.appender(a,w):"";c.debug&&(v=new Date);for(r=0;r<e.length;r++)if(d=g(e[r]),d.length&&!d.hasClass(c.cssInfoBlock)){p=f.processTbody(a,d,!0);d=k[r].row;q=k[r].normalized;z=(l=q.length)?q[0].length- 1:0;for(y=0;y<l;y++)if(s=q[y][z],w.push(d[s]),!c.appender||c.pager&&!(c.pager.removeRows&&h.pager_removeRows||c.pager.ajax))for(t=d[s].length,x=0;x<t;x++)p.append(d[s][x]);f.processTbody(a,p,!1)}c.appender&&c.appender(a,w);c.debug&&u("Rebuilt table",v);b||c.appender||f.applyWidget(a);g(a).trigger("sortEnd",a);g(a).trigger("updateComplete",a)}function D(a){var b=[],c={},h=0,e=g(a).find("thead:eq(0), tfoot").children("tr"),f,d,n,q,l,m,u,p,s,r;for(f=0;f<e.length;f++)for(l=e[f].cells,d=0;d<l.length;d++){q= l[d];m=q.parentNode.rowIndex;u=m+"-"+q.cellIndex;p=q.rowSpan||1;s=q.colSpan||1;"undefined"===typeof b[m]&&(b[m]=[]);for(n=0;n<b[m].length+1;n++)if("undefined"===typeof b[m][n]){r=n;break}c[u]=r;h=Math.max(r,h);g(q).attr({"data-column":r});for(n=m;n<m+p;n++)for("undefined"===typeof b[n]&&(b[n]=[]),u=b[n],q=r;q<r+s;q++)u[q]="x"}a.config.columns=h+1;return c}function C(a){return/^d/i.test(a)||1===a}function E(a){var b=D(a),c,h,e,w,k,n,q,l=a.config;');
print_out('l.headerList=[];l.headerContent=[];l.debug&&(q=new Date); w=l.cssIcon?''<i class="''+(l.cssIcon===f.css.icon?f.css.icon:l.cssIcon+" "+f.css.icon)+''"></i>'':"";l.$headers=g(a).find(l.selectorHeaders).each(function(a){h=g(this);c=l.headers[a];l.headerContent[a]=g(this).html();k=l.headerTemplate.replace(/\\{content\\}/g,g(this).html()).replace(/\\{icon\\}/g,w);l.onRenderTemplate&&(e=l.onRenderTemplate.apply(h,[a,k]))&&"string"===typeof e&&(k=e);g(this).html(''<div class="''+f.css.headerIn+''">''+k+"</div>");l.onRenderHeader&&l.onRenderHeader.apply(h,[a]);this.column= b[this.parentNode.rowIndex+"-"+this.cellIndex];this.order=C(f.getData(h,c,"sortInitialOrder")||l.sortInitialOrder)?[1,0,2]:[0,1,2];this.count=-1;this.lockedOrder=!1;n=f.getData(h,c,"lockedOrder")||!1;"undefined"!==typeof n&&!1!==n&&(this.order=this.lockedOrder=C(n)?[1,1,1]:[0,0,0]);h.addClass(f.css.header+" "+l.cssHeader);l.headerList[a]=this;h.parent().addClass(f.css.headerRow+" "+l.cssHeaderRow).attr("role","row");l.tabIndex&&h.attr("tabindex",0)}).attr({scope:"col",role:"columnheader"});G(a);l.debug&& (u("Built headers:",q),d(l.$headers))}function B(a,b,c){var h=a.config;h.$table.find(h.selectorRemove).remove();t(a);v(a);H(h.$table,b,c)}');
print_out('function G(a){var b,c,h=a.config;h.$headers.each(function(e,d){c=g(d);b="false"===f.getData(d,h.headers[e],"sorter");d.sortDisabled=b;c[b?"addClass":"removeClass"]("sorter-false").attr("aria-disabled",""+b);a.id&&(b?c.removeAttr("aria-controls"):c.attr("aria-controls",a.id))})}function F(a){var b,c,h,e=a.config,d=e.sortList,k=f.css.sortNone+" "+e.cssNone,n=[f.css.sortAsc+ " "+e.cssAsc,f.css.sortDesc+" "+e.cssDesc],q=["ascending","descending"],l=g(a).find("tfoot tr").children().removeClass(n.join(" "));e.$headers.removeClass(n.join(" ")).addClass(k).attr("aria-sort","none");h=d.length;for(b=0;b<h;b++)if(2!==d[b][1]&&(a=e.$headers.not(".sorter-false").filter(''[data-column="''+d[b][0]+''"]''+(1===h?":last":"")),a.length))for(c=0;c<a.length;c++)a[c].sortDisabled||(a.eq(c).removeClass(k).addClass(n[d[b][1]]).attr("aria-sort",q[d[b][1]]),l.length&&l.filter(''[data-column="''+ d[b][0]+''"]'').eq(c).addClass(n[d[b][1]]));e.$headers.not(".sorter-false").each(function(){var a=g(this),b=this.order[(this.count+1)%(e.sortReset?3:2)],b=a.text()+": "+f.language[a.hasClass(f.css.sortAsc)?"sortAsc":a.hasClass(f.css.sortDesc)?"sortDesc":"sortNone"]+f.language[0===b?"nextAsc":1===b?"nextDesc":"nextNone"];a.attr("aria-label",b)})}function L(a){if(a.config.widthFixed&&0===g(a).find("colgroup").length){var b=g("<colgroup>"),c=g(a).width();g(a.tBodies[0]).find("tr:first").children("td:visible").each(function(){b.append(g("<col>").css("width", parseInt(g(this).width()/c*1E3,10)/10+"%"))});');
print_out('g(a).prepend(b)}}function M(a,b){var c,h,e,f=a.config,d=b||f.sortList;f.sortList=[];g.each(d,function(a,b){c=[parseInt(b[0],10),parseInt(b[1],10)];if(e=f.$headers[c[0]])f.sortList.push(c),h=g.inArray(c[1],e.order),e.count=0<=h?h:c[1]%(f.sortReset?3:2)})}function N(a,b){return a&&a[b]?a[b].type||"":""}function O(a,b,c){var h,e,d,k=a.config,n=!c[k.sortMultiSortKey],q=g(a);q.trigger("sortStart",a);b.count=c[k.sortResetKey]?2:(b.count+1)%(k.sortReset?3:2); k.sortRestart&&(e=b,k.$headers.each(function(){this===e||!n&&g(this).is("."+f.css.sortDesc+",."+f.css.sortAsc)||(this.count=-1)}));e=b.column;if(n){k.sortList=[];if(null!==k.sortForce)for(h=k.sortForce,c=0;c<h.length;c++)h[c][0]!==e&&k.sortList.push(h[c]);h=b.order[b.count];if(2>h&&(k.sortList.push([e,h]),1<b.colSpan))for(c=1;c<b.colSpan;c++)k.sortList.push([e+c,h])}else if(k.sortAppend&&1<k.sortList.length&&f.isValueInArray(k.sortAppend[0][0],k.sortList)&&k.sortList.pop(),f.isValueInArray(e,k.sortList))for(c= 0;c<k.sortList.length;c++)d=k.sortList[c],h=k.$headers[d[0]],d[0]===e&&(d[1]=h.order[b.count],2===d[1]&&(k.sortList.splice(c,1),h.count=-1));else if(h=b.order[b.count],2>h&&(k.sortList.push([e,h]),1<b.colSpan))for(c=1;c<b.colSpan;c++)k.sortList.push([e+c,h]);if(null!==k.sortAppend)for(h=k.sortAppend,c=0;c<h.length;c++)h[c][0]!==e&&k.sortList.push(h[c]);q.trigger("sortBegin",a);');
print_out('setTimeout(function(){F(a);I(a);A(a)},1)}function I(a){var b,c,h,e,d,k,g,q,l,p,s,t,x=0,r=a.config,v=r.textSorter||"",A=r.sortList, B=A.length,C=a.tBodies.length;if(!r.serverSideSorting&&!m(r.cache)){r.debug&&(l=new Date);for(c=0;c<C;c++)d=r.cache[c].colMax,q=(k=r.cache[c].normalized)&&k[0]?k[0].length-1:0,k.sort(function(c,k){for(b=0;b<B;b++){e=A[b][0];g=A[b][1];x=0===g;if(r.sortStable&&c[e]===k[e]&&1===B)break;(h=/n/i.test(N(r.parsers,e)))&&r.strings[e]?(h="boolean"===typeof r.string[r.strings[e]]?(x?1:-1)*(r.string[r.strings[e]]?-1:1):r.strings[e]?r.string[r.strings[e]]||0:0,p=r.numberSorter?r.numberSorter(s[e],t[e],x,d[e], a):f["sortNumeric"+(x?"Asc":"Desc")](c[e],k[e],h,d[e],e,a)):(s=x?c:k,t=x?k:c,p="function"===typeof v?v(s[e],t[e],x,e,a):"object"===typeof v&&v.hasOwnProperty(e)?v[e](s[e],t[e],x,e,a):f["sortNatural"+(x?"Asc":"Desc")](c[e],k[e],e,a,r));if(p)return p}return c[q]-k[q]});r.debug&&u("Sorting on "+A.toString()+" and dir "+g+" time",l)}}function J(a,b){var c=a[0].config;c.pager&&!c.pager.ajax&&a.trigger("updateComplete");"function"===typeof b&&b(a[0])}function H(a,b,c){!1===b||a[0].isProcessing?J(a,c):a.trigger("sorton", [a[0].config.sortList,function(){J(a,c)}])}function K(a){var b=a.config,c=b.$table;c.unbind("sortReset update updateRows updateCell updateAll addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter",function(c){c.stopPropagation();');
print_out('b.sortList=[];F(a);I(a);A(a)}).bind("updateAll.tablesorter",function(c,e,d){c.stopPropagation();f.refreshWidgets(a,!0,!0);f.restoreHeaders(a);E(a);f.bindEvents(a,b.$headers); K(a);B(a,e,d)}).bind("update.tablesorter updateRows.tablesorter",function(b,c,d){b.stopPropagation();G(a);B(a,c,d)}).bind("updateCell.tablesorter",function(h,e,d,f){h.stopPropagation();c.find(b.selectorRemove).remove();var n,q,l;n=c.find("tbody");h=n.index(g(e).parents("tbody").filter(":first"));var m=g(e).parents("tr").filter(":first");e=g(e)[0];n.length&&0<=h&&(q=n.eq(h).find("tr").index(m),l=e.cellIndex,n=b.cache[h].normalized[q].length-1,b.cache[h].row[a.config.cache[h].normalized[q][n]]=m,b.cache[h].normalized[q][l]= b.parsers[l].format(p(a,e,l),a,e,l),H(c,d,f))}).bind("addRows.tablesorter",function(h,e,d,f){h.stopPropagation();if(m(b.cache))G(a),B(a,d,f);else{var g,q=e.filter("tr").length,l=[],u=e[0].cells.length,v=c.find("tbody").index(e.parents("tbody").filter(":first"));b.parsers||t(a);for(h=0;h<q;h++){for(g=0;g<u;g++)l[g]=b.parsers[g].format(p(a,e[h].cells[g],g),a,e[h].cells[g],g);l.push(b.cache[v].row.length);b.cache[v].row.push([e[h]]);b.cache[v].normalized.push(l);l=[]}H(c,d,f)}}).bind("sorton.tablesorter", function(b,e,d,f){var g=a.config;b.stopPropagation();c.trigger("sortStart",this);M(a,e);F(a);g.delayInit&&m(g.cache)&&v(a);c.trigger("sortBegin",this);I(a);A(a,f);"function"===typeof d&&d(a)}).bind("appendCache.tablesorter",function(b,c,d){b.stopPropagation();A(a,d);"function"===typeof c&&c(a)}).bind("applyWidgetId.tablesorter",function(c,e){c.stopPropagation();f.getWidgetById(e).format(a,b,b.widgetOptions)}).bind("applyWidgets.tablesorter",function(b,c){b.stopPropagation();f.applyWidget(a,c)}).bind("refreshWidgets.tablesorter", ');
print_out('function(b,c,d){b.stopPropagation();f.refreshWidgets(a,c,d)}).bind("destroy.tablesorter",function(b,c,d){b.stopPropagation();f.destroy(a,c,d)})}var f=this;f.version="2.15.3";f.parsers=[];f.widgets=[];f.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,headers:{},ignoreCase:!0, sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,numberSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly",selectorHeaders:"> thead th, > thead td", selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]};f.css={table:"tablesorter",childRow:"tablesorter-childRow",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",info:"tablesorter-infoOnly",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"};f.language={sortAsc:"Ascending sort applied, ", sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"};f.log=d;f.benchmark=u;f.construct=function(a){return this.each(function(){var b=g.extend(!0,{},f.defaults,a);');
print_out('!this.hasInitialized&&f.buildTable&&"TABLE"!==this.tagName&&f.buildTable(this,b);f.setup(this,b)})};f.setup=function(a,b){if(!a||!a.tHead||0===a.tBodies.length||!0===a.hasInitialized)return b.debug? d("ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized"):"";var c="",h=g(a),e=g.metadata;a.hasInitialized=!1;a.isProcessing=!0;a.config=b;g.data(a,"tablesorter",b);b.debug&&g.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===g("<span>x</span>")[0].textContent;b.supportsDataObject=function(a){a[0]=parseInt(a[0],10);return 1<a[0]||1===a[0]&&4<=parseInt(a[1],10)}(g.fn.jquery.split("."));b.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0, "null":0,top:!0,bottom:!1};/tablesorter\\-/.test(h.attr("class"))||(c=""!==b.theme?" tablesorter-"+b.theme:"");b.$table=h.addClass(f.css.table+" "+b.tableClass+c).attr({role:"grid"});b.$tbodies=h.children("tbody:not(."+b.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"});b.$table.find("caption").length&&b.$table.attr("aria-labelledby","theCaption");b.widgetInit={};E(a);L(a);t(a);b.delayInit||v(a);f.bindEvents(a,b.$headers);K(a);b.supportsDataObject&&"undefined"!==typeof h.data().sortlist? b.sortList=h.data().sortlist:e&&h.metadata()&&h.metadata().sortlist&&(b.sortList=h.metadata().sortlist);');
print_out('f.applyWidget(a,!0);0<b.sortList.length?h.trigger("sorton",[b.sortList,{},!b.initWidgets]):(F(a),b.initWidgets&&f.applyWidget(a));b.showProcessing&&h.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter",function(b){f.isProcessing(a,"sortBegin"===b.type)});a.hasInitialized=!0;a.isProcessing=!1;b.debug&&f.benchmark("Overall initialization time",g.data(a, "startoveralltimer"));h.trigger("tablesorter-initialized",a);"function"===typeof b.initialized&&b.initialized(a)};f.isProcessing=function(a,b,c){a=g(a);var h=a[0].config;a=c||a.find("."+f.css.header);b?("undefined"!==typeof c&&0<h.sortList.length&&(a=a.filter(function(){return this.sortDisabled?!1:f.isValueInArray(parseFloat(g(this).attr("data-column")),h.sortList)})),a.addClass(f.css.processing+" "+h.cssProcessing)):a.removeClass(f.css.processing+" "+h.cssProcessing)};f.processTbody=function(a,b, c){a=g(a)[0];if(c)return a.isProcessing=!0,b.before(''<span class="tablesorter-savemyplace"/>''),c=g.fn.detach?b.detach():b.remove();c=g(a).find("span.tablesorter-savemyplace");b.insertAfter(c);c.remove();a.isProcessing=!1};f.clearTableBody=function(a){g(a)[0].config.$tbodies.empty()};f.bindEvents=function(a,b){a=g(a)[0];var c,h=a.config;b.find(h.selectorSort).add(b.filter(h.selectorSort)).unbind("mousedown.tablesorter mouseup.tablesorter sort.tablesorter keyup.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter sort.tablesorter keyup.tablesorter", function(e,d){var f;f=e.type;');
print_out('if(!(1!==(e.which||e.button)&&!/sort|keyup/.test(f)||"keyup"===f&&13!==e.which||"mouseup"===f&&!0!==d&&250<(new Date).getTime()-c)){if("mousedown"===f)return c=(new Date).getTime(),"INPUT"===e.target.tagName?"":!h.cancelSelection;h.delayInit&&m(h.cache)&&v(a);f=/TH|TD/.test(this.tagName)?this:g(this).parents("th, td")[0];f=h.$headers[b.index(f)];f.sortDisabled||O(a,f,e)}});h.cancelSelection&&b.attr("unselectable","on").bind("selectstart",!1).css({"user-select":"none", MozUserSelect:"none"})};f.restoreHeaders=function(a){var b=g(a)[0].config;b.$table.find(b.selectorHeaders).each(function(a){g(this).find("."+f.css.headerIn).length&&g(this).html(b.headerContent[a])})};f.destroy=function(a,b,c){a=g(a)[0];if(a.hasInitialized){f.refreshWidgets(a,!0,!0);var h=g(a),e=a.config,d=h.find("thead:first"),k=d.find("tr."+f.css.headerRow).removeClass(f.css.headerRow+" "+e.cssHeaderRow),n=h.find("tfoot:first > tr").children("th, td");d.find("tr").not(k).remove();h.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(".tablesorter ")); e.$headers.add(n).removeClass([f.css.header,e.cssHeader,e.cssAsc,e.cssDesc,f.css.sortAsc,f.css.sortDesc,f.css.sortNone].join(" ")).removeAttr("data-column");k.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter keypress.tablesorter");f.restoreHeaders(a);!1!==b&&h.removeClass(f.css.table+" "+e.tableClass+" tablesorter-"+e.theme);a.hasInitialized=!1;"function"===typeof c&&c(a)}};');
print_out('f.regex={chunk:/(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,hex:/^0x[0-9a-f]+$/i}; f.sortNatural=function(a,b){if(a===b)return 0;var c,h,e,d,g,n;h=f.regex;if(h.hex.test(b)){c=parseInt(a.match(h.hex),16);e=parseInt(b.match(h.hex),16);if(c<e)return-1;if(c>e)return 1}c=a.replace(h.chunk,"\\\\0$1\\\\0").replace(/\\\\0$/,"").replace(/^\\\\0/,"").split("\\\\0");h=b.replace(h.chunk,"\\\\0$1\\\\0").replace(/\\\\0$/,"").replace(/^\\\\0/,"").split("\\\\0");n=Math.max(c.length,h.length);for(g=0;g<n;g++){e=isNaN(c[g])?c[g]||0:parseFloat(c[g])||0;d=isNaN(h[g])?h[g]||0:parseFloat(h[g])||0;if(isNaN(e)!==isNaN(d))return isNaN(e)? 1:-1;typeof e!==typeof d&&(e+="",d+="");if(e<d)return-1;if(e>d)return 1}return 0};f.sortNaturalAsc=function(a,b,c,d,e){if(a===b)return 0;c=e.string[e.empties[c]||e.emptyTo];return""===a&&0!==c?"boolean"===typeof c?c?-1:1:-c||-1:""===b&&0!==c?"boolean"===typeof c?c?1:-1:c||1:f.sortNatural(a,b)};f.sortNaturalDesc=function(a,b,c,d,e){if(a===b)return 0;c=e.string[e.empties[c]||e.emptyTo];return""===a&&0!==c?"boolean"===typeof c?c?-1:1:c||1:""===b&&0!==c?"boolean"===typeof c?c?1:-1:-c||-1:f.sortNatural(b, a)};f.sortText=function(a,b){return a>b?1:a<b?-1:0};f.getTextValue=function(a,b,c){if(c){var d=a?a.length:0,e=c+b;for(c=0;c<d;c++)e+=a.charCodeAt(c);return b*e}return 0};f.sortNumericAsc=function(a,b,c,d,e,g){if(a===b)return 0;g=g.config;e=g.string[g.empties[e]||g.emptyTo];');
print_out('if(""===a&&0!==e)return"boolean"===typeof e?e?-1:1:-e||-1;if(""===b&&0!==e)return"boolean"===typeof e?e?1:-1:e||1;isNaN(a)&&(a=f.getTextValue(a,c,d));isNaN(b)&&(b=f.getTextValue(b,c,d));return a-b};f.sortNumericDesc=function(a, b,c,d,e,g){if(a===b)return 0;g=g.config;e=g.string[g.empties[e]||g.emptyTo];if(""===a&&0!==e)return"boolean"===typeof e?e?-1:1:e||1;if(""===b&&0!==e)return"boolean"===typeof e?e?1:-1:-e||-1;isNaN(a)&&(a=f.getTextValue(a,c,d));isNaN(b)&&(b=f.getTextValue(b,c,d));return b-a};f.sortNumeric=function(a,b){return a-b};f.characterEquivalents={a:"\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5",A:"\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5",c:"\\u00e7\\u0107\\u010d",C:"\\u00c7\\u0106\\u010c",e:"\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119", E:"\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118",i:"\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131",I:"\\u00cd\\u00cc\\u0130\\u00ce\\u00cf",o:"\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6",O:"\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6",ss:"\\u00df",SS:"\\u1e9e",u:"\\u00fa\\u00f9\\u00fb\\u00fc\\u016f",U:"\\u00da\\u00d9\\u00db\\u00dc\\u016e"};f.replaceAccents=function(a){var b,c="[",d=f.characterEquivalents;if(!f.characterRegex){f.characterRegexArray={};for(b in d)"string"===typeof b&&(c+=d[b],f.characterRegexArray[b]=RegExp("["+d[b]+"]","g"));f.characterRegex= RegExp(c+"]")}if(f.characterRegex.test(a))for(b in d)"string"===typeof b&&(a=a.replace(f.characterRegexArray[b],b));return a};f.isValueInArray=function(a,b){var c,d=b.length;for(c=0;c<d;c++)if(b[c][0]===a)return!0;return!1};f.addParser=function(a){var b,c=f.parsers.length,d=!0;for(b=0;b<c;b++)f.parsers[b].id.toLowerCase()===a.id.toLowerCase()&&(d=!1);d&&f.parsers.push(a)};f.getParserById=function(a){var b,c=f.parsers.length;for(b=0;b<c;b++)if(f.parsers[b].id.toLowerCase()===a.toString().toLowerCase())return f.parsers[b]; ');
print_out('return!1};f.addWidget=function(a){f.widgets.push(a)};f.getWidgetById=function(a){var b,c,d=f.widgets.length;for(b=0;b<d;b++)if((c=f.widgets[b])&&c.hasOwnProperty("id")&&c.id.toLowerCase()===a.toLowerCase())return c};f.applyWidget=function(a,b){a=g(a)[0];var c=a.config,d=c.widgetOptions,e=[],m,k,n;c.debug&&(m=new Date);c.widgets.length&&(c.widgets=g.grep(c.widgets,function(a,b){return g.inArray(a,c.widgets)===b}),g.each(c.widgets||[],function(a,b){(n=f.getWidgetById(b))&&n.id&&(n.priority||(n.priority= 10),e[a]=n)}),e.sort(function(a,b){return a.priority<b.priority?-1:a.priority===b.priority?0:1}),g.each(e,function(e,f){if(f){if(b||!c.widgetInit[f.id])f.hasOwnProperty("options")&&(d=a.config.widgetOptions=g.extend(!0,{},f.options,d)),f.hasOwnProperty("init")&&f.init(a,f,c,d),c.widgetInit[f.id]=!0;!b&&f.hasOwnProperty("format")&&f.format(a,c,d,!1)}}));c.debug&&(k=c.widgets.length,u("Completed "+(!0===b?"initializing ":"applying ")+k+" widget"+(1!==k?"s":""),m))};f.refreshWidgets=function(a,b,c){a= g(a)[0];var h,e=a.config,m=e.widgets,k=f.widgets,n=k.length;for(h=0;h<n;h++)k[h]&&k[h].id&&(b||0>g.inArray(k[h].id,m))&&(e.debug&&d(''Refeshing widgets: Removing "''+k[h].id+''"''),k[h].hasOwnProperty("remove")&&e.widgetInit[k[h].id]&&(k[h].remove(a,e,e.widgetOptions),e.widgetInit[k[h].id]=!1));!0!==c&&f.applyWidget(a,b)};f.getData=function(a,b,c){var d="";a=g(a);var e,f;if(!a.length)return"";e=g.metadata?a.metadata():!1;');
print_out('f=" "+(a.attr("class")||"");"undefined"!==typeof a.data(c)||"undefined"!==typeof a.data(c.toLowerCase())? d+=a.data(c)||a.data(c.toLowerCase()):e&&"undefined"!==typeof e[c]?d+=e[c]:b&&"undefined"!==typeof b[c]?d+=b[c]:" "!==f&&f.match(" "+c+"-")&&(d=f.match(RegExp("\\\\s"+c+"-([\\\\w-]+)"))[1]||"");return g.trim(d)};f.formatFloat=function(a,b){if("string"!==typeof a||""===a)return a;var c;a=(b&&b.config?!1!==b.config.usNumberFormat:"undefined"!==typeof b?b:1)?a.replace(/,/g,""):a.replace(/[\\s|\\.]/g,"").replace(/,/g,".");/^\\s*\\([.\\d]+\\)/.test(a)&&(a=a.replace(/^\\s*\\(([.\\d]+)\\)/,"-$1"));c=parseFloat(a);return isNaN(c)? g.trim(a):c};f.isDigit=function(a){return isNaN(a)?/^[\\-+(]?\\d+[)]?$/.test(a.toString().replace(/[,.''"\\s]/g,"")):!0}}});var p=g.tablesorter;g.fn.extend({tablesorter:p.construct});p.addParser({id:"text",is:function(){return!0},format:function(d,u){var m=u.config;d&&(d=g.trim(m.ignoreCase?d.toLocaleLowerCase():d),d=m.sortLocaleCompare?p.replaceAccents(d):d);return d},type:"text"});p.addParser({id:"digit",is:function(d){return p.isDigit(d)},format:function(d,u){var m=p.formatFloat((d||"").replace(/[^\\w,. \\-()]/g, ""),u);return d&&"number"===typeof m?m:d?g.trim(d&&u.config.ignoreCase?d.toLocaleLowerCase():d):d},type:"numeric"});p.addParser({id:"currency",is:function(d){return/^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/.test((d||"").replace(/[+\\-,. ]/g,""))},format:function(d,u){var m=p.formatFloat((d||"").replace(/[^\\w,. \\-()]/g,""),u);return d&&"number"===typeof m?m:d?g.trim(d&&u.config.ignoreCase?d.toLocaleLowerCase():d):d},type:"numeric"});p.addParser({id:"ipAddress", is:function(d){return/^\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}$/.test(d)},format:function(d,g){var m,s=d?d.split("."):"",t="",v=s.length;');
print_out('for(m=0;m<v;m++)t+=("00"+s[m]).slice(-3);return d?p.formatFloat(t,g):d},type:"numeric"});p.addParser({id:"url",is:function(d){return/^(https?|ftp|file):\\/\\//.test(d)},format:function(d){return d?g.trim(d.replace(/(https?|ftp|file):\\/\\//,"")):d},type:"text"});p.addParser({id:"isoDate",is:function(d){return/^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/.test(d)},format:function(d, g){return d?p.formatFloat(""!==d?(new Date(d.replace(/-/g,"/"))).getTime()||"":"",g):d},type:"numeric"});p.addParser({id:"percent",is:function(d){return/(\\d\\s*?%|%\\s*?\\d)/.test(d)&&15>d.length},format:function(d,g){return d?p.formatFloat(d.replace(/%/g,""),g):d},type:"numeric"});p.addParser({id:"usLongDate",is:function(d){return/^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i.test(d)||/^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i.test(d)},format:function(d,g){return d?p.formatFloat((new Date(d.replace(/(\\S)([AP]M)$/i, "$1 $2"))).getTime()||"",g):d},type:"numeric"});p.addParser({id:"shortDate",is:function(d){return/(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/.test((d||"").replace(/\\s+/g," ").replace(/[\\-.,]/g,"/"))},format:function(d,g,m,s){if(d){m=g.config;');
print_out('var t=m.$headers.filter("[data-column="+s+"]:last");s=t.length&&t[0].dateFormat||p.getData(t,m.headers[s],"dateFormat")||m.dateFormat;d=d.replace(/\\s+/g," ").replace(/[\\-.,]/g,"/");"mmddyyyy"===s?d=d.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, "$3/$1/$2"):"ddmmyyyy"===s?d=d.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/,"$3/$2/$1"):"yyyymmdd"===s&&(d=d.replace(/(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/,"$1/$2/$3"))}return d?p.formatFloat((new Date(d)).getTime()||"",g):d},type:"numeric"});p.addParser({id:"time",is:function(d){return/^(([0-2]?\\d:[0-5]\\d)|([0-1]?\\d:[0-5]\\d\\s?([AP]M)))$/i.test(d)},format:function(d,g){return d?p.formatFloat((new Date("2000/01/01 "+d.replace(/(\\S)([AP]M)$/i,"$1 $2"))).getTime()||"",g):d},type:"numeric"});p.addParser({id:"metadata", is:function(){return!1},format:function(d,p,m){d=p.config;d=d.parserMetadataName?d.parserMetadataName:"sortValue";return g(m).metadata()[d]},type:"numeric"});p.addWidget({id:"zebra",priority:90,format:function(d,u,m){var s,t,v,A,D,C,E=RegExp(u.cssChildRow,"i"),B=u.$tbodies;u.debug&&(D=new Date);for(d=0;d<B.length;d++)s=B.eq(d),C=s.children("tr").length,1<C&&(v=0,s=s.children("tr:visible").not(u.selectorRemove),s.each(function(){t=g(this);E.test(this.className)||v++;A=0===v%2;t.removeClass(m.zebra[A? 1:0]).addClass(m.zebra[A?0:1])}));u.debug&&p.benchmark("Applying Zebra widget",D)},remove:function(d,p,m){var s;p=p.$tbodies;var t=(m.zebra||["even","odd"]).join(" ");for(m=0;m<p.length;m++)s=g.tablesorter.processTbody(d,p.eq(m),!0),s.children().removeClass(t),g.tablesorter.processTbody(d,s,!1)}})}(jQuery);');
print_out('</script>');
print_out('
<script>
$(document).ready(function(){
var alertOn = true;
var filterString="";
var sectionTitle = {"E": "Error Signatures", "W": "Warning Signatures", "S": "Successful Signatures", "I": "Informational Signatures"};
var searchFlag=false;
$("#homeButton").click(function(){
$(".data").hide();
$(".maindata").hide();
$(".mainmenu").show();
$("#search").val("");
});
// Open pop-up window
$("[data-popup-open]").on("click", function() {
var targeted_popup_class = jQuery(this).attr("data-popup-open");
$("[data-popup]").hide();
$("[data-popup=''" + targeted_popup_class + "'']").fadeIn(350);
});
// Close pop-up window
$("[data-popup-close]").on("click", function() {
var targeted_popup_class = jQuery(this).attr("data-popup-close");
$("[data-popup=''" + targeted_popup_class + "'']").fadeOut(350, function(){
});
});
// Open section (by section name or by error type)
$("[open-section]").on("click", function() {
var sectionID = jQuery(this).attr("open-section");
var sectionName = jQuery(this).find("div.textbox").text();
if ((sectionName == null) || (sectionName == "")){
sectionName = sectionTitle[sectionID];
}
filterString = sectionID;
// if the section is empty, do nothing
if ($("." + sectionID).size() <= 0) {
return;
}
$(".mainmenu").hide();
$(".data").hide();
$(".section").show();
$(".signature").hide();
$("." + sectionID).show();
$("#search").val("");
$("#showhidesection").attr("mode", "show");
$("span.brokenlink").hide();
$("#export2TextLink").attr("onClick", "onclick=export2PaddedText(''" + sectionID + "'');return false;");
$(".containertitle").html(sectionName);
//CG There has to be a way to remove the IF below
if ((sectionID == ''error'') || (sectionID == ''success'') || (sectionID == ''information'') || (sectionID == ''warning'')) {
$(".sectionview").attr("open-sig-class", sectionID + "sig");
} else {
$(".sectionview").attr("open-sig-class", sectionID);
}
$("a[siglink]").removeAttr("href"); //remove links between signature records in section view
$("a[siglink]").removeClass("hypersource");
$("a[siglink]").addClass("nolink");
$("." + sectionID).first().click();
});
// Open signature
$("[open-sig]").on("click", function() {
var sigID = jQuery(this).attr("open-sig");
$(".signature").hide();
$(".sectionbutton").css("background-color", "#e7ecf0");
$(".export2Txt").hide();
$("#SignatureTitle").html("Signature: " + sigID);
$("." + sigID).show();
$(".sectionbutton[open-sig=''" + sigID + "'']").css("background-color","white");
var e = jQuery.Event("keypress");
e.keyCode = 13; // Enter
$("#search").focus();
$("#search").trigger(e);
});
// Print, Analysis and Full Section view - CG Need to clean this a bit. Too many classes.
$("[open-sig-class]").on("click", function(){
var sigClassID = jQuery(this).attr("open-sig-class");
// hide everything first
$(".mainmenu").hide();
$(".data").hide();
$("#search").val("");
if (sigClassID == "print"){
$(".containertitle").html("Print View");
$("#expandall").attr("mode", "print");
filterString="";
// show all divs that have the print class
$(".print").show();
$("a[siglink]").removeAttr("href"); //remove links between signature records in print view
$("a[siglink]").removeClass("hypersource");
$("a[siglink]").addClass("nolink");
$("span.brokenlink").hide();
} else if (sigClassID == "analysis") {
$(".containertitle").html("Analysis View");
$("#expandall").attr("mode", "analysis");
filterString="";
// show all divs that have the analysis class
$(".analysis").show();
// add links to the records that are interconnected (links are saved in a separate attribute named siglink)
$("a[siglink]").each(function(){
// if target anchor exists, create the link. Otherwise, display an exclamation mark
if ($("a#" + $(this).attr("siglink") + ".anchor").length > 0){
$(this).attr("href", "#" + $(this).attr("siglink"));
$(this).addClass("hypersource");
$(this).removeClass("nolink");
} else {
$(this).closest(''td'').find(''span.brokenlink'').show();
}
});
} else { // Entire Section view
if ($("#showhidesection").attr("mode") == "show") {
$(".fullsection").show();
$("." + sigClassID).show();
filterString = sigClassID;
$("#showhidesection").attr("mode", "hide");
$("#expandall").attr("mode", "print");
} else {
$(".section").show();
$(".signature").hide();
$("#showhidesection").attr("mode", "show");
$("[open-section=''"+sigClassID+"'']").click();
}
}
});
// Open table data (for a sig)
$("a[toggle-data]").on("click", function(){
var tabledataID = $(this).attr("toggle-data");
$("#"+tabledataID).toggle();
$(this).find(".arrowright").toggle();
if ($(this).find(".arrowdown").css("display") == "none"){
$(this).find(".arrowdown").show();
} else {
$(this).find(".arrowdown").hide();
};
var e = jQuery.Event("keypress");
e.keyCode = 13; // Enter
$("#search").trigger(e);
});
$("a[toggle-info]").on("click", function(){
var infoID = $(this).attr("toggle-info");
$("#"+infoID).toggle();
});
$("#exportAll").on("click", function(){
if ($(this).is(":checked")) {
$(".exportcheck").prop("checked", true);
} else {
$(".exportcheck").prop("checked", false);
}
});
$("#expandall").on("click", function(){
if (alertOn){
var returnVal = confirm ("This action could lead to performance issues and might even freeze your browser window. Do you want to continue?");
if (returnVal == false) return;
alertOn = false;
}
if (returnVal == false) return;
$(".tabledata").show();
if ($(this).attr("mode") == "print"){
$(".results").show();
}
$(".arrowright").hide();
$(".arrowdown").show();
var e = jQuery.Event("keypress");
e.keyCode = 13; // Enter
$("#search").trigger(e);
});
$(".collapseall").on("click", function(){
$(".tabledata").hide();
if ($("#expandall").attr("mode") == "print"){
$(".results").show();
} else {
$(".results").hide();
}
$(".arrowright").show();
$(".arrowdown").hide();
});
// Dynamic display based on the search string
$("#search").keypress (function(e) {
if (e.keyCode == 13){
var searchTerm = $("#search").val().toLowerCase();
console.log(filterString);
if ((searchTerm == null) || (searchTerm == "")) {
if (!searchFlag){
return;
} else {
searchFlag=false;
var rowList = document.getElementsByClassName(''tdata ''+filterString);
for (i = 0; i < rowList.length; i++){
if (rowList[i].style.display == "none"){
rowList[i].style.display = "table-row";
}
}
return;
}
}
var rowList = document.getElementsByClassName(''tdata ''+filterString);
for (i = 0; i < rowList.length; i++){
if (rowList[i].innerHTML.toLowerCase().indexOf(searchTerm) >= 0){
rowList[i].style.display="table-row";
} else
rowList[i].style.display="none";
}
}
searchFlag = true;
});
$(".sort_ico").on(''click'', function(){
var tableName = $(this).attr("table-name");
$("#restable_" + tableName).tablesorter();
$(this).hide();
});
});
function export2CSV(tbl) {
var records;
// if no particular table was provided as parameter, export all selected tables on the page
if ((tbl == "ALL") || (tbl == null) || (tbl == "")){
if ($(".exportcheck:checkbox:checked").length == 0) {
return;
} else {
$records = $(".exportcheck:checkbox:checked");
}
} else {
$records = $(".exportcheck:checkbox[rowid=''"+tbl+"'']");
}
var csv = ''"'';
$records.each(function(){
var $rows = $("tr." + $(this).attr("rowid"));
var level = $($("#" + $(this).attr("rowid"))).attr("level");
tmpColDelim = String.fromCharCode(11), // vertical tab character
tmpRowDelim = String.fromCharCode(0), // null character
colDelim = ''","'',
rowDelim = ''"\\r\\n"'';
//CG comment csv += rowDelim + $($("#" + $(this).attr("rowid")).find("div.sigdescription")).find("td").text() + rowDelim;
csv += $rows.map(function (i, row) {
var $row = $(row),
$cols = $row.find(''td,th'');
return $cols.map(function (j, col) {
var $col = $(col),
text = $col.text();
return text.replace(/"/g, ''""'').trim(); // escape double quotes, trim leading and trailing blacks to avoid Excel misreading them as ''ÃÂ ''
}).get().join(tmpColDelim);
}).get().join(tmpRowDelim)
.split(tmpRowDelim).join(rowDelim)
.split(tmpColDelim).join(colDelim) + rowDelim + rowDelim;
});
csv += ''"'';
// Data URI
csvData = ''data:text/csv;charset=utf-8,'' + encodeURIComponent(csv);
var downloadLink = document.createElement(''a'');
downloadLink.href = csvData;
downloadLink.download = ''Analyzer_export_data.csv'';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
function export2PaddedText(section) {
// export a full section - the section id is passed as parameter. If null, then return.
if ((section == null) || (section ==''''))
return;
var $records = $(''.signature.''+section);
//if no signatures in the section, nothing to do. Return.
if ($records.length < 0) return;
// define array for col max length
var maxlen = [];
// parse all rows once and gather the max length for each column in each table (first columns, second columns etc). Populate maxlen array.
var $rows = $(''tr.''+section);
$rows.each(function(){
// skip if this is a sig title row
if ($(this).hasClass(''sigtitle'')) return;
$currrow = $(this);
var counter = 0;
$currrow.find("td,th").each(function(){
if (($(this).text().length > maxlen[counter]) || (typeof maxlen[counter] == "undefined")) {
maxlen[counter] = $(this).text().length;
}
counter++;
});
});
colDelim = '' '',
rowDelim = ''\\r\\n'';
text = '''';
$rows.each(function(){
if ($(this).hasClass("sigtitle")) {
var title = $(this).find(''td'').text()
text += rowDelim + rowDelim + rowDelim + title + rowDelim + "_".repeat(title.length) + rowDelim + rowDelim;
return;
}
$cols = $(this).find(''td,th'');
text += $cols.map(function (j, col) {
var $col = $(col);
var text = $col.text() + " ".repeat(maxlen[j] - $col.text().length + 1);
return text;
}).get().join(colDelim);
text += rowDelim;
});
// Data URI
textData = ''data:text/csv;charset=utf-8,'' + encodeURIComponent(text);
var downloadLink = document.createElement(''a'');
downloadLink.href = textData;
downloadLink.download = ''Analyzer_export_data.txt'';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
</script>
');
print_out('</HEAD><BODY>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_page_header: '||sqlerrm);
raise;
END print_page_header;
----------------------------------------------------------------
-- Prints analyzer header (title and top menu) --
----------------------------------------------------------------
PROCEDURE print_rep_header(p_analyzer_title varchar2) is
BEGIN
-- page header
print_out('<!-- page header (always displayed) -->
<div class="pageheader">
<div class="header_s1">
');
-- Print logo image
print_out(' <div class="header_img">
');
print_out('<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAkCAYAAABrA8OcAAAABGdBTUEAALGPC/xhBQAACjFpQ0NQSUNDIHByb2ZpbGUAAEiJnZZ3VFPZFofPvTe9UJIQipTQa2hSAkgNvUiRLioxCRBKwJAAIjZEVHBEUZGmCDIo4ICjQ5GxIoqFAVGx6wQZRNRxcBQblklkrRnfvHnvzZvfH/d+a5+9z91n733WugCQ/IMFwkxYCYAMoVgU4efFiI2LZ2AHAQzwAANsAOBws7NCFvhGApkCfNiMbJkT+Be9ug4g+fsq0z+MwQD/n5S5WSIxAFCYjOfy+NlcGRfJOD1XnCW3T8mYtjRNzjBKziJZgjJWk3PyLFt89pllDznzMoQ8GctzzuJl8OTcJ+ONORK+jJFgGRfnCPi5Mr4mY4N0SYZAxm/ksRl8TjYAKJLcLuZzU2RsLWOSKDKCLeN5AOBIyV/w0i9YzM8Tyw/FzsxaLhIkp4gZJlxTho2TE4vhz89N54vFzDAON40j4jHYmRlZHOFyAGbP/FkUeW0ZsiI72Dg5ODBtLW2+KNR/Xfybkvd2ll6Ef+4ZRB/4w/ZXfpkNALCmZbXZ+odtaRUAXesBULv9h81gLwCKsr51Dn1xHrp8XlLE4ixnK6vc3FxLAZ9rKS/o7/qfDn9DX3zPUr7d7+VhePOTOJJ0MUNeN25meqZExMjO4nD5DOafh/gfB/51HhYR/CS+iC+URUTLpkwgTJa1W8gTiAWZQoZA+J+a+A/D/qTZuZaJ2vgR0JZYAqUhGkB+HgAoKhEgCXtkK9DvfQvGRwP5zYvRmZid+8+C/n1XuEz+yBYkf45jR0QyuBJRzuya/FoCNCAARUAD6kAb6AMTwAS2wBG4AA/gAwJBKIgEcWAx4IIUkAFEIBcUgLWgGJSCrWAnqAZ1oBE0gzZwGHSBY+A0OAcugctgBNwBUjAOnoAp8ArMQBCEhcgQFVKHdCBDyByyhViQG+QDBUMRUByUCCVDQkgCFUDroFKoHKqG6qFm6FvoKHQaugANQ7egUWgS+hV6ByMwCabBWrARbAWzYE84CI6EF8HJ8DI4Hy6Ct8CVcAN8EO6ET8OX4BFYCj+BpxGAEBE6ooswERbCRkKReCQJESGrkBKkAmlA2pAepB+5ikiRp8hbFAZFRTFQTJQLyh8VheKilqFWoTajqlEHUJ2oPtRV1ChqCvURTUZros3RzugAdCw6GZ2LLkZXoJvQHeiz6BH0OPoVBoOhY4wxjhh/TBwmFbMCsxmzG9OOOYUZxoxhprFYrDrWHOuKDcVysGJsMbYKexB7EnsFO459gyPidHC2OF9cPE6IK8RV4FpwJ3BXcBO4GbwS3hDvjA/F8/DL8WX4RnwPfgg/jp8hKBOMCa6ESEIqYS2hktBGOEu4S3hBJBL1iE7EcKKAuIZYSTxEPE8cJb4lUUhmJDYpgSQhbSHtJ50i3SK9IJPJRmQPcjxZTN5CbiafId8nv1GgKlgqBCjwFFYr1Ch0KlxReKaIVzRU9FRcrJivWKF4RHFI8akSXslIia3EUVqlVKN0VOmG0rQyVdlGOVQ5Q3mzcovyBeVHFCzFiOJD4VGKKPsoZyhjVISqT2VTudR11EbqWeo4DUMzpgXQUmmltG9og7QpFYqKnUq0Sp5KjcpxFSkdoRvRA+jp9DL6Yfp1+jtVLVVPVb7qJtU21Suqr9XmqHmo8dVK1NrVRtTeqTPUfdTT1Lepd6nf00BpmGmEa+Rq7NE4q/F0Dm2OyxzunJI5h+fc1oQ1zTQjNFdo7tMc0JzW0tby08rSqtI6o/VUm67toZ2qvUP7hPakDlXHTUegs0PnpM5jhgrDk5HOqGT0MaZ0NXX9dSW69bqDujN6xnpReoV67Xr39An6LP0k/R36vfpTBjoGIQYFBq0Gtw3xhizDFMNdhv2Gr42MjWKMNhh1GT0yVjMOMM43bjW+a0I2cTdZZtJgcs0UY8oyTTPdbXrZDDazN0sxqzEbMofNHcwF5rvNhy3QFk4WQosGixtMEtOTmcNsZY5a0i2DLQstuyyfWRlYxVtts+q3+mhtb51u3Wh9x4ZiE2hTaNNj86utmS3Xtsb22lzyXN+5q+d2z31uZ27Ht9tjd9Oeah9iv8G+1/6Dg6ODyKHNYdLRwDHRsdbxBovGCmNtZp13Qjt5Oa12Oub01tnBWex82PkXF6ZLmkuLy6N5xvP48xrnjbnquXJc612lbgy3RLe9blJ3XXeOe4P7Aw99D55Hk8eEp6lnqudBz2de1l4irw6v12xn9kr2KW/E28+7xHvQh+IT5VPtc99XzzfZt9V3ys/eb4XfKX+0f5D/Nv8bAVoB3IDmgKlAx8CVgX1BpKAFQdVBD4LNgkXBPSFwSGDI9pC78w3nC+d3hYLQgNDtoffCjMOWhX0fjgkPC', 'N');
print_out('68JfxhhE1EQ0b+AumDJgpYFryK9Issi70SZREmieqMVoxOim6Nfx3jHlMdIY61iV8ZeitOIE8R1x2Pjo+Ob4qcX+izcuXA8wT6hOOH6IuNFeYsuLNZYnL74+BLFJZwlRxLRiTGJLYnvOaGcBs700oCltUunuGzuLu4TngdvB2+S78ov508kuSaVJz1Kdk3enjyZ4p5SkfJUwBZUC56n+qfWpb5OC03bn/YpPSa9PQOXkZhxVEgRpgn7MrUz8zKHs8yzirOky5yX7Vw2JQoSNWVD2Yuyu8U02c/UgMREsl4ymuOWU5PzJjc690iecp4wb2C52fJNyyfyffO/XoFawV3RW6BbsLZgdKXnyvpV0Kqlq3pX668uWj2+xm/NgbWEtWlrfyi0LiwvfLkuZl1PkVbRmqKx9X7rW4sVikXFNza4bKjbiNoo2Di4ae6mqk0fS3glF0utSytK32/mbr74lc1XlV992pK0ZbDMoWzPVsxW4dbr29y3HShXLs8vH9sesr1zB2NHyY6XO5fsvFBhV1G3i7BLsktaGVzZXWVQtbXqfXVK9UiNV017rWbtptrXu3m7r+zx2NNWp1VXWvdur2DvzXq/+s4Go4aKfZh9OfseNkY39n/N+rq5SaOptOnDfuF+6YGIA33Njs3NLZotZa1wq6R18mDCwcvfeH/T3cZsq2+nt5ceAockhx5/m/jt9cNBh3uPsI60fWf4XW0HtaOkE+pc3jnVldIl7Y7rHj4aeLS3x6Wn43vL7/cf0z1Wc1zleNkJwomiE59O5p+cPpV16unp5NNjvUt675yJPXOtL7xv8GzQ2fPnfM+d6ffsP3ne9fyxC84Xjl5kXey65HCpc8B+oOMH+x86Bh0GO4cch7ovO13uGZ43fOKK+5XTV72vnrsWcO3SyPyR4etR12/eSLghvcm7+ehW+q3nt3Nuz9xZcxd9t+Se0r2K+5r3G340/bFd6iA9Puo9OvBgwYM7Y9yxJz9l//R+vOgh+WHFhM5E8yPbR8cmfScvP174ePxJ1pOZp8U/K/9c+8zk2Xe/ePwyMBU7Nf5c9PzTr5tfqL/Y/9LuZe902PT9VxmvZl6XvFF/c+At623/u5h3EzO577HvKz+Yfuj5GPTx7qeMT59+A/eE8/txAYbrAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgBw4LKi43hzQHAAAAFmlUWHRDb21tZW50AAAAAABBcHBsZU1hcmsKy0CeVQAAIABJREFUeNrtfHdYVNfW/rvPOTBDmWFmKIp0saPRxILGXlJMNCHRGBNNUWzRXDTGxJKiUWPUmKioEWwpdlRiIfaoCCioWBAVpQ0gdYBhmMa0s74/KNEYr/H+cu/vK1nPM88ps2efvdde9V37DPBvJl15Rcilc8lyAMi/eQt/09/02FReWsYazysrNKMP7o2bM3/GDHrzxRfOF+fkfvk3h/7vEPurO6yurEq6dOVyUK2utllNcZHzJ9NnQMIL8G3TBmm3brK/Wf5/g7i/qiONRvNkfn4+3cm900e0OQJsdruz0tsLACCAkHvr5l86cKqu+cv6urDkXzemdOz4w78rK3+8vopKHq890UMVdXv3bn+uD532L+HhnDlz7rsW/qrFcTgc6RaLBTzHAQzgGAcbAU91fQqp6ZeJ/wutIx3+BUylABG55a6J/uT2z/usfK4agl0EBxEixzVpDAEgEECAgzE43GVoP22aNPj9aXMZY0QlxYy18KNzn8z7Sr9hk0UQGAAeHBgYifU9sIaPyEMkESapM4ImTWEdp7x3mHmq0h7qDpo3AxH1TRgxaogj6wa1mBR5q/v0mfsYY/Y/bB/QAkQUjhvZLxyY+C65FeSDJwaOEUSRwMBAHIGBINpsYlr37p6nmvlUXfJWuXx0/dYXGbM+ml8UF2fR+PnWjElNW/VIPh4/wpiHkojI8/L0mbPKTp6wuNZUg4kiCABjIgAGIgbGiQAxEBhq/IP5nl8tPnW85G6nSo3GM/X8xcNLl', 'N');
print_out('y5N+/fEV+XlKXl5eXT58iU6deoU/ZJwmHbt2i1uXB9D+7dto6h33ukLAN98tew+Adv6/Q//mnDdzpp8vnu3Cp23DxlcXahW4MkgCKTnf/+pv1//cSKjREra5s3pWOt2d4koqbG/7BnTqZpxZBScyMg7kYEXyCDwDR+BDLxARieBDLwTmSUS0ng1pztDX6C4Ll1ldCyBPcSi8Jfmzdus9vShKmdnqhwzlqo+/cSDsm8/0L5iwQJmOPGrLO/d8VQS2poMri5kcOJJL/Bk5AUyCgKZeNY0LpOTExkEJ7oJUNXBg0Txez0qxo+nIqkLJXbsWPSn+XgtPSlRoSw3evmQwVlKtU4CGXmBTHzDnH93XiUIdDwktBQAVq5YUTRzxgd0J/s25RfkBfxbLBZjzMJx3B2JxKWNm5zyCcS1a99WHhoaqgKAd0eOCPh24fyg8ZMjdWazqSB+/8/yWbM+in3jrbHvvTXuXXos63jpUt+SBV/EtE+/DGPzZtD5+tWKLlKtgzHwjEEEA1dvpMAAiKzR6IhwmEyCl83q11ud43cmtLWfZcOmWMmkCZM5EuFEIgwSCazde9j1lVVF4HmOifVaCyaCGANPHIkms3vzkjIvlyOH6cXYdbXsuWF/KFj25KSng2/fGu9WXQkODKXbt5Hql0M1rHXbB9p7z5/vXjplSq3rD1tI6ixlZS0DyeKAmpNIOREOcJzQYEE5EANEUYSDY6jr1s0jd+lXgcO+WOjJE+DicIB3OByP4mHdlatOgr52R8bQl/t0N9WhTOlqq1V5lDl7e4uN9p4YAcTAABATwcBQanfgmV8OFSMkFL379y/Mvn0by5Z//eXmjZuK/nJrVVFRwQCgrKy8V1FRwbLfxwE/rlt7tX+njjTmhefp12NHyVvmTq4ATR43ji5fvBjy57UrkwGA/Vwq5QDiBY4TKT2diKjz44zXdOzEtTte3lTjLKHK6TOIiNxzp88gPRiluLoSEWU9IrbxKXvrLcpxllJacOgDSkHl9fywp52jbEBUA6TrFEY1TKAz3t5ERF8DAF2+8ttvUlK0twAx11kiFr07noho0mNZ8JMngrTjx1Olk0BJ7dqp/2nb7DvsqI+vKr1PP9I5S+hqUBBZ06/ufZznFaaeuy8+n/vJvH9PFlBSUvJ75vdJTkq8Hb877u7UkSOoHcdRWyeBPps+nUKaNyMFx1GPTp1o3NgxQY/FQHVRcnrfvpQNiPoDB4mIZABAObmPl2xETb1bIjjTDT8/qklJHps37X0yAXTe3Z3I5jj80OeXljIAsP0cT1lKFV1o1pzuX7ScxvkfOt8yiMoA0bRsOTmuXKaSTmFUIjjR9VkfEVVo/lE/7mwAQGqnp/LKBIGKP55FlJrat36ueY8nWJH1gpX8CMECAEtKsu6WwFMBx8hy/NhjWRuqqX5km7/MFUql0nr8qlovq6worj2Xcg4mYx0cjAOB4ATAZrOj/G4xRo0eha1bfoRfiwB06tTFDmyHRqNReHl56fLz86lly5YPF+C4Xf6Oi5fhaNeWrX75JdUnt+8YAIC1Cn2s8Xot/brsSuz3frLiYnLjuK2Vljpy1HtMQODUAIRtHcP8Ag1GCIyH3W4DJ/D42tdXZ7txs/Bmn77kra9heO554Jff5JC1bgUx6/aS7Kn/GNauqBTanr1Y5r79nkNmf1x95c03NvnlF0Y6rV+HK1cu9SAiJ8aYjXQ1SzN79wnhZR5QV2uX+/XsmQQALLjl46SI9b7/T5KYelHua3egxN0NvJe3v+VSeg5IdACMiVZzBtkctU35FmsIKTgmaA2GC0yhWvsfEyyVSgUi4u/eLSl1OOwEjhjjeEAkNAsOgd3JGRZLHZjAYdiI1/DGO+/i4rnzbSdOe78YAI6fOJEW3qNHYqtWrf6pCyi6mQkXToS8hT9GvzFGztq2+dfyZRfXnjZvTxtfUsbY7WwwQWAcAOYQAXKE7X/11c+tmdc/8zQZwRMDiSLAGCK8fFAS1gFteWfkOURq9ekn7F7BIiJ59gcfDBR/+BHE8+CeGXJz8MKFOjCGLps33b7W+Um0Vuej2mQdm9Jj4HQA1SgpMbnYrGBSKUK7djdi0+Z/Jch9rLy7KOsW/AEEW6yofOopEBDKfsukW3NNGXV9twRAD8AaGfkWgP+cYDX2x3FMz3jOjed5MI4DLzgjuENHzPhqKRw2M1546aWVnKvsi4DAAGttjW7s+aTkX69cu8a+XLjIjxP4NgAmPUoxeY4DgQPo/wmGc4ggEE8AA4hYvcIz', 'N');
print_out('BhCrjIiP/9ySeX3GhU6d3MM5njECHBwHncMBC8dRpsKDeUVFMT4wqF/T2H4+wC6/8DzfzGztKbeaYFGp0MzVJbBi9eo8zapvqezHHxXtxoxF+YIF4C9cQK/Y79S4eEYOTvAC4yFChCg6OPwHiGMNYsRxMAGAm6weWQGBeB6MRBARGGNgoggLA7Q+nvDmuX7/UaRVq603HJqqysRb2XfoesZ1Sjufejct7WJRuaZqUoM2qwC4XLt2Vbdnz24K9vAgF4B2bdtO7dq0bVQQzJ49G/ce74uNNm4sTHaT0a3AQMqPju4DAKTR/HmPcaMeqKWKisrLPBOzGMh6MZXyJ04hA0CpUimR2VjY2N6Wn1173c+fDLwT6ZQqEjdtJsq6/VArafx2FVUAopVxZAHIDFBdw/GWyoust+8UXh/yLJW6y+k8IDryCjRENOF6pyeoykNOqe++sxoAKPH048Ev98RYSX8ixrLFbiQNQFfcZUQORwURtSSijkT0RMNayYhI2XAcTkSu/1+Qd6VS2Wiy3vGWq770VHkt69EzPDA8vHtAbaXGdeuPW+fsXLe2qq3gZPrp25Xy2pJiMIcNIgCzwYBhL76Ad95+CwCwbNkyLFmyZPayZcuQkZFxn4H3evmlXwNfewUuhYXE6WqTiKgX8/YGlfw51JqFdQARdS6a9g8nP45nkrAOgFy2VGxAcIlxAO+cW4+c32VOIa3lfj/9cDavhR9MJjNKV62E6UBCLABQSQmrD2br5czy84EtubM+hOgmZ8ZXR8CwaBGMXyyEaeEi6D/5BB4z/vG1c9s2gR23/7TBOnoU2joJLDNiuASAp0tYhxq7yQyfurooupAay/oPbOr/zwVNBCIGERwY9+hgy9quzYliNxl8rRbkL1/mDEDBGMtkjGU0wEd6xpi24XiIMWZqnOd/nKqqqh64Fz3rQ13C9p20d/sOerVHD3oKoDAXV1q/ZDEN6NiRAIinj52gK+mX12feuK4kIveUlJQqH29v0mg0SX+Y0aSm0W1AvOkmJ0o5ZyKiyY9RBnE3HE0wq728qNpJQuUffEBE5JE97X0yAnTe1Y3I7tj/gIb/sF13zrsZ6RlHSX4BRESJAGBauLCpTXK3bnd1gpSqhg0nUucSEanI7ggihyOIiPzu7e/S+MjVFUollXp7k27vXhulXhRvcwIVuLpS5sBBRERnH8tiHT8WXDVuPGmcpXSmVdv8R7UvmPlBs/T+/ahaECg7JJTo+LEVjw1S56v/fTHWjYuXENZQl6q5liHPO5ukLLJa/d2lkuSvJkzAsRXfULPOT2D4lCnw8/WDGoDdYoXNQdT/xaH5Q16OcB/w7BC/07+eF3Jz08pj18fIVZ5eVKPTYcSIEQEPTOZuMUP0WrkycmKtsHUbCns/7WJp1jym9KUXY0QnKRjjwBjVa3CTvosgMEhsIu52fQri5Sskc5Igq1c4/CTOkxljupz3/wERaPzNfZaCtscxNmaUh7UgL/9m13DPJysrZGl+fv3q5s+PlX7++WRrQUEgrl4tqJ40CUZXF6hb+HzzdHDoLKoqZ8yz2R/m5l03b8q9oFajzZlE3BoXKTyVmgbx1VeKXQ4f8VOcPotbEknf4r59CBIJGHEQGcBBbCpTiQRwvACTww5TxCtASKACEME77Ginrwkue+VlImqcPerLQURgHKGcEyB9aZj2qalTbxSOfqND80tXmPrliA9zWod+6N6qLewkPjTD5JwFFHr7IHz1mtlM5rb8LxesmmotFColwrp3gzo7J2pj5ARF3JIlQ5WB/j29uveAVupKYrWWuXGM5VzLwOXTp9F1yEAYjbWoqKhcM3jIkAsdevZMWjh79tBFn8+3tWrVCrNnfgQiEYuWLoWPtzcG9B8oP3v2fsVl/n4EQE/nUzqXtA29xsfvB3JzYTx5GhA5cEwEQUQDaNy0EBwAMxjIyRnuffuxDE159IDExFzG2AYAMAgCSCKB1sUN4LnS+545ZhRRZTljXs1CTjz/XGen0vKriuxs3NodN+nkO+9ITZcuiJejPkALvRH8G6PQK3ZTHDZsBvNsRn9cnNaAMRZNF1LrLo55K1ZZdBfpsz5Ez18Obi2Z+0l/55KSXtzhBNjS0wEHqx88UX1iUV/5BAODgWcwPtUNXfoPiBWzclwNEiksbq5wNughHj0JwAGAQSRCPZpOMJAIt/Hj0GzAYBUA0OlTk4qPH4tlcfFgJeUwFZWA53g0SeXvS3cMCP5uXRWTuS2nfDVYSPBfI1g1l69A8dSTUKiUKNVoXriZmfl9zqV074rr15lDYChNTYEjLR0jvpjP5L4tUKfVQgIHtX7iCRb+7DO1KUdPtEzIuFYV6+urOXRgn/Mve/fIiwuKEPHmaCiUCtgtVvTr25eZzXV9+g8arF646IsH44Pvt4D16p1BRP7Xiu4KJbpayAUGT', 'N');
print_out('mTgQPVMaciRWQN7eQB2jkedxBl+PZ/mBiz/Ss0YI7pzB6xNG+h5PqTGzZWqXVwYgAd8OvNqRud69MDTR49dSxr5ur+1pFiwlZdBdDg4J3c36PS6BaLECV0HD7Izxorp5k2wDh0eUpz2hn3bVrAePTckPP/cCbFaJ146fQY9LXVii6VffVl3/Khn9oXzUKgLxZBPPwkuWLxULchkHNWjbCAicJwAI8/QvF9vjo/bpHYMHcXrnaUtK1zcRKloB8d4EBPBEeAgERx4EByottnx3OujGNbHwL5vL9jAQRuoqvJEypUM0Wqug6vNVm/dGqzj70aOAnKgxzvv2PHuuw8VqgdM/p+hczu2Bfo4SecwqfQ9Awhqq4W4qmp2fM5cKHgOoihCI3XHyBXLUJp9BwnfrUfHXj0h8/F0mxm7yXQofp+qtrhUnZWV5d6tX2/2+bQo1FRVos/QoWjWKhTfRq85C6A//iZQrRZMrmw6/k+iP2WxiIilJCcv0ZaUcCXJKR9n7I6HaK+D3skZwZMnMFmrUNiZAE4UAZHACQJatm4DI481S/YfzG0V3g11tcaZ3V8f0zbryuWxW+Z+ijqrGabKKgQGh5C2WsvKS0rPRP+09ci30WuWL5w/f3X3bt0/Hzp8mO7/smA1CtP/NKF6MEitqgbzVP12bbPurykpfiozt5Cr0FT4uRr0yP3ySzS3AXXkQJ3DDqdePSF9YSjobgkyDh5CWUEhlh2Kr1X16tWCZ8xYUVai2Tx3rtOVU2c8fLt0RugTnXFw5WrYjAZ0jYhAxJT30O+5Z1hezp3ZhUUl7y2c96lT5o3rLSpqdao7N2/VtOnQvgG3ZA/1+3/Tf1OLlZaWhvDwcDBPFchB4XdWLDtf8OMOdiK4JTQSKTp8/jlKeUB0OCAwHk4cwe4Q4eosAeN4SN3c4NInnMa9Nfqb1qGtP9ry9NPQaDSrjh0/Pv3nzd/T1bi9TOpwoCQpCX0GPwOHqxusdjvOnU3+aEnc7oKUpERavWw5wjqGobamEpW1Oko5k1jdpkN7do/VhLu7+1Iims0YA2MMoij+vYL/DUipVEKlUrXMyMjIv0+wwsPDceXKlajCzBuq1OVfvyzs3sXaWK2wurrD02ZDxa5d8BjzBkw8B7e2bWG/ehUCY9DZbHB1dUnz8fM/0rl3z5uuvLDHUVMdtXj026H7VnwTFfhkF0gkzsxhs4PjODCHAyazGePnfwqb0YSuA/qOTjl7tsvVM6foxJ44ps4MQ/fwHrh1K4vp9bWxv5/A66+/fhSAxWazEc/zf6/ofxPy8PCQeHh4VGdkZPzmCq9cvyS3WcT88jKN0lJSwJonn0fI+QtgImBzEGwcocpVgso3xsDWMgjmikqYklPg5HCgba8++vCPZsgBQFtdmZt94yaXvPmHoOojJ5jVUgdbq1D0fncsTkevhUFdAItCjp052SjTm6CtrMCPK5ajS5++uHDqDA7s3gleIqXTd7IM/kHBwQC0hXn5FNiyfrvW6NGjsWvXrr9X8X8IcRLeVWcxW5UWSx3jRB7ODgJHdgggOPMceDsHjgR4eCkgU8iLm4eF3X1pQ+zUt+P3svCPZsiLbt6ITTt7ln799XTL4qK7wZoLacyd7JAxgvZGJnyDAtFlwrsIGPEKvjl+AoVVVUg+fRwp++NxbOs2fDdvHvoMGYy2Xbpg7MRIg39QsLwoP08LoEmoANwnVLm59Xuv7Ha7n16vDxJFsTkArFy5EgBgMBj8jEZjEBHJAWD+/PkAgOzsbBARy8nJCSkrKwsBgEuXLt2PsNtsD4CyFotFnpKSEnT9+nU/ANDr9X51dXVBJpMpyGQyBZnNZj8AMJvNfmaz2c9iscj0en0IANy8eRP79u0DETGdTqcEAKPRGKLX64OsVmuQXq/3u7fW2li9MJvNLa5duxZCRKxxjI0vTzS2JSKXxjEaDIZgvV4fZDabQwBgxYoVjfdDDAZDcCMvfvrpp3uTMvnZs2eDdDqdHwCcPn0aJpNJMBgMIUajMaiurq6pWmAymYLr6uqC9Hp9kMFgCDKZTCFGo/GhyZ8giiJADgYmwsIL0CqVaCaRQGayApwIgeegV3hgwMiRGZynd9NOTbJaotS/ngk9PefzSUajCR2nTYReJDjAAxyBF3hYRTu693oavYYNR53FirvZd3D11CmIINhNengA0Fdp0SW8R2L009tOtg7ruBgAXhk48J9qQ2hoKEwmU3hMTEyq0WiE2WzWR0dHb4mKippBRO7R0dF3LBaLa2lpaeqSJUtOz5s3b16HDh241q1bi2q1OmbdunWTZDIZLBbLZIlEskGhUKCmpgYzZ87sFR0dfQ4Ai4mJYe3atcOAAQMoISHh7MGDBzsrFAocPnw4cO3atZcZY148zzfFebt37267c+fO80ajUXQ4HCusVutSo9H4npubWwwAHD', 'N');
print_out('p0aGNZWZns2LFjSTExMWvsdnvj4tYC8FAqlZg/fz48PT1BRM0WLlxYrNFoMH369A3dunWbvG3btgFvvvnmmwAmKZVKEJHkk08+SUhLS5sfHh6eHBsbm2+z2cDzPKZMmTJ51qxZGxITE6fExsauF0URJSUlqYmJidv69++/rlWrViwnJ4eio6PPpqend+7SpQuIqDNjLGPVqlUBDocjz2q1gogwZcqUzjExMRmrVq3K5zgOgiDAZrOB1e+OaAngj8tHN29m0dmziXQw4QDt3bOHDsRuoPOvRtC14JZ0NSBEvNC3H1lvZurulfIL59OqTnyzUtzYvRftCQyln/xCaMWAwXT4uxj6ccZM+kgmp6m8QEkrVhERUW52DqWcOEmRT3SmkXIl7Vz2NW39chF1Buij4cMJAMpLSiY+++STRd1bhqQAgEP7zwueRqPxCz8/Pxo5ciSNHTuWFAoFjR8//iwRtVcqlbpnnnmGBgwYQG5ubtSnT59kAAgODk709/enCRMm0MCBA8nHx4c4jpsEAGvWrPEbOnQoAaC9e/cmNz7nl19+0TVv3py+/PJLGj16NL3xxhvV06dPp4kTJ1JoaKg4cOBAcebMmZSdnT23ffv2uXK5PPerr76a4+LiQlOnTi1qsIJJbdu2JQCz4+PjCwHQ4MGDafLkyRQZGXlfyWfdunXTAwICqtu0aUNvvfUWeXl50cSJE898++23H3p7e9+XFrdo0YJOnjz5BQA4OTnRc889R5GRkY27REadOXMmHwANGjSIBg4cSAqFggBMBoD27dvXymQyWrp0KXXq1InGjRtHhYWFMhcXl2CpVEpvv/02vfbaa007TiZOnEhjx44liURCI0eOpAkTJtD48eMfjpBmZd2kS+mX6NdTJykh4Rfaf/AAbfvh+7vX9u1RU2mZttGEWjWa8NzsbMvJ4ycpfts2cd2AwbQrtC0dDGhFcUGhtKpNG4qbP59+2hR79+SGTUV1t3NINBgpKTGRdm39iQ5s3ECjBIHGCk4UM2UqHdu1i+I3xFLZ7dvivrh99MO69dRT6UGdpS7lROT9KB9uMpkWKBQK0mg0eQAwaNCgPAB5RDTFy8uLEhIS8gBgypQpRQBy7Xb7nObNm5O/v3+ThrVu3ZrGjBlDJ06cCH7yySdbcRxHzz//PKlUqqbqqqurK/n6+s5pWDx5586dRQByIlJFRUXRqVOnmha7Xbt2arlcrgaA4cOH5wG4CwBjxoxRu7m5iTt27Hh77969eQBoxIgRXxGRLCcnR37vvMLCwhYAoP379xcSkXPfvn3TXnrppaQVK1Z84OHhQfcouIenpycdPXp0QeM4x4wZMxsAduzYQZMmTTIlJSU5AFDPnj1nN2RvNHXqVMrKyiJnZ2fHnTt3JgNA7969VSqVihYtWkQAPIKDg0mpVHoQkcfkyZPpyJEj1BB6zFEoFFReXv7IIjfn7u5xw93dHV5KLwQFBiKsfVjimHfe9e884rVg5ttcyRirpaybsZpTv6YK1zOcXWEHY2ASuwgJOPCcCIF4WJmANqGhGW9PmOw/eGLkazUyN1w6cgQ39sVDSoDDboMzxyDabejarRuejXgFHQcOwZEDB1n60QQIFgsEBweJs7MrgLBHDdzhcIDjOOTk5KjS0tJmpKenK4ODgz0AZFosFvOdO3cU69atO7N//35/T09Pj0WLFpm1Wi0iIyObIIzIyEgkJSUhIiLCuGzZsu+kUik+++yzpSaTyZeIegKAIAiYNWuWtMHy1F67do0DUGs0GmV2ux1Wq/U3ZnIcGl+Q2bJli1KhUPgR0Yzt27fbjEaj+s033/xJFEUOAO7cuTNn6NChtVFRUfdtEfjhhx8kvXv3RkRERMDzzz9viYmJOXvw4MG+dXV1isY2Wq0WjDEdY7/BkKIookWLFs9fvnx59urVq7Fhw4YPHA5HHgA88cQTz//888+ztVot8vLyjn733Xdaq9Va0KZNm9hdu3Zh1apVsuHDhzfGX8xkMmHOnDkLVqxYseDAgQPQarXvA0BlZaWUiGA2mx9ZsRGcJdK+vMXswfM8eXh4kMJTWdU4YG1F+Xv5K9fMuTFhSiCv1cIqdUFtxw5wHvocPJ7sjJqSUgSIDlTU6mnIvIWGLm+/3RkArqRdOJd/JhFZ27bCUqWFRW9Ay/79wPwDYCguQvOuXXA1MxOFN27gcHQ0NBoNpGM4tHiyE7p162ZljJ0xl5bCxdf3nw7ezc0NgwYN8vDw8FgZGBiI4uJidwBDXVxcuHnz5ikFQejv5uYGX1/fIIPB8CERQRCE+wSB4zi88MILtmXLlj0TGRmJ3r17z23evPmcWbNmDQWQyhgDxz24bU0Uf9theS/W1giDeHl5BRGRbs+ePZ97eXnJgoKCitPT05v66tevH3r16gXGGB0+/NvW5m7dun2RkpIyLyEhQXz', 'N');
print_out('llVcwYMCAWSqVqrtMJjvQCBDX1tbWbx2759kWiwWxsbEDtm3bNkChUCAvL0+Rn5/PNViwAfHx8QNGjx6NadOmndq8eXObRnDc398fPM/Xw0EN/Wk0GnzzzTcztFot5HL5RhcXl/WN83ssaswyrFarU1ZWlkqtVusO7t1HpxZ/Sde7Pkma0NZU1rItFYa0o5SuPShxw0bavfl7Orpunbiid5+c/P0HiYhcb928deLIkaO0Y32MuHTwEFrRIoC+UnrTljfG0qEft6mzrmVS5d1iOnnsGO3Zs5diFi2iV+RyGsoL1Atoekc7+rNPH6kRZrN5gUKhIKPRmP+78lMfiURSe/z48WwA7wGguXPnuhUWFk718fEhLy+vu0SkLCsrUwUEBFBERISDiNoDIJlMpm/RogX5+PiQj4/PagDw8/MjPz+/laIo+i9evLh3ly5dyMfHJ6SmpiZoypQpTW6iwY2pZTJZkwX6/PPPdZ6enhQYGEhVVVVJABAXF6cGQBEREV8ZjUbZxYsX5fdmp3K5fJmrqys1zGWMt7e3GUB+QkLCBwqFgpYvX64ym82K27dv10okEjEtLe3DRlcYGRl533vuJ0+eVDfEWPfdv3XctkQaAAAFt0lEQVTrVrJCoaDDhw+vr6io8B81atTTvr6+9Nlnn+kAqEJCQgiAcPjw4doBAwbQxo0bAwGgvLx8gYeHB6nVavWfQt4bd38WFBRst9lsr+Xl5cGh18MpLwceVisY6t9f4RmDzMkJvLPkjKlFi9NePt41s6ZNi56e8Mu55JiNxqrCArgFB8FBDiYIAgSeg+gsBRPYr8NeH7E/r7h0TU5xMURGIBKhaOELm6sb/Nu2w3tvjVW8FBUFAIhatPiRqiGKotRut0Oj0Sh+95XNarWSRqMRXn311dP5+fm6uLg4w5IlS9pWVFRMfPnllzdGRERUV1dXo3379ti/f3/w6tWrr3Acp6utrR0GoMfPP/8csGbNmhkLFixYyhiL3bFjx4z3339/RmlpKaRS6dWPP/64ShRFz0ar1Uh1dXUwGo0AgOXLl7OPP/44CIA2KioqxtPT871GSwcApaWlcyZOnDjH2dkZGo3maW9v7/MAwPN8/ODBgz/OzMykd955ByEhIRg6dOiVF1988dibb76JlStXVhUUFGDLli2YMGGCPjw8/JuGmBOVlZXS30EnjRBG0/2zZ8+y9u3b95HL5bGRkZFTIiIipqjVagwaNOjaokWLugAINplM6Nu3r/+GDRuCjUZj1Z49e+YAmEpETjabDUTk8chaYXV1NVQqFcrKys5XV1f31Gq1qKyshF1TCe+kRISkX4LMYoPNIQKCM277eKP3z/uXMm/VXACoqap+/9bBhDVXFi+C3C5CG+CPVtPeQ3VqGvLj42CHM4Z8Ou9gl1EjdCWa6rdqtFro9VroDSaYavVQMobeT/fWykNDVI9V+SfChg0baNKkSXLGmP7e79asWaMdOnSo2KpVK8+cnJyqxMRE1TPPPLM8MDBw9s6dO/tmZWWdVSqV8PPzk7/22mv6uLi4KqPRiHHjxnkCwNq1awNlMlmBi4tLy1GjRuVv3rw55sKFC5OdnJxq165d69GIKW3atGmHl5dX7CuvvHKmwRpV1dTUYNKkSZ4N18EmkynfbDYHiaJYOG3aNOTk5FQdPXpU1egyJRIJRo4cOV0ul0cHBgaisLAQp0+flmVmZtbm5eXB1dW17+LFi68yxgw5OTmylJSU2vPnz6NPnz4YPny43MPDQw8AmzZtosDAwKXPPvvs3EY+FBYWVh05ckTl6em5dOTIkXPvDSGMRiO+//77mNTU1MlhYWG1UVFRHgCwfv36YLlcni+Xy0OGDRtWsGXLlvVKpXLyq6++ykRR7LF58+a0CRMmPMDzPySDwdBSrVZXXr2aQWeTkulQQgLFb99Op778kjL79qWy0DZU0r4D3e7ag0qWLE8EESssLJx2/fp1OvjjD7S5c1c6EdiajgSEUIyvP13YsUvcvnFD3tHoNWrD1WtJAFBZoTmWk51LGVev1iYnJeadT005AwAb4/bKD38XO2z5lPfos9dH9f2zgrVnzx5277GRdu/e3XRdUFBwX3CUnZ39QB9Hjhxpan/o0KEHXPDv0f5PP6130zt37rzv/vHjx5t+u2/fvj905fn5+Q918RUVFU3n8fHxf9juxIkT991PTExkALB3796m+8nJ9UjJ3bt32e/Gd19fx44du+9669atDzwzLi6u6fz06dPsj3j8T3c3VFVVjTYajTt1Oh1MRiNq9XrodDrYjWa4lZSgpakWTKvd59emXYZxQqSyRl0wo7j4LrQ1NRDulsD8w0+QVetgZ0C+3Y5phw/PlXYJW9rEtMwbnE/HMLGyUjMdYCnu7u7u2dnZg6u11a9VllW03fbxHJSqc/FWVBSmRUf//R9a/1t2N3Ac9z', 'N');
print_out('PHcYE8z3McX78t1cnJCXYXQm1AAORPdCD/Tp0rGGN1xa+NCDWZDatEkWC32eGw22AAQBwHOwAdzzFpl7D7gjufjmFiRUUFvLy8VzcIsicRFVZUaDZb6+qovLwcAoCq6uq/hep/Cf0XtNFmA3zXn6gAAAAASUVORK5CYII=" title="Click here to see other helpful Oracle Proactive Tools" alt="Proactive Services Banner">');
print_out(' </div>', 'Y');
-- page title
print_out(' <div class="header_title">EBS '||p_analyzer_title|| ' Analyzer Report <br>
<span class="header_subtitle">Compiled using version '||g_rep_info('File Version')||'/ Latest version:</span>
<a href="https://support.oracle.com/oip/faces/secure/km/DownloadAttachment.jspx?attachid=1411723.1:CP_ANALYZER">
<img class="header_version" src="https://blogs.oracle.com/ebs/resource/Proactive/cpa_latest_version.gif" title="Click here to download the latest version of Analyzer" alt="Latest Version Icon"></a>');
print_cloud_image;
print_out(' </div>
</div>');
-- top right menu
print_out('<div class="topmenu">
<div class="menubutton" id="homeButton" title="Open the analyzer''s main page">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZZJREFUeNrMls8uA1EYxTvaBZEgbLrmAfQNuiFio5SFxLKJnWAhFaJVUiEktk0aElai/m2IaBcaPAsrT0Dr9yWniTCYTlrpJL/c6Z3vO2d67p3JONVqNdDMoy3Q5CO0VXrxVLgyFHadp7/AEIdLaqa+GXi9E4Qchh39TCJWy3YSHJn4jigIB7AkDjEM6tqrRsc1Ig/iHXACY5DRXBp6MZlmHIYi9Pkx6IEriJo4sawrLovHzm8hJpNSvQZhCQyaGOIZhLNa8FVtDjMpw4hMPBsMwB30S2QDwX3GBf2DToZFqCq2J5l4WuQIPErcst6EXE1cx7zmsqqx2geMI38ZWNb3iictgWOYdbkRmzv6ZGI9ZUyiPxnElHm3GrbhFGZ+WSe7VlBtCrpMA5PxrwYJOId2Fe5q98Q9bOMJ1e6p1zTOMEnUDJKQ18OUUubXMFrHK8dqb9hd1rsmrTwmy062+OzW4OsVi4Hz72/TljKY04MZ0nnDDXJk/G7oIWusAcJvbuctuwYVH1qVegwufBi49jjN/mz5EGAAm494BUo6enYAAAAASUVORK5CYII=" class="smallimg">
Home</div>');
print_out('<div class="menubutton" id="execDetails" title="Show the analyzer''s execution details" data-popup-open="popup-1">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYBAMAAAASWSDLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACFQTFRFJSUlXI2z////XI2zXI2zXI2zIrW9XI2zbKDIhLvm8PT344Mw7gAAAAZ0Uk5TAAAAucPE2PdAKgAAAFJJREFUGNNjUEICDOHlcFDCULUKDpYTwVmWhZ2zLAs7B8TExoEwsXFwuaByJhxMR+WYI/xTzAACglCAhVNejsSpnA7jsJeXd84oLy+EcUAAyAEAU+SE9OHO8IMAAAAASUVORK5CYII=" class="smallimg">
Execution Details</div>');
print_out('<div class="menubutton" id="execParameters" title="Shows the analyzer''s execution parameters" data-popup-open="popup-2">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATVQTFRF////LYa/LYa/LYa/LYa/LYa/LYa/LYa/LIW/LYW/LYW/LYa/LIW/LIW/LIW+LIW+LIS9LIS9LIS9LIS9K4O8K4O8K4O8K4O8K4O8K4O8K4O8K4K7K4K7K4K7KoK7KoK7KoK7KoK6KoG6KoG6KoG5KYG5KYG5KYC5KYG5KYC5KYC5KYC4KYC4KYC4KYC4KH+3KH+3J321J321JnyzJnyzJnuzJnuzJXqyJHmwJHmwJHivJHmvJHmwJHivI3etI3euIXSqIXSrIXWrInWrInasI3atJHivJnuzJnyzJ321J361J362KH62KYC4KYC5KYG5KoG5KoG6K4K7K4O8LIS9LYa/MIrEMIrFMIvFMYzGMYzHMY3IMo3IM4/KNpPPNpPQNpTQN5XSN5bSOJbSOZfUOZjUOZjVtemDjwAAAEB0Uk5TAAIEBggOEBIXGx8hLDAxM11hYmRwcXR2d3l6jJCTlJaYoqiqsbO0tri8vcLExsfQ0+Lj6+zt7vP3+Pr6+vv9/dC+MVIAAAFxSURBVCjPbVLpPxtRFD1v3kgprVKJrWm66RaKkYwlliTP8p6GCbcqwgxpOf//n+BDJvjhfrvn3P0e4M6KxhTxnNU7nfojKJv3AFTJKgAvn+vhMy4KtHqzR9oRpRcj9zWNdwmlvL73lzy1lVCYuG5OPiIZJyRJJjHJow8AAB0IScYHu7sHMUlKoLu1/DDmtSxPDw9PL8s149BPm6tKQpnXAKDnhUnFS4kRy3ao8OrnjyGosE072t23ak/pcni9eXKyNYScY8tWTRH1DkmaDL78IeUzMoYkO3XUblLik5DHH1PipoaF7Z3GOV0WL1eb0coAso4XjZ3tBaB/cLLBdknhRSGfgSq12Zga7AcAeBuXlF8KANSc8HKjN64ux/wvpbG+vrEl+ce4nC6uF4Ukz5wx7uzhSd4dPj5i9B4AkHNXlHDNtsiWXQuFV78nurW+7TcD33trSTvq+UFz/3vvheMF//61ujD+VAy1Z1Uya8zsvXcLH9dhX50/y6MAAAAASUVORK5CYII=" class="smallimg">
Parameters</div>');
print_out('<div class="menubutton" id="feedback" title="Opens the Oracle Community feedback thread"><a href="https://community.oracle.com/thread/3093389" class="blacklink" target="new">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNQTFRFIXSq////IXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqIXSqInatI3iuJHmvK4O7K4O8LIW+LYbALofBLojCMYzGMo3INZHNNpPPN5XRN5bSOJfUOZjVUpq7wgAAAB90Uk5TAAABAgwODxkgJD5HUlpncn+WoKyyu7zD0Nbq7vf6/POduf8AAAChSURBVCjPddJpE4IgEAbgpdNu7LDDas1QO4n//+vKxIbN5f3EzAPLsgMIT2CFNkICCZoqKFD6QEkPPIk4YIg4UEYyAHxXynbdgPqgHybtBry01gi47P5Bvo8/Acy2Awqnvt15iUcEkt66bEsZczvOKCT18qHmPNzPIVvqepi6pdLAXl7shuTyIv2OBLNNwL4cFx1+JONWNZIISaLfEH3f5w2X1DnbEexn8QAAAABJRU5ErkJggg==" class="smallimg">Feedback</a></div>');
print_out('<div class="menubutton" id="analysisView" open-sig-class="analysis" title="Displays all data in a single page, without the Errors/Warnings/Passed Checks/Information messages - Click Plus (+) icon to expand all Table Data">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABjFBMVEVentFhn89in9FjoNFjodNkodFnotJppNNppdRqpdVqptVrptVsptRtptRwuGl0um16rtd7r9d7sdx8r9h8st19r9h9s95+v3ibzZadzpmk0qCp1KWr1qiy0+yz2a++2e7A2+/U7NjV7dnZ7t3i8OHj7fbj7vbj7vfj8eLk7vblPCPl7/bl7/fmRCzmRi7mSjPmSjTmSzTm8Pfm8fnm8uTnSjLnTTbn8Pfn8frn8vrn8vvn8+bn8/7n9Pzn9f3n9f7n9v7oUjzoUz3oVD7oVT/oWEPoWUPoWUToWkXo8Pfo8ffo8fjpWkXpW0bqX0vq8vjraFXrb13rcF7sd2Xs9Pnt9Pnt9Prt9uzwi33w9vrw9+/xlx3xmiPx9vryny7yn5PyojTypZnzojT0qkb2vLT2vbX2xb72xr73wrr3/Pn62NP63Nf74Nz76ef7/fv87dj879z8/f797+7+4tz++Pf/4tz/5uH/6ub/7tf/7tv/79n/79z/8d3/8eH/8u///Pr//fr//vr//vz///8pVMrYAAABOklEQVQYGQXBPWuTURgA0HNvngSbNLQxKCpNBpVWsAUHHXRwcnJzcnLxr/TXODk7OQripHWpVIh1CbTFGKW+356TXh1PAQBwvmsaAAAQ19J4+/EJw1yWoB9w68Ov0Ds4oLocBmiLTD362IUOi4tvT2+Ai/OgutelgO+LnBOQBokWGT+P+hsZACBwtjUA0JVBg8DpBANgspmpEYCd9w31o7vLd4n2NYHZCjuU3YZVmWmQMV2VUNXDTcfroijWCMyqRdPrF3XMtjz5M2WJgNtxtl7Oh1evs1z9pkVImN/818QoYX8fJKH5csIwp7YuANxp2A4AAIhJPPvcA/I86X60QP0gHQL4VBo8BBAA3h71NKcvADKAvTwe5z0A6ZA3X3Mmj7L2b0vb3n9JoEpXoOikgMsKgefHHQBIu/gPPNJqMuZfDkEAAAAASUVORK5CYII=" class="smallimg">
Analysis View</div>');
print_out('<div class="menubutton" id="printView" open-sig-class="print" title="Displays all data in a single page, including the Errors/Warnings/Passed Checks/Information messages - Click Plus (+) icon to expand all Table Data">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAiUlEQVRIx2NgoCdYs2nHYSD+TyE+jM+C/8/efKYIg8wYWAuogekarwzmERMPA/F/GuHDIAv+B5XvoAkGmU2xBT8vtoExjJ983hiMh44FRAWRU+pCqkcwzEwGmAANUiemBdTMaDgtoFZRMfAWNO19RhIeUB8cpqEPjgxchUOpD4ZvlUmNVgVKxAIAsdgxrFcW4/sAAAAASUVORK5CYII=" class="smallimg">
Print view</div>
</div>
</div>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_rep_header: '||sqlerrm);
raise;
END print_rep_header;
----------------------------------------------------------------
-- Prints execution details pop-up window --
----------------------------------------------------------------
PROCEDURE print_execdetails IS
l_key VARCHAR2(255);
BEGIN
g_sections.delete;
print_out(' <!-- print Execution Details pop-up window -->
<div class="popup" data-popup="popup-1">
<div class="popup-inner">
<table cellpadding="3" cellspacing="0" border="0" width="100%" style="font-size: 14px;">
<tbody>
<tr>
<td colspan="2" class="popup-title"><b>Execution Details</b></td>
</tr>');
-- Loop and print values
l_key := g_rep_info.first;
WHILE l_key IS NOT NULL LOOP
IF ((l_key = 'FullHost') AND (g_cloud_flag)) THEN
print_out(' <tr>
<td class="popup-paramname"><b>'||l_key||'</b></td>
<td class="popup-paramval">
<span title="">'||g_rep_info(l_key));
print_cloud_image;
print_out(' </span>
</td>
</tr>');
ELSE
print_out(' <tr>
<td class="popup-paramname"><b>'||l_key||'</b></td>
<td class="popup-paramval"><span title="">'||g_rep_info(l_key)||'</span></td>
</tr>');
END IF;
l_key := g_rep_info.next(l_key);
END LOOP;
print_out(' <tr>
<td class="popup-paramname"><b>Start time:</b></td>
<td class="popup-paramval">
<span id="start_time"></span>
</td>
</tr>');
print_out(' <tr>
<td class="popup-paramname"><b>End time:</b></td>
<td class="popup-paramval">
<span id="end_time"></span>
</td>
</tr>');
print_out(' <tr>
<td class="popup-paramname"><b>Execution time:</b></td>
<td class="popup-paramval">
<span id="exec_time"></span>
</td>
</tr>');
print_out(' </tbody>
</table>
<div class="close-button" data-popup-close="popup-1"><a class="black-link">OK</a></div>
</div>
</div>
');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_execdetails: '||sqlerrm);
raise;
END print_execdetails;
----------------------------------------------------------------
-- Prints parameters pop-up window --
----------------------------------------------------------------
PROCEDURE print_parameters IS
BEGIN
print_out(' <!-- print Parameters pop-up window -->
<div class="popup" data-popup="popup-2">
<div class="popup-inner">
<table cellpadding="5" cellspacing="0" border="0" width="100%" style="font-size: 14px;">
<tbody>
<tr>
<td colspan="2" class="popup-title"><b>Parameters</b></td>
</tr>');
FOR i IN 1..g_parameters.COUNT LOOP
print_out(' <tr>
<td class="popup-paramname"><b>'||to_char(i)||'. '||g_parameters(i).pname||'</b></td>
<td class="popup-paramval"><span>'||g_parameters(i).pvalue||'</span></td>
</tr>');
END LOOP;
print_out(' </tbody>
</table>
<div class="close-button" data-popup-close="popup-2"><a class="black-link">OK</a></div>
</div>
</div>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_parameters: '||sqlerrm);
raise;
END print_parameters;
PROCEDURE print_mainpage IS
l_loop_count NUMBER;
l_section_id VARCHAR2(320);
l_counter_str VARCHAR2(2048);
BEGIN
l_loop_count := g_sections.count;
print_out('
<!-- main menu with tiles -->
<div class="mainmenu">
<table align="center" id="menutable">
<tbody>
<tr>
<td>
<div class="menubox">
<table cellpadding="5" cellspacing="2" class="mboxinner">
<thead>
<tr><th><span class="menuboxitemt">Execution Summary</span></th></tr></thead>
<tbody>
<tr><td><div open-section="E" class="menuboxitem"><span class=''error_ico icon''></span><div class="mboxelem">Errors</div></div></td>
<td align="right"><span class="errcount">'||g_results('E')||'</span></td></tr>
<tr><td><div open-section="W" class="menuboxitem"><span class=''warn_ico icon''></span><div class="mboxelem">Warnings</div></div></td>
<td align="right"><span class="warncount">'||g_results('W')||'</span></td></tr>
<tr><td><div open-section="S" class="menuboxitem"><span class=''success_ico icon''></span><div class="mboxelem">Passed Checks</div></div></td>
<td align="right"><span class="successcount">'||g_results('S')||'</span></td></tr>
<tr><td><div open-section="I" class="menuboxitem"><span class=''information_ico icon''></span><div class="mboxelem">Informational</div></div></td>
<td align="right"><span class="infocount">'||g_results('I')||'</span></td></tr>
</tbody></table>
</div>
</td>
<td>');
print_out('
<table>
<tr>');
FOR i in 1 .. l_loop_count LOOP
l_section_id := replace_chars(g_sec_detail(i).name);
l_counter_str := '';
IF (g_sec_detail(i).results('E') > 0)THEN
l_counter_str := '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('E')) || '</div><span class=''error_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('W') > 0)THEN
l_counter_str := l_counter_str || '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('W')) || '</div><span class=''warn_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('S') > 0)THEN
l_counter_str := l_counter_str || '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('S')) || '</div><span class=''success_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('I') > 0)THEN
l_counter_str := l_counter_str || '<div class=''counternumber''>' || to_char(g_sec_detail(i).results('I')) || '</div><span class=''information_ico icon''></span> ';
END IF;
IF (g_sec_detail(i).results('E') + g_sec_detail(i).results('W') + g_sec_detail(i).results('S') + g_sec_detail(i).results('I') = 0) THEN
l_counter_str := '<span class=''menubox_subtitle''>Executed, nothing to report</span>';
END IF;
print_out('
<td>
<a href="#" class="blacklink"><div class="floating-box" open-section="'||l_section_id||'"><div class="textbox">'||g_sec_detail(i).title||'</div><div id="'||l_section_id||'Count" class="counterbox">'||l_counter_str||'</div></div></a>
</td>');
IF (MOD(i,3)=0 ) THEN
print_out(' </tr><tr>');
END IF;
END LOOP;
print_out('
</tr>
</table>
</td></tr>
</tbody>
</table>
</div>
<!-- end main menu --> ');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_mainpage: '||sqlerrm);
raise;
END print_mainpage;
----------------------------------------------------------------
-- Print footer and end of html page def --
----------------------------------------------------------------
PROCEDURE print_footer IS
BEGIN
print_out(' <!-- footer area -->
<div class="footerarea">
<div class="footer">
<div style="visibility: visible; max-height: 33px; min-height: 33px;">
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1549983.1" target="_blank" class="blacklink">About Oracle Proactive Support</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/SrCreate" target="_blank" class="blacklink">Log a Service Request</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1545562.1" target="_blank" class="blacklink">Related Analyzers</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1939637.1" target="_blank" class="blacklink">Analyzer Bundle Menu Tool</a></span>
<span class="separator"></span>
<span><a href="http://www.oracle.com/us/legal/privacy/overview/index.html" target="_blank" class="blacklink">Your Privacy Rights</a></span>
<span class="separator"></span>
<span><a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=2116869.1" target="_blank" class="blacklink">Frequently Asked Questions</a></span>
</div>
</div>
</div><!-- end footer area -->
</div><!-- end main div -->
');
EXCEPTION WHEN OTHERS THEN
print_log('Error in print_footer: '||sqlerrm);
raise;
END print_footer;
----------------------------------------------------------------
-- Print execution times in the Execution Details page --
----------------------------------------------------------------
PROCEDURE print_execution_time (l_time TIMESTAMP) IS
BEGIN
print_out(' <script>
$("#start_time").text("'||to_char(g_analyzer_start_time,'hh24:mi:ss.ff3')||'");
</script>');
print_out(' <script>
$("#end_time").text("'||to_char(l_time,'hh24:mi:ss.ff3')||'");
</script>');
print_out(' <script>
$("#exec_time").text("'||format_elapsed(g_analyzer_elapsed)||'");
</script>');
END print_execution_time;
----------------------------------------------------------------
-- Evaluates if a rowcol meets desired criteria --
----------------------------------------------------------------
FUNCTION evaluate_rowcol(p_oper varchar2, p_val varchar2, p_colv varchar2) return boolean is
x NUMBER;
y NUMBER;
n boolean := true;
BEGIN
-- Attempt to convert to number the column value, otherwise proceed as string
BEGIN
x := to_number(p_colv);
y := to_number(p_val);
EXCEPTION WHEN OTHERS THEN
n := false;
END;
-- Compare
IF p_oper = '=' THEN
IF n THEN
return x = y;
ELSE
return p_val = p_colv;
END IF;
ELSIF p_oper = '>' THEN
IF n THEN
return x > y;
ELSE
return p_colv > p_val;
END IF;
ELSIF p_oper = '<' THEN
IF n THEN
return x < y;
ELSE
return p_colv < p_val;
END IF;
ELSIF p_oper = '<=' THEN
IF n THEN
return x <= y;
ELSE
return p_colv <= p_val;
END IF;
ELSIF p_oper = '>=' THEN
IF n THEN
return x >= y;
ELSE
return p_colv >= p_val;
END IF;
ELSIF p_oper = '!=' OR p_oper = '<>' THEN
IF n THEN
return x != y;
ELSE
return p_colv != p_val;
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in evaluate_rowcol');
raise;
END evaluate_rowcol;
---------------------------------------------
-- Expand [note] or {patch} tokens --
---------------------------------------------
FUNCTION expand_links(p_str VARCHAR2) return VARCHAR2 IS
l_str VARCHAR2(32767);
Begin
-- Assign to working variable
l_str := p_str;
-- First deal with patches
l_str := regexp_replace(l_str,'({)([0-9]*)(})',
'<a target="_blank" href="'||g_mos_patch_url||'\\2">\\2</a>',1,0);
-- Same for notes
l_str := regexp_replace(l_str,'(\\[)([0-9]*\\.[0-9])(\\#[a-zA-Z0-9_]+)*(\\])',
'<a target="_blank" href="'||g_mos_doc_url||'\\2\\3">Doc ID \\2</a>',1,0);
return l_str;
END expand_links;
--------------------------------------------
-- Prepare the SQL with the substitution values
--------------------------------------------
FUNCTION prepare_text(
p_raw_text IN VARCHAR2
) RETURN VARCHAR2 IS
l_formatted_text VARCHAR2(32767);
l_key VARCHAR2(255);
BEGIN
-- Assign signature to working variable
l_formatted_text := p_raw_text;
-- Build the appropriate SQL replacing all applicable values
-- with the appropriate parameters
l_key := g_sql_tokens.first;
WHILE l_key is not null LOOP
l_formatted_text := replace(l_formatted_text, l_key, g_sql_tokens(l_key));
l_key := g_sql_tokens.next(l_key);
END LOOP;
RETURN l_formatted_text;
EXCEPTION WHEN OTHERS THEN
print_log('Error in prepare_text');
raise;
END prepare_text;
----------------------------------------------------------------
-- Set partial section result --
----------------------------------------------------------------
PROCEDURE set_item_result(result varchar2) is
BEGIN
IF g_sections(g_sections.last).result in ('U','I') THEN
g_sections(g_sections.last).result := result;
ELSIF g_sections(g_sections.last).result = 'S' THEN
IF result in ('E','W') THEN
g_sections(g_sections.last).result := result;
END IF;
ELSIF g_sections(g_sections.last).result = 'W' THEN
IF result = 'E' THEN
g_sections(g_sections.last).result := result;
END IF;
END IF;
-- Set counts
IF result = 'S' THEN
g_sections(g_sections.last).success_count :=
g_sections(g_sections.last).success_count + 1;
ELSIF result = 'W' THEN
g_sections(g_sections.last).warn_count :=
g_sections(g_sections.last).warn_count + 1;
ELSIF result = 'E' THEN
g_sections(g_sections.last).error_count :=
g_sections(g_sections.last).error_count + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error in set_item_result: '||sqlerrm);
--CG raise;
END set_item_result;
----------------------------------------------------------------------
-- Create associative tables that will keep the links
-- between the signatures that use hyperlinks
----------------------------------------------------------------------
PROCEDURE create_hyperlink_table IS
TYPE l_split_str_type IS TABLE OF VARCHAR(126);
l_split_str l_split_str_type := l_split_str_type();
l_hyperlink VARCHAR2(512);
l_count NUMBER;
l_key VARCHAR2(215);
BEGIN
l_key := g_signatures.first;
WHILE l_key IS NOT NULL LOOP
l_count := 1;
IF (g_signatures(l_key).extra_info.EXISTS('HYPERLINK')) AND (g_signatures(l_key).extra_info('HYPERLINK') IS NOT NULL) THEN
l_hyperlink := g_signatures(l_key).extra_info('HYPERLINK');
debug ('CG Hyper:' || l_hyperlink);
-- remove the table entry as we won't need it anymore
g_signatures(l_key).extra_info.DELETE('HYPERLINK');
-- split the string and extract the hyperlink details
WHILE (l_count < 4) AND (l_hyperlink IS NOT NULL) LOOP
l_split_str.extend();
l_split_str(l_count) := regexp_substr(l_hyperlink, '^([^:]+)');
l_hyperlink := regexp_replace(l_hyperlink, '^([^:]+):(.+)', '\\2');
debug ('CG Hyper7:' || l_hyperlink);
l_count := l_count + 1;
END LOOP;
IF (l_count < 3) THEN
print_log('Broken hyperlink!');
return;
END IF;
-- populate source to dest (links) table - sig and column names in upper case
g_source_to_dest(l_key).cols(UPPER(l_split_str(1))) := 'a' || to_char(g_hypercount);
-- populate dest to source table (anchors)
g_dest_to_source(UPPER(l_split_str(2))).cols(UPPER(l_split_str(3))) := 'a' || to_char(g_hypercount);
g_hypercount := g_hypercount + 1;
END IF;
l_key := g_signatures.next(l_key);
END LOOP;
EXCEPTION WHEN OTHERS THEN
print_log('Error in create_hyperlink_table: '||sqlerrm);
END create_hyperlink_table;
----------------------------------------------------------------------
-- Runs a single SQL using DBMS_SQL returns filled tables
-- Precursor to future run_signature which will call this and
-- the print api. For now calls are manual.
----------------------------------------------------------------------
PROCEDURE run_sig_sql(
p_raw_sql IN VARCHAR2, -- SQL in the signature may require substitution
p_col_rows OUT COL_LIST_TBL, -- signature SQL column names
p_col_headings OUT VARCHAR_TBL, -- signature SQL row values
p_limit_rows IN VARCHAR2 DEFAULT 'Y') IS
l_sql VARCHAR2(32767);
c INTEGER;
l_rows_fetched NUMBER;
l_step VARCHAR2(20);
l_col_rows COL_LIST_TBL := col_list_tbl();
l_col_headings VARCHAR_TBL := varchar_tbl();
l_col_cnt INTEGER;
l_desc_rec_tbl DBMS_SQL.DESC_TAB2;
BEGIN
-- Prepare the Signature SQL
l_step := '10';
l_sql := prepare_text(p_raw_sql);
-- Add SQL with substitution to attributes table
l_step := '20';
c := dbms_sql.open_cursor;
l_step := '30';
DBMS_SQL.PARSE(c, l_sql, DBMS_SQL.NATIVE);
-- Get column count and descriptions
l_step := '40';
DBMS_SQL.DESCRIBE_COLUMNS2(c, l_col_cnt, l_desc_rec_tbl);
-- Register arrays to bulk collect results and set headings
l_step := '50';
FOR i IN 1..l_col_cnt LOOP
l_step := '50.1.'||to_char(i);
l_col_headings.extend();
-- removed initCap per Standardization team in 3.0.34
l_col_headings(i) := replace(l_desc_rec_tbl(i).col_name,'|','<br>');
l_col_rows.extend();
dbms_sql.define_array(c, i, l_col_rows(i), g_max_output_rows, 1);
END LOOP;
-- Execute and Fetch
l_step := '60';
get_current_time(g_query_start_time);
l_rows_fetched := DBMS_SQL.EXECUTE(c);
l_rows_fetched := DBMS_SQL.FETCH_ROWS(c);
debug(' Rows fetched: '||to_char(l_rows_fetched));
l_step := '70';
IF l_rows_fetched > 0 THEN
FOR i in 1..l_col_cnt LOOP
l_step := '70.1.'||to_char(i);
DBMS_SQL.COLUMN_VALUE(c, i, l_col_rows(i));
END LOOP;
END IF;
IF nvl(p_limit_rows,'Y') = 'N' THEN
WHILE l_rows_fetched = g_max_output_rows LOOP
l_rows_fetched := DBMS_SQL.FETCH_ROWS(c);
debug(' Rows fetched: '||to_char(l_rows_fetched));
FOR i in 1..l_col_cnt LOOP
l_step := '70.2.'||to_char(i);
DBMS_SQL.COLUMN_VALUE(c, i, l_col_rows(i));
END LOOP;
END LOOP;
END IF;
g_query_elapsed := stop_timer(g_query_start_time);
-- g_query_total := g_query_total + g_query_elapsed;
-- Close cursor
l_step := '80';
IF dbms_sql.is_open(c) THEN
dbms_sql.close_cursor(c);
END IF;
-- Set out parameters
p_col_headings := l_col_headings;
p_col_rows := l_col_rows;
EXCEPTION
WHEN OTHERS THEN
print_error('PROGRAM ERROR<br />
Error in run_sig_sql at step '||
l_step||': '||sqlerrm||'<br/>
See the log file for additional details<br/>');
print_log('Error at step '||l_step||' in run_sig_sql running: '||l_sql);
print_log('Error: '||sqlerrm);
l_col_cnt := -1;
IF dbms_sql.is_open(c) THEN
dbms_sql.close_cursor(c);
END IF;
g_errbuf := 'toto '||l_step;
END run_sig_sql;
PROCEDURE generate_hidden_xml(
p_sig_id VARCHAR2,
p_sig SIGNATURE_REC, -- Name of signature item
p_col_rows COL_LIST_TBL, -- signature SQL row values
p_col_headings VARCHAR_TBL) -- signature SQL column names
IS
l_hidden_xml_doc XMLDOM.DOMDocument;
l_hidden_xml_node XMLDOM.DOMNode;
l_diagnostic_element XMLDOM.DOMElement;
l_diagnostic_node XMLDOM.DOMNode;
l_issues_node XMLDOM.DOMNode;
l_signature_node XMLDOM.DOMNode;
l_signature_element XMLDOM.DOMElement;
l_node XMLDOM.DOMNode;
l_row_node XMLDOM.DOMNode;
l_failure_node XMLDOM.DOMNode;
l_run_details_node XMLDOM.DOMNode;
l_run_detail_data_node XMLDOM.DOMNode;
l_detail_element XMLDOM.DOMElement;
l_detail_node XMLDOM.DOMNode;
l_detail_name_attribute XMLDOM.DOMAttr;
l_parameters_node XMLDOM.DOMNode;
l_parameter_node XMLDOM.DOMNode;
l_col_node XMLDOM.DOMNode;
l_parameter_element XMLDOM.DOMElement;
l_col_element XMLDOM.DOMElement;
l_param_name_attribute XMLDOM.DOMAttr;
l_failure_element XMLDOM.DOMElement;
l_sig_id_attribute XMLDOM.DOMAttr;
l_col_name_attribute XMLDOM.DOMAttr;
l_row_attribute XMLDOM.DOMAttr;
l_sigxinfo_element XMLDOM.DOMElement;
l_sigxinfo_node XMLDOM.DOMNode;
l_xinfo_element XMLDOM.DOMElement;
l_xinfo_node XMLDOM.DOMNode;
l_xinfo_name_attr XMLDOM.DOMAttr;
l_key VARCHAR2(255);
l_match VARCHAR2(1);
l_rows NUMBER;
l_value VARCHAR2(2000);
BEGIN
IF g_dx_summary_error IS NOT NULL THEN
return;
END IF;
l_hidden_xml_doc := g_hidden_xml;
IF (XMLDOM.isNULL(l_hidden_xml_doc)) THEN
l_hidden_xml_doc := XMLDOM.newDOMDocument;
l_hidden_xml_node := XMLDOM.makeNode(l_hidden_xml_doc);
l_diagnostic_node := XMLDOM.appendChild(l_hidden_xml_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'diagnostic')));
l_run_details_node := XMLDOM.appendChild(l_diagnostic_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'run_details')));
l_key := g_rep_info.first;
WHILE l_key IS NOT NULL LOOP
l_detail_element := XMLDOM.createElement(l_hidden_xml_doc,'detail');
l_detail_node := XMLDOM.appendChild(l_run_details_node,XMLDOM.makeNode(l_detail_element));
l_detail_name_attribute:=XMLDOM.setAttributeNode(l_detail_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_detail_element, 'name', l_key);
IF g_rep_info(l_key) IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_detail_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,g_rep_info(l_key))));
END IF;
l_key := g_rep_info.next(l_key);
END LOOP;
-- add cloud check
l_detail_element := XMLDOM.createElement(l_hidden_xml_doc,'detail');
l_detail_node := XMLDOM.appendChild(l_run_details_node,XMLDOM.makeNode(l_detail_element));
l_detail_name_attribute:=XMLDOM.setAttributeNode(l_detail_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_detail_element, 'name', 'Cloud');
IF g_cloud_flag THEN
l_node := XMLDOM.appendChild(l_detail_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,'Y')));
ELSE
l_node := XMLDOM.appendChild(l_detail_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,'N')));
END IF;
l_parameters_node := XMLDOM.appendChild(l_diagnostic_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'parameters')));
FOR i IN 1..g_parameters.COUNT LOOP
l_parameter_element := XMLDOM.createElement(l_hidden_xml_doc,'parameter');
l_parameter_node := XMLDOM.appendChild(l_parameters_node,XMLDOM.makeNode(l_parameter_element));
l_param_name_attribute:=XMLDOM.setAttributeNode(l_parameter_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_parameter_element, 'name', to_char(i) || '. ' ||g_parameters(i).pname);
IF g_parameters(i).pvalue IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_parameter_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,g_parameters(i).pvalue)));
END IF;
END LOOP;
l_issues_node := XMLDOM.appendChild(l_diagnostic_node,XMLDOM.makeNode(XMLDOM.createElement(l_hidden_xml_doc,'issues')));
END IF;
IF p_sig_id IS NOT NULL THEN
l_issues_node := XMLDOM.getLastChild(XMLDOM.getFirstChild(XMLDOM.makeNode(l_hidden_xml_doc)));
l_signature_element := XMLDOM.createElement(l_hidden_xml_doc,'signature');
l_sig_id_attribute := XMLDOM.setAttributeNode(l_signature_element,XMLDOM.createAttribute(l_hidden_xml_doc,'id'));
l_signature_node := XMLDOM.appendChild(l_issues_node,XMLDOM.makeNode(l_signature_element));
XMLDOM.setAttribute(l_signature_element, 'id',p_sig_id);
IF p_sig.extra_info.count > 0 THEN
l_sigxinfo_element := XMLDOM.createElement(l_hidden_xml_doc,'sigxinfo');
l_sigxinfo_node := XMLDOM.appendChild(l_signature_node,XMLDOM.makeNode(l_sigxinfo_element));
l_key := p_sig.extra_info.first;
WHILE l_key IS NOT NULL LOOP
l_xinfo_element := XMLDOM.createElement(l_hidden_xml_doc,'info');
l_xinfo_node := XMLDOM.appendChild(l_sigxinfo_node,XMLDOM.makeNode(l_xinfo_element));
l_xinfo_name_attr := XMLDOM.setAttributeNode(l_xinfo_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
XMLDOM.setAttribute(l_xinfo_element, 'name',l_key);
IF p_sig.extra_info(l_key) IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_xinfo_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,p_sig.extra_info(l_key))));
END IF;
l_key := p_sig.extra_info.next(l_key);
END LOOP;
END IF;
-- if the DX flag is Y or D, print all the details
IF (p_sig.include_in_xml in ('Y', 'D')) THEN
IF p_sig.limit_rows='Y' THEN
l_rows := least(g_max_output_rows,p_col_rows(1).COUNT,50);
ELSE
l_rows := least(p_col_rows(1).COUNT,50);
END IF;
FOR i IN 1..l_rows LOOP
l_failure_element := XMLDOM.createElement(l_hidden_xml_doc,'failure');
l_row_attribute := XMLDOM.setAttributeNode(l_failure_element,XMLDOM.createAttribute(l_hidden_xml_doc,'row'));
l_failure_node := XMLDOM.appendChild(l_signature_node,XMLDOM.makeNode(l_failure_element));
XMLDOM.setAttribute(l_failure_element, 'row', i);
FOR j IN 1..p_col_headings.count LOOP
l_col_element := XMLDOM.createElement(l_hidden_xml_doc,'column');
l_col_name_attribute := XMLDOM.setAttributeNode(l_col_element,XMLDOM.createAttribute(l_hidden_xml_doc,'name'));
l_col_node := XMLDOM.appendChild(l_failure_node,XMLDOM.makeNode(l_col_element));
XMLDOM.setAttribute(l_col_element, 'name',p_col_headings(j));
l_value := p_col_rows(j)(i);
IF p_sig_id = 'REC_PATCH_CHECK' THEN
IF p_col_headings(j) = 'Patch' THEN
l_value := replace(replace(p_col_rows(j)(i),'{'),'}');
ELSIF p_col_headings(j) = 'Note' THEN
l_value := replace(replace(p_col_rows(j)(i),'['),']');
END IF;
END IF;
-- Rtrim the column value if blanks are not to be preserved
IF NOT g_preserve_trailing_blanks THEN
l_value := RTRIM(l_value, ' ');
END IF;
IF l_value IS NOT NULL THEN
l_node := XMLDOM.appendChild(l_col_node,XMLDOM.makeNode(XMLDOM.createTextNode(l_hidden_xml_doc,l_value)));
END IF;
END LOOP;
END LOOP;
END IF; --p_sig.include_in_xml='Y'
END IF;
g_hidden_xml := l_hidden_xml_doc;
EXCEPTION
WHEN OTHERS THEN
g_dx_summary_error := '<DXSUMMGENERR><![CDATA['||SQLERRM||']]></DXSUMMGENERR>';
print_log('DX Summary generation error: '||SQLERRM);
END generate_hidden_xml;
PROCEDURE print_hidden_xml
IS
l_hidden_xml_clob clob;
l_offset NUMBER := 1;
l_length NUMBER;
l_node_list XMLDOM.DOMNodeList;
l_node_length NUMBER;
BEGIN
IF g_dx_summary_error IS NOT NULL THEN
print_out('<!-- ######BEGIN DX SUMMARY######','Y');
print_out(g_dx_summary_error);
print_out('######END DX SUMMARY######-->','Y');
g_dx_summary_error:=null;
return;
END IF;
IF XMLDOM.isNULL(g_hidden_xml) THEN
generate_hidden_xml(p_sig_id => null,
p_sig => null,
p_col_headings => null,
p_col_rows => null);
END IF;
dbms_lob.createtemporary(l_hidden_xml_clob, true);
--print CLOB
XMLDOM.WRITETOCLOB(g_hidden_xml, l_hidden_xml_clob);
print_out('<!-- ######BEGIN DX SUMMARY######','Y');
LOOP
EXIT WHEN (l_offset > dbms_lob.getlength(l_hidden_xml_clob) OR dbms_lob.getlength(l_hidden_xml_clob)=0);
print_out(dbms_lob.substr(l_hidden_xml_clob,2000, l_offset),'N');
l_offset := l_offset + 2000;
END LOOP;
print_out('######END DX SUMMARY######-->','Y'); --should be a newline here
dbms_lob.freeTemporary(l_hidden_xml_clob);
XMLDOM.FREEDOCUMENT(g_hidden_xml);
EXCEPTION
WHEN OTHERS THEN
print_log('Error in print_hidden_xml: '||SQLERRM);
END print_hidden_xml;
----------------------------------------------------------------
-- Once a signature has been run, evaluates and prints it --
----------------------------------------------------------------
FUNCTION process_signature_results(
p_sig_id VARCHAR2, -- signature id
p_sig SIGNATURE_REC, -- Name of signature item
p_col_rows COL_LIST_TBL, -- signature SQL row values
p_col_headings VARCHAR_TBL, -- signature SQL column names
p_parent_id VARCHAR2 DEFAULT NULL,
p_sig_suffix VARCHAR2 DEFAULT NULL,
p_class_string VARCHAR2 DEFAULT NULL
) RETURN VARCHAR2 IS -- returns 'E','W','S','I'
l_sig_fail BOOLEAN := false;
l_row_fail BOOLEAN := false;
l_fail_flag BOOLEAN := false;
l_html VARCHAR2(32767) := null;
l_column VARCHAR2(255) := null;
l_operand VARCHAR2(3);
l_value VARCHAR2(4000);
l_step VARCHAR2(255);
l_i VARCHAR2(255);
l_curr_col VARCHAR2(255) := NULL;
l_curr_val VARCHAR2(4000) := NULL;
l_print_sql_out BOOLEAN := true;
l_inv_param EXCEPTION;
l_rows_fetched NUMBER := p_col_rows(1).count;
l_printing_cols NUMBER := 0;
l_error_type VARCHAR2(1);
l_current_section VARCHAR2(320);
l_current_sig VARCHAR2(320);
l_sig_suffix VARCHAR2(100);
l_class_string VARCHAR2(1024);
BEGIN
-- Validate parameters which have fixed values against errors when
-- defining or loading signatures
l_current_section := replace_chars(g_sec_detail(g_sec_detail.COUNT).name);
g_sig_count := g_sig_count + 1;
l_current_sig := 'S'||to_char(g_sig_count); --build signature class name
-- if p_sig_suffix is not null, then this ia a child signature and we should append the id with the parent row count, so it will be unique
IF (p_sig_suffix IS NOT NULL) THEN
l_current_sig := l_current_sig || to_char(p_sig_suffix);
END IF;
IF (p_sig.fail_condition NOT IN ('RSGT1','RS','NRS')) AND
((instr(p_sig.fail_condition,'[') = 0) OR
(instr(p_sig.fail_condition,'[',1,2) = 0) OR
(instr(p_sig.fail_condition,']') = 0) OR
(instr(p_sig.fail_condition,']',1,2) = 0)) THEN
print_log('Invalid value or format for failure condition: '||
p_sig.fail_condition);
raise l_inv_param;
ELSIF p_sig.print_condition NOT IN ('SUCCESS','FAILURE','ALWAYS','NEVER') THEN
print_log('Invalid value for print_condition: '||p_sig.print_condition);
raise l_inv_param;
ELSIF p_sig.fail_type NOT IN ('E','W','I') THEN
print_log('Invalid value for fail_type: '||p_sig.fail_type);
raise l_inv_param;
ELSIF p_sig.print_sql_output NOT IN ('Y','N','RS') THEN
print_log('Invalid value for print_sql_output: '||p_sig.print_sql_output);
raise l_inv_param;
ELSIF p_sig.limit_rows NOT IN ('Y','N') THEN
print_log('Invalid value for limit_rows: '||p_sig.limit_rows);
raise l_inv_param;
ELSIF p_sig.print_condition in ('ALWAYS','SUCCESS') AND
p_sig.success_msg is null AND p_sig.print_sql_output = 'N' THEN
print_log('Invalid parameter combination.');
print_log('print_condition/success_msg/print_sql_output: '||
p_sig.print_condition||'/'||nvl(p_sig.success_msg,'null')||
'/'||p_sig.print_sql_output);
print_log('When printing on success either success msg or SQL output '||
'printing should be enabled.');
raise l_inv_param;
END IF;
l_print_sql_out := (nvl(p_sig.print_sql_output,'Y') = 'Y' OR
(p_sig.print_sql_output = 'RSGT1' AND l_rows_fetched > 1) OR
(p_sig.print_sql_output = 'RS' AND l_rows_fetched > 0) OR
p_sig.child_sigs.count > 0 AND l_rows_fetched > 0);
-- Determine signature failure status
IF p_sig.fail_condition NOT IN ('RSGT1','RS','NRS') THEN
-- Get the column to evaluate, if any
l_step := '20';
l_column := upper(substr(ltrim(p_sig.fail_condition),2,instr(p_sig.fail_condition,']') - 2));
l_operand := rtrim(ltrim(substr(p_sig.fail_condition, instr(p_sig.fail_condition,']')+1,
(instr(p_sig.fail_condition,'[',1,2)-instr(p_sig.fail_condition,']') - 1))));
l_value := substr(p_sig.fail_condition, instr(p_sig.fail_condition,'[',2)+1,
(instr(p_sig.fail_condition,']',1,2)-instr(p_sig.fail_condition,'[',1,2)-1));
l_step := '30';
FOR i IN 1..least(l_rows_fetched, g_max_output_rows) LOOP
l_step := '40';
FOR j IN 1..p_col_headings.count LOOP
l_step := '40.1.'||to_char(j);
l_row_fail := false;
l_curr_col := upper(p_col_headings(j));
l_curr_val := p_col_rows(j)(i);
IF nvl(l_column,'&&&') = l_curr_col THEN
l_step := '40.2.'||to_char(j);
l_row_fail := evaluate_rowcol(l_operand, l_value, l_curr_val);
IF l_row_fail THEN
l_fail_flag := true;
END IF;
END IF;
END LOOP;
END LOOP;
END IF;
-- Evaluate this signature
l_step := '50';
l_sig_fail := l_fail_flag OR
(p_sig.fail_condition = 'RSGT1' AND l_rows_fetched > 1) OR
(p_sig.fail_condition = 'RS' AND l_rows_fetched > 0) OR
(p_sig.fail_condition = 'NRS' and l_rows_fetched = 0);
l_step := '55';
IF (l_sig_fail OR p_sig.fail_type = 'I') THEN
generate_hidden_xml(p_sig_id => p_sig_id,
p_sig => p_sig,
p_col_headings => p_col_headings,
p_col_rows => p_col_rows);
END IF;
-- If success and no print just return
l_step := '60';
IF ((NOT l_sig_fail) AND p_sig.print_condition IN ('FAILURE','NEVER')) THEN
IF p_sig.fail_type = 'I' THEN
return 'I';
ELSE
return 'S';
END IF;
ELSIF (l_sig_fail AND (p_sig.print_condition IN ('SUCCESS','NEVER'))) THEN
return p_sig.fail_type;
-- if the sig is set as "Print in DX only" then return
ELSIF (p_sig.include_in_xml = 'D') THEN
return p_sig.fail_type;
END IF;
-- if p_parent_id is null, this is not a child sig (it's a first level signature)
IF (p_parent_id IS NULL) THEN
g_level := 1;
g_family_result := '';
-- populate the signature result to the global hash
l_step := 'Populate result in the structure';
g_sec_detail(g_sec_detail.LAST).sigs.extend();
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_id := l_current_sig;
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_name := p_sig_id;
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result := p_sig.fail_type;
IF (NOT l_sig_fail AND (p_sig.fail_type != 'I')) THEN
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result := 'S';
END IF;
ELSE
g_level := g_level + 1;
END IF;
-- Print container and title
l_html := '
<!-- '||l_current_sig||' -->
<div class="data sigcontainer signature '||l_current_section||' '||l_current_sig||' '|| p_class_string || ' ' || g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||' section print analysis" level="'||to_char(g_level)||'" id="'||l_current_sig||'" style="display: none;">
<div class="divItemTitle">
<input type="checkbox" rowid="'||l_current_sig||'" class="exportcheck data print">';
l_html := l_html || '
<a class="detail" toggle-data="restable_'||l_current_sig||'">
<div class="arrowright data section fullsection print analysis">▶</div><div class="arrowdown data" style="display: none">▼</div>
<div class="sigdescription" style="display:inline;"><table style="display:inline;"><tr class="'||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||' sigtitle"><td class="divItemTitlet">'||prepare_text(p_sig.title)||'</td></tr></table></div>
</a>';
-- CG Review this condition
IF p_sig.extra_info.count > 0 OR p_sig.sig_sql is not null THEN
l_html := l_html || '
<a class="detailsmall" toggle-info="tbitm_'||l_current_sig||'"><span class="siginfo_ico" title="Show signature information" alt="Show Info"></span></a>';
END IF;
l_html := l_html || '
<a class="detailsmall" href="javascript:;" onclick=''export2PaddedText("'||l_current_sig||'");return false;''><span class="export_txt_ico" title="Export to .txt" alt="Export to .txt"></span></a>
<a class="detailsmall" href="javascript:;" onclick=''export2CSV("'||l_current_sig||'")''><span class="export_ico" title="Export to .csv" alt="Export to .csv"></span></a>';
-- add sort icon for non-parents sigs and only when more than 1 record is retrieved (it doesn't make any sense to sort a single record)
IF ((p_sig.child_sigs.count = 0) AND (l_rows_fetched > 1) AND (l_print_sql_out)) THEN
l_html := l_html || '
<a class="detailsmall"><span class="sort_ico" table-name='||l_current_sig||' title="Sort table" alt="Sort table"></span></a>';
END IF;
l_html := l_html || '
</div>';
-- Print collapsable/expandable extra info table if there are contents
l_step := '80';
IF p_sig.extra_info.count > 0 OR p_sig.sig_sql is not null THEN
g_item_id := g_item_id + 1;
l_step := '90';
l_html := l_html || '
<table class="table1 data" id="tbitm_' || l_current_sig || '" style="display:none">
<thead>
<tr><th bgcolor="#f2f4f7" class="sigdetails">Item Name</th><th bgcolor="#f2f4f7" class="sigdetails">Item Value</th></tr>
</thead>
<tbody>';
-- Loop and print values
l_step := '110';
l_i := p_sig.extra_info.FIRST;
WHILE (l_i IS NOT NULL) LOOP
l_step := '110.1.'||l_i;
-- don't print the SHOW_SQL parameter
IF (l_i != 'SHOW_SQL') THEN
l_html := l_html || ' <tr><td>' || l_i || '</td><td>'||
p_sig.extra_info(l_i) || '</td></tr>';
END IF;
l_step := '110.2.'||l_i;
l_i := p_sig.extra_info.next(l_i);
END LOOP;
-- print SQL only if SHOW_SQL != 'N' and the SQL string is not null
IF ((p_sig.sig_sql is not null) AND ((NOT p_sig.extra_info.EXISTS('SHOW_SQL')) OR (p_sig.extra_info.EXISTS('SHOW_SQL')) AND (nvl(p_sig.extra_info('SHOW_SQL'), 'Y') != 'N'))) THEN
l_step := '120';
l_html := l_html || '
<tr><td>SQL</td><td><pre>'|| prepare_text(escape_html_chars(p_sig.sig_sql)) ||
'</pre></td></tr>';
END IF;
-- number of records retrieved and elapsed time
l_html := l_html ||'<tr><td>Number of rows:</td><td>';
IF p_sig.limit_rows = 'N' OR l_rows_fetched < g_max_output_rows THEN
l_html := l_html || l_rows_fetched || ' rows selected';
ELSE
l_html := l_html ||'Displaying first '||to_char(g_max_output_rows) || ' out of ' || l_rows_fetched || ' rows retrieved.';
END IF;
l_html := l_html ||'</td></tr><tr><td>';
l_html := l_html ||'Elapsed time:</td><td>' || format_elapsed(g_query_elapsed) || '</td></tr>';
l_html := l_html || '
</tbody>
</table>';
END IF;
l_step := '140';
-- Print the header SQL info table
print_out(expand_links(l_html));
l_html := null;
IF l_print_sql_out THEN
IF p_sig.child_sigs.count = 0 THEN -- Signature has no children
-- Print the actual results table
-- Table header
l_step := '150';
l_html := '
<!-- table that includes the SQL results (data) -->
<div class="divtable">';
l_html := l_html || '
<table class="table1 data tabledata" id="restable_'||l_current_sig||'" style="display:none">
<thead>';
-- Column headings
l_html := l_html || '
<tr class="'||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||'">';
print_out(l_html);
l_html := '';
l_step := '160';
FOR i IN 1..p_col_headings.count LOOP
IF upper(nvl(p_col_headings(i),'XXX')) not like '##$$FK_$$##' THEN
-- Encode blanks as HTML space if this analyzer is set so by g_preserve_trailing_blanks
-- this ensures trailing blanks added for padding are honored by browsers
-- affects only printing, DX summary handled separately
IF g_preserve_trailing_blanks THEN
l_html := l_html ||'
<th bgcolor="#f2f4f7" class="sigdetails">'||RPAD(RTRIM(p_col_headings(i),' '),
-- pad length is the number of spaces existing times the length of => 6
(length(p_col_headings(i)) - length(RTRIM(p_col_headings(i),' '))) * 6
+ length(RTRIM(p_col_headings(i),' ')),' ') ||'</th>';
ELSE
l_html := l_html || '
<th bgcolor="#f2f4f7" class="sigdetails">'||nvl(p_col_headings(i),' ')||'</th>';
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END IF;
END LOOP;
l_html := l_html || '
</tr>
</thead>
<tbody>';
-- Print headers
print_out(expand_links(l_html));
-- Row values
l_step := '170';
FOR i IN 1..l_rows_fetched LOOP
l_html := ' <tr class="tdata '||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||'">';
l_step := '170.1.'||to_char(i);
FOR j IN 1..p_col_headings.count LOOP
-- Evaluate if necessary
l_step := '170.2.'||to_char(j);
l_row_fail := false;
l_step := '170.3.'||to_char(j);
l_curr_col := upper(p_col_headings(j));
l_step := '170.4.'||to_char(j);
l_curr_val := p_col_rows(j)(i);
l_step := '170.5.'||to_char(j);
IF nvl(l_column,'&&&') = l_curr_col THEN
l_step := '170.6.'||
substr('['||l_operand||']['||l_value||']['||l_curr_val||']',1,96);
l_row_fail := evaluate_rowcol(l_operand, l_value, l_curr_val);
END IF;
-- Encode blanks as HTML space if this analyzer is set so by g_preserve_trailing_blanks
-- this ensures trailing blanks added for padding are honored by browsers
-- affects only printing, DX summary handled separately
IF g_preserve_trailing_blanks THEN
l_curr_Val := RPAD(RTRIM(l_curr_Val,' '),
-- pad length is the number of spaces existing times the length of => 6
(length(l_curr_Val) - length(RTRIM(l_curr_Val,' '))) * 6 + length(RTRIM(l_curr_Val,' ')),
' ');
ELSE
l_curr_Val := RTRIM(l_curr_Val, ' ');
END IF;
l_step := '170.7.'||to_char(j);
IF upper(nvl(p_col_headings(j),'XXX')) not like '##$$FK_$$##' THEN
DECLARE
l_cell_text VARCHAR2(1024) := '';
BEGIN
IF (g_dest_to_source.EXISTS(p_sig_id)) AND (g_dest_to_source(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_dest_to_source(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a class="anchor" id="'|| g_dest_to_source(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
ELSIF (g_source_to_dest.EXISTS(p_sig_id)) AND (g_source_to_dest(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_source_to_dest(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a href="" siglink="'|| g_source_to_dest(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
l_cell_text := l_cell_text || '<span class="brokenlink" style="display:none;" title="This record does no have a parent"></span>';
ELSE
l_cell_text := l_curr_val;
END IF;
IF l_row_fail THEN
l_html := l_html || '
<td class="hlt sigdetails">'|| l_cell_text || '</td>';
ELSE
l_html := l_html || '
<td class="sigdetails">'|| l_cell_text || '</td>';
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error when populating table data for signature: ' || p_sig_id);
END;
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END LOOP;
l_html := l_html || '
</tr>';
print_out(expand_links(l_html));
END LOOP;
-- End of results and footer
l_step := '180';
l_html := '
</tbody>
</table>
</div> <!-- end table data -->';
l_step := '190';
print_out(l_html);
--
ELSE -- there are children signatures
-- Print master rows and call appropriate processes for the children
-- Table header
l_html := '
<!-- table that includes the SQL results (data) -->
<div class="divtable">';
l_html := l_html || '
<table class="table1 data tabledata" id="restable_'||l_current_sig||'" style="display:none">';
-- Keep the id of the parent signature to use as anchor in the table of contents
-- g_parent_sig_id := l_current_sig;
-- Row values
l_step := '200';
FOR i IN 1..l_rows_fetched LOOP
l_step := '200.1'||to_char(i);
-- Column headings printed for each row
l_html := l_html || '
<tr class="'||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result ||'">';
FOR j IN 1..p_col_headings.count LOOP
l_step := '200.2'||to_char(j);
IF upper(nvl(p_col_headings(j),'XXX')) not like '##$$FK_$$##' THEN
l_html := l_html || '
<th bgcolor="#f2f4f7" class="sigdetails '||l_current_sig||'">'||nvl(p_col_headings(j),' ')||'</th>';
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END LOOP;
l_step := '200.3';
l_html := l_html || '
</tr>';
-- Print headers
print_out(expand_links(l_html));
-- Print a row
l_html := '
<tr class="tdata '||l_current_section||' '||l_current_sig||' '||g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result||'">';
l_printing_cols := 0;
FOR j IN 1..p_col_headings.count LOOP
l_step := '200.4'||to_char(j);
l_curr_col := upper(p_col_headings(j));
l_curr_val := p_col_rows(j)(i);
-- If the col is a FK set the global replacement vals
IF l_curr_col like '##$$FK_$$##' THEN
l_step := '200.5';
g_sql_tokens(l_curr_col) := l_curr_val;
ELSE -- printable column
l_printing_cols := l_printing_cols + 1;
-- Evaluate if necessary
l_row_fail := false;
IF nvl(l_column,'&&&') = l_curr_col THEN
l_step := '200.6'||
substr('['||l_operand||']['||l_value||']['||l_curr_val||']',1,96);
l_row_fail := evaluate_rowcol(l_operand, l_value, l_curr_val);
END IF;
-- Encode blanks as HTML space if this analyzer is set so by g_preserve_trailing_blanks
-- this ensures trailing blanks added for padding are honored by browsers
-- affects only printing, DX summary handled separately
IF g_preserve_trailing_blanks THEN
l_curr_Val := RPAD(RTRIM(l_curr_Val,' '),
-- pad length is the number of spaces existing times the length of => 6
(length(l_curr_Val) - length(RTRIM(l_curr_Val,' '))) * 6 + length(RTRIM(l_curr_Val,' ')),
' ');
ELSE
l_curr_Val := RTRIM(l_curr_Val, ' ');
END IF;
DECLARE
l_cell_text VARCHAR2(1024) := '';
BEGIN
IF (g_dest_to_source.EXISTS(p_sig_id)) AND (g_dest_to_source(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_dest_to_source(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a class="anchor" id="'|| g_dest_to_source(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
ELSIF (g_source_to_dest.EXISTS(p_sig_id)) AND (g_source_to_dest(p_sig_id).cols.EXISTS(l_curr_col)) AND (g_source_to_dest(p_sig_id).cols(l_curr_col) IS NOT NULL) THEN
l_cell_text := '<a href="" siglink="'|| g_source_to_dest(p_sig_id).cols(l_curr_col)||'_'||to_char(l_curr_val)|| '">' || l_curr_val || '</a>';
l_cell_text := l_cell_text || '<span class="brokenlink" style="display:none;" title="This record does no have a parent"></span>';
ELSE
l_cell_text := l_curr_val;
END IF;
IF l_row_fail THEN
l_html := l_html || '
<td class="hlt sigdetails">'|| l_cell_text || '</td>';
ELSE
l_html := l_html || '
<td class="sigdetails">'|| l_cell_text || '</td>';
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error when populating table data for signature: ' || p_sig_id);
END;
END IF;
-- if the html buffer is already larger than the limit, spool the content and reset
IF (LENGTH(l_html) > 32000) THEN
print_out(expand_links(l_html));
l_html := '';
END IF;
END LOOP;
l_html := l_html || '
</tr>';
print_out(expand_links(l_html));
l_html := null;
FOR k IN p_sig.child_sigs.first..p_sig.child_sigs.last LOOP
print_out('
<tr><td colspan="'||to_char(l_printing_cols)||'"><blockquote>');
DECLARE
l_col_rows COL_LIST_TBL := col_list_tbl();
l_col_hea VARCHAR_TBL := varchar_tbl();
l_child_sig SIGNATURE_REC;
l_result VARCHAR2(1);
BEGIN
l_child_sig := g_signatures(p_sig.child_sigs(k));
print_log('Processing child signature: '||p_sig.child_sigs(k));
run_sig_sql(l_child_sig.sig_sql, l_col_rows, l_col_hea, l_child_sig.limit_rows);
l_class_string := p_class_string || ' ' || l_current_sig;
l_result := process_signature_results(p_sig.child_sigs(k), l_child_sig, l_col_rows, l_col_hea, l_current_sig, p_sig_suffix || '_' || to_char(i), l_class_string);
set_item_result(l_result);
-- show parent signature failure based on result from child signature(s)
IF l_result in ('W','E') THEN
l_fail_flag := true;
IF l_result = 'E' THEN
l_error_type := 'E';
ELSIF (l_result = 'W') AND ((l_error_type is NULL) OR (l_error_type != 'E')) THEN
l_error_type := 'W';
END IF;
g_family_result := l_error_type;
END IF;
EXCEPTION WHEN OTHERS THEN
print_log('Error processing child signature: '||p_sig.child_sigs(i));
print_log('Error: '||sqlerrm);
--CG raise;
print_out('
</blockquote></td></tr>');
goto end_loop;
END;
print_out('
</blockquote></td></tr>');
<<end_loop>>
NULL;
END LOOP;
END LOOP;
--l_sig_fail := (l_sig_fail OR l_fail_flag);
-- End of results and footer
l_step := '210';
l_html := l_html || '
</tbody>
</table>
</div> <!-- end table data -->';
print_out(l_html);
END IF; -- master or child
END IF; -- print output is true
-------------------------------------
-- Print actions for each signature
-------------------------------------
IF l_sig_fail THEN
l_step := '230';
IF p_sig.fail_type = 'E' THEN
l_html := '
<div class="divuar results data print section fullsection">
<span class="divuar1">Error: </span>'||prepare_text(p_sig.problem_descr);
ELSIF p_sig.fail_type = 'W' THEN
l_html := '
<div class="divwarn results data print section fullsection">
<span class="divwarn1">Warning: </span>'||prepare_text(p_sig.problem_descr);
ELSE
l_html := '
<div class="divok results data print section fullsection">
<span class="divok1">Information: </span>'||prepare_text(p_sig.problem_descr);
END IF;
-----------------------------------------------------
-- Print solution part of the action - only if passed
-----------------------------------------------------
l_step := '240';
IF p_sig.solution is not null THEN
l_html := l_html || '
<br><br><span class="solution">Findings and Recommendations:</span><br>
' || prepare_text(p_sig.solution);
END IF;
-- Close div here cause success div is conditional
l_html := l_html || '
</div> <!-- end results div -->';
ELSE
l_step := '250';
IF p_sig.success_msg is not null THEN
IF p_sig.fail_type = 'I' THEN
l_html := '
<div class="divok results data print section fullsection"><div class="divok1">Information:</div>'||
prepare_text(nvl(p_sig.success_msg, 'No instances of this problem found')) ||
'</div> <!-- end results div -->';
ELSE
l_html := '
<div class="divok results data print section fullsection"><div class="divok1"><span class="check_ico"></span> All checks passed.</div>'||
prepare_text(nvl(p_sig.success_msg,
'No instances of this problem found')) ||
'</div> <!-- end results div -->';
END IF;
ELSE
l_html := null;
END IF;
END IF;
-- DIV for parent
IF p_sig.child_sigs.count > 0 and (p_parent_id IS NULL) THEN
IF g_family_result = 'E' THEN
l_html := l_html || '
<div class="divuar results data print section fullsection"><span class="divuar1">Error:</span> There was an error reported in one of the child checks. Please expand the section for more information.</div>';
ELSIF g_family_result = 'W' THEN
l_html := l_html || '
<div class="divwarn results data print section fullsection"><span class="divwarn1">Warning:</span> There was an issue reported in one of the child checks. Please expand the section for more information.</div>';
END IF;
END IF;
-- if p_parent_id is null, this is not a child sig (it's a first level signature)
IF (p_parent_id IS NULL) THEN
IF (g_family_result = 'E' or g_family_result = 'W') THEN
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result := g_family_result;
END IF;
-- increment the global counter and the section counter for the fail_type
DECLARE
l_result VARCHAR2(1);
BEGIN
l_result := g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result;
g_results(l_result) := g_results(l_result) + 1;
g_sec_detail(g_sec_detail.LAST).results(l_result) := g_sec_detail(g_sec_detail.LAST).results(l_result) + 1;
END;
END IF;
-- print the result div of the sig container
l_html := l_html || '
<div style="display:none" class="sigrescode '||l_current_section||' '||l_current_sig||' '|| p_class_string || ' ' || g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_result||'" level="'||to_char(g_level)||'"></div>
';
l_html := l_html || '
</div> <!-- end of sig container -->
<!-- '||l_current_sig||'-->';
-- Increment the print count for the section
l_step := '260';
g_sections(g_sections.last).print_count :=
g_sections(g_sections.last).print_count + 1;
l_step := '270';
print_out(expand_links(l_html));
g_level := g_level - 1;
IF l_sig_fail THEN
l_step := '280';
return p_sig.fail_type;
ELSE
l_step := '290';
IF p_sig.fail_type = 'I' THEN
return 'I';
ELSE
return 'S';
END IF;
END IF;
EXCEPTION
WHEN L_INV_PARAM THEN
print_log('Invalid parameter error in process_signature_results at step '
||l_step);
raise;
WHEN OTHERS THEN
print_log('Error in process_signature_results at step '||l_step);
g_errbuf := l_step;
raise;
END process_signature_results;
----------------------------------------------------------------
-- Start the main section --
-- (where the sections and signatures reside) --
----------------------------------------------------------------
PROCEDURE start_main_section is
BEGIN
print_out('
<!-- start body --->
<div class="body background">
<div style="min-height:75px;">
</div>
<!-- main data screen (showing section and signatures) -->
<div class="maindata print analysis section fullsection">
<div style="min-height:10px;">
</div>
<div class="sigcontainer background">
<div class="containertitle"></div>
<table class="background" style="width:100%;border-spacing:0;border-collapse:collapse;">
<tr>
<td class="leftcell data section background"> <!-- Start menu on the left hand side -->
<div class="sectionmenu background" id="sectionmenu">
</div>
</td>
<!-- Cell that includes the signature details -->
<td class="rightcell analysis print section fullsection">
<div class="sigcontainer" style="padding:20px;margin:0;">
<div class="searchbox data analysis print section fullsection">
<div style="float:left"><b>Search within tables:</b></div><br>
<div style="float:left"><input type="text" class="search" placeholder="Enter search string and press <enter>" id="search" size="96" maxlength="96"></div><br>
</div><br><br>
<div class="expcoll data analysis print section fullsection">
<input type="checkbox" class="data print" id="exportAll">
<a class="detailsmall print data exportAllImg" href="javascript:;" onclick=''export2CSV("ALL")''><span class="export_ico" title="Export to Excel (.csv)" alt="Export to .csv"></span></a>
<a class="detailsmall export2Txt data fullsection" id="export2TextLink" href="javascript:;" onclick=''export2PaddedText("")''><span class="export_txt_ico" title="Export to .txt" alt="Export to .txt"></span></a>
<a href="#" class="detailsmall fullsection data print analysis" id="expandall" mode="analysis"><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAIAAAC0D9CtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABJSURBVDhPY/iPCb4+PHcYAs49/AoVQwbY9Ly5DtVy+PD1N1AxZDCqB6QHEbLEAFDoMyCbSgwA2kyePZhgaIc1JqCXHvz55/9/AOHlG7kyGtrjAAAAAElFTkSuQmCC" alt="expand_all" title="Expand All"></a>
<a href="#" class="detailsmall collapseall data print analysis fullsection"><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAIAAAC0D9CtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA5SURBVDhPY/hPOhjVQ6Gerw/PHcYOrr+BKoEBuJ4316FKMABuPTjtOffwK1QJDNA9DEgAw0vP//8AQDNN42uQJrwAAAAASUVORK5CYII=" alt="collapse_all" title="Collapse All"></a>
<div style="float:left;" id ="showhidesection" mode="show">
<a href="#" class="detailsmall data section sectionview" mode="show" id="showAll" open-sig-class=""><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAARCAYAAAC4qX7BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAACgSURBVEhL7dQhD4MwFATgo44iQaM3CXo/Hw0SLOhNtsiug5cABZK+hSxZ0s+UZy5njshYOKIHNPUANR0J8rJALqfDHyND0Ls3agr4UNAjfXIwMs6L/Fgo4gpFXJFRvVkmxkWTxHqmXHOG2E6MiyZ5QYZALG2nbyWQsX0uyDj/s746VO2TDiC7P3BL6fDFyAircYUirj8ospkkzZTLOwN4A9NoQux1kQrNAAAAAElFTkSuQmCC" alt="show_all" title="Show entire section"></a>
<a href="#" class= "detailsmall data fullsection sectionview" mode="hide" id="hideAll" open-sig-class=""><img src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAARCAYAAAAsT9czAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAABhSURBVEhLY/wPBAx0AkxQmi5g1DKqgOFrGVLS/8bw6Pw5hkdfITysQESTwUZDGMohVT2Kz74zfMOnEQOQqh7FMk4GLm4oEwfg5uKEskCAVPUowUh7MJr0qQJGLaMCYGAAAO+CHlBVVEZnAAAAAElFTkSuQmCC" alt="hide_all" title="Hide All"></a>
</div>
</div>
<br><br>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in start_main_section: '||sqlerrm);
raise;
END start_main_section;
PROCEDURE end_main_section IS
l_html VARCHAR2(32767) := '';
BEGIN
print_out('
</div> <!-- end of inner container -->
</td>
</tr>
</table>
</div> <!-- end of outer container -->
<div style="min-height: 35;"></div>
</div>');
--CG Populate the sectionmenu details here, because we need the signature results
print_out('<script>');
FOR i IN 1 .. g_sec_detail.COUNT LOOP
FOR j IN 1 .. g_sec_detail(i).sigs.COUNT LOOP
-- in case of customizations, the global signatures table might not be populated correctly, so we might encounter a "no data found" exception.
BEGIN
l_html := ' <div class="sectionbutton data '||replace_chars(g_sec_detail(i).name)||' '||nvl(g_sec_detail(i).sigs(j).sig_id, 'null')||' '||nvl(g_sec_detail(i).sigs(j).sig_result, 'I')||'" open-sig="'||g_sec_detail(i).sigs(j).sig_id||'"> <span class="'||g_result(nvl(g_sec_detail(i).sigs(j).sig_result, 'I'))||'_small"></span><span style="padding:5px;">'||prepare_text(g_signatures(g_sec_detail(i).sigs(j).sig_name).title)||'</span> </div>';
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_html := ' <div class="sectionbutton data '||replace_chars(g_sec_detail(i).name)||' '||nvl(g_sec_detail(i).sigs(j).sig_id, 'null')||' '||nvl(g_sec_detail(i).sigs(j).sig_result, 'I')||'" open-sig="'||g_sec_detail(i).sigs(j).sig_id||'"> <span class="'||g_result(nvl(g_sec_detail(i).sigs(j).sig_result, 'I'))||'_small"></span><span style="padding:5px;">' || g_sec_detail(i).sigs(j).sig_name || '</span> </div>';
WHEN OTHERS THEN
raise;
END;
print_out('
$("#sectionmenu").append('''||l_html||''');');
END LOOP;
END LOOP;
print_out('</script>');
EXCEPTION WHEN OTHERS THEN
print_log('Error in end_main_section: '||sqlerrm);
raise;
END end_main_section;
----------------------------------------------------------------
-- Creates a report section --
-- For now it just prints html, in future it could be --
-- smarter by having the definition of the section logic, --
-- signatures etc.... --
----------------------------------------------------------------
PROCEDURE start_section(p_sect_title VARCHAR2, p_sect_name VARCHAR2 DEFAULT '') IS
lsect section_rec;
l_sig_array signatures_tbl := signatures_tbl();
BEGIN
g_sections(g_sections.count + 1) := lsect;
-- add element in the sections table
g_sec_detail.extend();
IF (p_sect_name != '') THEN
g_sec_detail(g_sec_detail.LAST).name := p_sect_name;
ELSE
g_sec_detail(g_sec_detail.LAST).name := p_sect_title;
END IF;
g_sec_detail(g_sec_detail.LAST).title := p_sect_title;
g_sec_detail(g_sec_detail.LAST).sigs := l_sig_array;
-- initialize the results hash for section
g_sec_detail(g_sec_detail.LAST).results('E') := 0;
g_sec_detail(g_sec_detail.LAST).results('W') := 0;
g_sec_detail(g_sec_detail.LAST).results('S') := 0;
g_sec_detail(g_sec_detail.LAST).results('I') := 0;
EXCEPTION WHEN OTHERS THEN
print_log('Error in start_section: '||sqlerrm);
raise;
END start_section;
PROCEDURE start_sig(p_sig_name varchar2) is
BEGIN
g_sec_detail(g_sec_detail.LAST).sigs.extend();
g_sec_detail(g_sec_detail.LAST).sigs(g_sec_detail(g_sec_detail.LAST).sigs.LAST).sig_name := p_sig_name;
EXCEPTION WHEN OTHERS THEN
print_log('Error in start_sig: '||sqlerrm);
raise;
END start_sig;
----------------------------------------------------------------
-- Finalizes a report section --
-- Finalizes the html --
----------------------------------------------------------------
-- CG to be removed from the AB
PROCEDURE end_section (
p_success_msg IN VARCHAR2 DEFAULT 'All checks passed.') IS
l_loop_count NUMBER;
BEGIN
print_log ('End Section');
END end_section;
----------------------------------------------------------------
-- Creates a report sub section --
-- workaround for now in future normal sections should --
-- support nesting --
----------------------------------------------------------------
PROCEDURE print_rep_subsection(p_sect_title varchar2) is
BEGIN
print_out('<div class="divSubSection"><div class="divSubSectionTitle">' ||
p_sect_title || '</div><br>');
END print_rep_subsection;
PROCEDURE print_rep_subsection_end is
BEGIN
print_out('</div><br>');
END print_rep_subsection_end;
-----------------------------------------------
-- Diagnostic specific functions and procedures
-----------------------------------------------
----------------------------------------------------------------
-- Creates a Temperature Gauge Graph --
-- Used to show how healthy the current data is --
----------------------------------------------------------------
PROCEDURE show_data_gauge IS
begin
print_out('<div class="data sigcontainer signature CP_ENV ' || g_sec_detail(g_sec_detail.COUNT).name || ' I section print analysis" level="1" id="CP_ENV" style="display: none;">');
print_out('<table border="1" name="NoteBox" cellpadding="10" bordercolor="#C1A90D" bgcolor="#FEFCEE" cellspacing="0">');
print_out('<tbody><tr><td>');
if (g_reqid_cnt > g_max_vol) THEN -- This is the critical setting which customers can adjust here
print_out('<b>Concurrent Processing (1)Runtime Data Gauge</b><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=300x150&cht=gm&chd=t:10&chl=Excessive" width="300" height="150" alt="" />');
print_out('</td>');
else if (g_reqid_cnt > g_min_vol) THEN -- This is the bad setting which customers can adjust here.
print_out('<b>Concurrent Processing (2)Runtime Data Gauge</b><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=300x150&cht=gm&chd=t:50&chl=Poor" width="300" height="150" alt="" />');
print_out('</td>');
else
print_out('<b>Concurrent Processing (3)Runtime Data Gauge</b><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=300x150&cht=gm&chd=t:90&chl=Healthy" width="300" height="150" alt="" />');
print_out('</td>');
end if;
end if;
print_out('<td>');
print_out(' This Runtime Data Gauge is adjustable for your site by entering your own settings for the g_reqid_cnt variable in cp_analyzer.sql:<BR>');
print_out(' 1. Change the following for the immediate review setting (critical): ''(g_reqid_cnt > 5000)''.<br>');
print_out(' 2. Change the following for the review required setting (bad): ''(g_reqid_cnt > 3500)''.');
print_out('</td></tr></tbody> ');
print_out('</table>');
print_out('</div>');
--BILL ADD -> replace signature id and name as needed
g_sec_detail(g_sec_detail.COUNT).sigs.extend();
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_id := 'CP_ENV';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_name := 'COncurrent Processing Charts';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_result := 'I';
--END BILL ADD
END show_data_gauge;
----------------------------------------------------------------
-- Creates a Bar Chart for WF Runtime Data & --
-- a Gauge Graphic to indicate the amount of OLD data found --
----------------------------------------------------------------
PROCEDURE show_gauge_chart IS
clsd_index number;
open_index number;
year_index number;
emesg VARCHAR2(250);
begin
print_log(' Processing Procedure: show_gauge_chart');
select min(to_char(actual_start_date, 'YYYY')) into beginmin
from fnd_concurrent_requests;
select max(to_char(sysdate, 'YYYY')) into beginmax
from wf_items;
clsd_index := beginmin;
Select max(nvl(Count(request_id),0)) into maxitems
From fnd_concurrent_requests
where PHASE_CODE = 'C'
Group By To_Char(actual_start_date, 'YYYY')
order by To_Char(actual_start_date, 'YYYY');
--BILL ADD -> For a different signature id, change CP_REQS with the sig id (replace spaces by _ and : by -)
print_out('<div class="data sigcontainer signature CP_REQS ' || g_sec_detail(g_sec_detail.COUNT).name || ' I section print analysis" level="1" id="CP_REQS" style="display: none;">');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.common.min.css" />');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.default.min.css" />');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.dataviz.min.css" />');
print_out(' <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.dataviz.default.min.css" />');
print_out('');
print_out(' <script src="http://cdn.kendostatic.com/2014.3.1316/js/jquery.min.js"></script>');
print_out(' <script src="http://cdn.kendostatic.com/2014.3.1316/js/kendo.all.min.js"></script>');
print_out(' <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.9.1/jquery.tablesorter.min.js"></script>');
print_out('<div id="container">');
print_out('<table border="0" cellpadding="0" cellspacing="0" width="100%">');
print_out('<tr>');
print_out('<td width="50%" align="center">');
print_out('<h3>FND_CONCURRENT_REQUESTS Runtime Data by Year</h3>');
print_out('</td>');
print_out('<td width="50%">');
print_out('<h3>Concurrent Processing Runtime Data Volume Gauge</h3>');
print_out('</td>');
print_out('</tr>');
print_out('<tr>');
print_out('<td width="50%">');
print_out('<div id="chart" style="width: 600px; height: 250px; float: left; vertical-align: top; margin: 5px 5px 5px 15px; ">');
print_out('<script>');
print_out('function createChart() {$("#chart").kendoChart({');
print_out('legend: {position: "top",visible: true},');
print_out('seriesDefaults: {type: "column",stack: true},');
print_out('series: [{name: "Closed",');
print_out('data: [');
WHILE clsd_index <= beginmax
LOOP
BEGIN
/* Loop thru the CLOSED items by year */
select nvl(count(request_id),0) into cls_cnt
from fnd_concurrent_requests
where to_char(actual_start_date,'YYYY')=clsd_index
--and r.phase_code = 'C'
and actual_completion_date is not null;
print_out(cls_cnt,'N');
if (clsd_index = beginmax) then
print_out('],','N');
else
print_out(',','N');
end if;
clsd_index:=clsd_index+ 1;
EXCEPTION
WHEN OTHERS
THEN
clsd_index:=clsd_index+ 1;
END;
END LOOP;
print_out('color: "#4D89F9"}, {name: "Open",data: [');
open_index := beginmin;
WHILE open_index <= beginmax
LOOP
BEGIN
/* Loop thru the OPEN items by year */
select nvl(count(request_id),0) into cls_cnt
from fnd_concurrent_requests
where to_char(actual_start_date,'YYYY')=open_index
and actual_completion_date is null;
print_out(cls_cnt,'N');
if (open_index=beginmax) then
exit;
else
print_out(',','N');
end if;
open_index:=open_index+ 1;
EXCEPTION
WHEN OTHERS
THEN
open_index:=open_index+ 1;
END;
END LOOP;
print_out('],color: "#C6D9FD"}],valueAxis: {max: '||maxitems||',');
print_out('labels: {format: "{0}"},');
print_out('line: {visible: false},');
print_out('minorGridLines: {visible: true}},');
print_out('categoryAxis: {categories: [');
year_index := beginmin;
WHILE year_index <= beginmax
LOOP
BEGIN
/* Build the labels by year */
print_out(year_index,'N');
if (year_index=beginmax) then
exit;
else
print_out(',','N');
end if;
year_index:=year_index+ 1;
EXCEPTION
WHEN OTHERS
THEN
year_index:=year_index+ 1;
END;
END LOOP;
print_out('],majorGridLines: {visible: false}},');
print_out('tooltip: {visible: true,template: "#= series.name #: #= value #"}});}');
print_out('$(document).ready(createChart);$(document).bind("kendo:skinChange", createChart);');
print_out('</script>');
print_out('<script>');
print_out('//------------------------------------------------------------------');
print_out('// This function will expand and contract selected text for individual sections.');
print_out('//------------------------------------------------------------------');
print_out('function showDetails(divID) {');
print_out(' if (document.getElementById("detailImg"+divID).value == ''+'') {');
print_out(' document.getElementById("detailImg"+divID).value = ''-'';');
print_out(' document.getElementById("detailTxt"+divID).style.display = ''block'';');
print_out(' } else {');
print_out(' document.getElementById("detailImg"+divID).value = ''+'';');
print_out(' document.getElementById("detailTxt"+divID).style.display = ''none'';');
print_out(' }');
print_out('}');
print_out('//------------------------------------------------------------------');
print_out('// This function will expand text for all expandable sections in the document by clicking the "Show All" button.');
print_out('//------------------------------------------------------------------');
print_out('function showAllDetails() {');
print_out(' for ( var i=0; i <= max_divID; i++ ) {');
print_out(' if (document.getElementById("detailImg"+i) != null){');
print_out(' if (document.getElementById("detailImg"+i).value == ''+'') {');
print_out(' document.getElementById("detailImg"+i).value = ''-'';');
print_out(' document.getElementById("detailTxt"+i).style.display = ''block'';');
print_out(' }');
print_out(' }');
print_out(' }');
print_out('}');
print_out('//------------------------------------------------------------------');
print_out('// This function will collapse text for all collapsable sections in the document by clicking the "Hide All" button.');
print_out('//------------------------------------------------------------------');
print_out('function hideAllDetails() {');
print_out(' for ( var i=0; i <= max_divID; i++ ) {');
print_out(' if (document.getElementById("detailImg"+i) != null){');
print_out(' if(document.getElementById("detailImg"+i).value == ''-'') {');
print_out(' document.getElementById("detailImg"+i).value = ''+'';');
print_out(' document.getElementById("detailTxt"+i).style.display = ''none'';');
print_out(' }');
print_out(' }');
print_out(' }');
print_out('}');
print_out('</script>');
print_out('</div>');
print_out('</td>');
print_out('<td width="50%">');
print_out('<div id="gauge-graph" display:table-cell; vertical-align:top>');
if (g_reqid_cnt > g_max_vol) THEN -- This is the critical setting which customers can adjust here
print_out('<br><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=400x250&cht=gm&chd=t:10&chl=Excessive" width="400" height="250">');
print_out('</td>');
else if (g_reqid_cnt > g_min_vol) THEN -- This is the bad setting which customers can adjust here.
print_out('<br><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=400x250&cht=gm&chd=t:50&chl=Poor" width="400" height="250">');
print_out('</td>');
else
print_out('<br><BR>');
print_out('<img src="http://chart.apis.google.com/chart?chxl=0:|critical|bad|good&chxt=y&chs=400x250&cht=gm&chd=t:90&chl=Healthy" width="400" height="250">');
print_out('</td>');
end if;
end if;
print_out('</div></td></tr></table>');
print_out('</div></div>');
--print_out('</div></div><font style="font-size:x-small;">');
-- print_out('<a href="#top"><font color="#0066CC">Back to top</font></a></font><br><br>');
--BILL ADD -> If incorrect replace signature id and name as needed
g_sec_detail(g_sec_detail.COUNT).sigs.extend();
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_id := 'CP_REQS';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_name := 'Concurrent Requests Charts';
g_sec_detail(g_sec_detail.COUNT).sigs(g_sec_detail(g_sec_detail.COUNT).sigs.COUNT).sig_result := 'I';
--END BILL ADD
exception
when others then
emesg := SQLERRM;
print_out(emesg);
END show_gauge_chart;
-------------------------
-- Recommended Patches
-------------------------
FUNCTION check_rec_patches_1 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_1');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,2) = '11' THEN
l_rel := '11i';
l_col_rows(1)(1) := '5472959';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.6.3';
l_col_rows(5)(1) := '[422508.1]';
l_col_rows(1)(2) := '5097966';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'XDO/ORACLE XML PUBLISHER CORE ROLLUP PATCH 5.6.2';
l_col_rows(5)(2) := '[367394.1]';
l_col_rows(1)(3) := '4905678';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.6.1';
l_col_rows(5)(3) := '[357308.1]';
l_col_rows(1)(4) := '4561451';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.6.0';
l_col_rows(5)(4) := '[337999.1]';
l_col_rows(1)(5) := '4236958';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'XDO/ORACLE XML PUBLISHER CORE ROLLUP PATCH 5.0.1';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4206181';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.5.0';
l_col_rows(5)(6) := '[316447.1]';
l_col_rows(1)(7) := '3822219';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 5.0.0';
l_col_rows(5)(7) := '[295036.1]';
l_col_rows(1)(8) := '3554613';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'XDO/ORACLE XML PUBLISHER OA ROLLUP PATCH 4.5.0';
l_col_rows(5)(8) := '[269605.1]';
l_col_rows(1)(9) := '3263588';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := 'Patch 11i.XDO.H';
l_col_rows(5)(9) := '[258332.1]';
END IF;
l_sig.title := 'XDO Suggested Patches for 11i';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'Suggested XDO Patches';
l_sig.solution := 'Suggested XDO Patches';
l_sig.success_msg := 'Suggested XDO Patches';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('XDO_PATCHES') := l_sig;
l_step := '70';
RETURN process_signature_results(
'XDO_PATCHES', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_1');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_1 at step '||l_step);
raise;
END check_rec_patches_1;
FUNCTION check_rec_patches_2 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_2');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,4) = '12.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '20043910';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'November Bundle Patches for TXK Delta 5';
l_col_rows(5)(1) := '[1617461.1]';
END IF;
l_sig.title := 'Suggested Patches on top of TXK Delta 5';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'November Bundle Patches for TXK Delta 5';
l_sig.solution := 'November Bundle Patches for TXK Delta 5';
l_sig.success_msg := 'November Bundle Patches for TXK Delta 5';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_R122') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_R122', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_2');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_2 at step '||l_step);
raise;
END check_rec_patches_2;
FUNCTION check_rec_patches_3 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_3');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17919161';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21236633';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(1) := '[2053709.1]';
l_col_rows(1)(2) := '9239090';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.3 (RUP3)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '8919491';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 Release Update Pack (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6077669';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5917344';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5907545';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '4440000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := '<p>There are recommended Concurrent Processing and Technology Stack patches that are not applied on this '||g_rep_info('Instance')||' instance.</p>';
l_sig.solution := '<ul>
<li>Please review list above and schedule to apply any unappplied recommended Concurrent Processing and Techstack patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li>
</ul>';
l_sig.success_msg := '<b>All known recommended EBS Concurrent Processing and Technology Stack patches for release '||g_rep_info('Apps Version')||' have been applied.</b><br><br>
To get the most current list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.<br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_CU2A') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_CU2A', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_3');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_3 at step '||l_step);
raise;
END check_rec_patches_3;
FUNCTION check_rec_patches_4 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_4');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17919161';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21236633';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(1) := '[2053709.1]';
l_col_rows(1)(2) := '8919491';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 Release Update Pack (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6077669';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5917344';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5907545';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '4440000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
l_col_rows(1)(10) := '3240000';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU1)';
l_col_rows(5)(10) := '[298352.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'Please check if any of the recommended E-Business Suite CP and Technology Stack patches were not applied in this '||g_rep_info('Apps Version')||' instance';
l_sig.solution := '<b>To get a current accurate list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.</b><br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>
<ul>Above is a short list of recommended CP and Technology Stack patches as of the date this script was written to show you what may or may not be applied on this '||g_rep_info('Instance')||' instance.
<li>Please review the list above and schedule to apply any unappplied patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li></ul>';
l_sig.success_msg := '<b>All known recommended EBS Concurrent Processing and Technology Stack patches for release '||g_rep_info('Apps Version')||' have been applied.</b><br><br>
To get the most current list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.<br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_RUP4A') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_RUP4A', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_4');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_4 at step '||l_step);
raise;
END check_rec_patches_4;
FUNCTION check_rec_patches_5 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_5');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17919161';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21236633';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(1) := '[2053709.1]';
l_col_rows(1)(2) := '9239090';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.3 (RUP3)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '8919491';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6272680';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6077669';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '5917344';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5907545';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4440000';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(7) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
l_col_rows(1)(10) := '3240000';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU1)';
l_col_rows(5)(10) := '[298352.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := '<p>There are recommended Concurrent Processing patches that are not applied on this '||g_rep_info('Instance')||' instance.</p>';
l_sig.solution := '<ul>
<li>Please review list above and schedule to apply any unappplied recommended Concurrent Processing patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li>
</ul>';
l_sig.success_msg := '<p>All recommended Concurrent Processing patches (if any) have been applied.</p>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES_RUP6') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES_RUP6', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_5');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_5 at step '||l_step);
raise;
END check_rec_patches_5;
FUNCTION check_rec_patches_6 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_6');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.6' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '21900901';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.6 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[2114016.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.5' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '19676458';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.5 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[1983050.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.4' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '25598741';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '1OFF:12.2.4:RECALCULATE PARAMETERS NOT WORKING FOR REQUEST SETS - FLEX PORTION';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '17919161';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(2) := '[1617458.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '17020683';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[1586214.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.2.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '16207672';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(1) := '[1506669.1]';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '25381217';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'UNABLE TO ADD NEW MESSAGE TYPE FORMS PERSONALIZATION ACTIONS ON TOP PF EXISTING';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '25186394';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'FND Recommended Patch Collection (12/2016)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '22644544';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle E-Business Suite Release 12.1.3+ Recommended Patch Collection 5 [RPC5]';
l_col_rows(5)(1) := '[2152266.1]';
l_col_rows(1)(2) := '21236633';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'Oracle E-Business Suite Release 12.1.3+ Recommended Patch Collection 4 [RPC4]';
l_col_rows(5)(2) := '[2053709.1]';
l_col_rows(1)(3) := '9239090';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1.3 (RUP3)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '8919491';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(4) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7651091';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303033';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 Oracle E-Business Suite 12.1.2 (RUP2)';
l_col_rows(5)(2) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7307198';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '7303030';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.1.1 Maintenance Pack';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6430106';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12 Oracle E-Business Suite 12.1';
l_col_rows(5)(3) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12 12.0.6 (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 Release Update Pack (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6077669';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5917344';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5907545';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '4440000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '6241631';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '5903765';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '5473858';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '4676589';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '4334965';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '4125550';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '4017300';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '3480000';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Oracle Applications Release 11.5.10.2 Maintenance Pack';
l_col_rows(5)(8) := '[316365.1]';
l_col_rows(1)(9) := '3460000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11.5.10 Oracle E-Business Suite Consolidated Update (CU2)';
l_col_rows(5)(9) := '[316366.1]';
END IF;
l_sig.title := 'Recommended Concurrent Processing Patches for '||g_rep_info('Apps Version')||' Release';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := '<p>There are recommended Concurrent Processing and Technology Stack patches that are not applied on this '||g_rep_info('Instance')||' instance.</p>';
l_sig.solution := '<ul>
<li>Please review list above and schedule to apply any unappplied recommended Concurrent Processing and Techstack patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li>
</ul>';
l_sig.success_msg := '<b>All known recommended EBS Concurrent Processing and Technology Stack patches for release '||g_rep_info('Apps Version')||' have been applied.</b><br><br>
To get the most current list of recommended EBS CP and Techstack patches that are applied/not applied to your instance, please run Patch Wizard.<br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_CP_PATCHES') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_CP_PATCHES', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_6');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_6 at step '||l_step);
raise;
END check_rec_patches_6;
FUNCTION check_rec_patches_7 RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl(); -- Row values
l_hdr VARCHAR_TBL := varchar_tbl(); -- Column headings
l_app_date DATE; -- Patch applied date
l_extra_info HASH_TBL_4K; -- Extra information
l_step VARCHAR2(10);
l_sig SIGNATURE_REC;
l_rel VARCHAR2(3);
CURSOR get_app_date(p_ptch VARCHAR2, p_rel VARCHAR2) IS
SELECT min(Last_Update_Date) as date_applied
FROM Ad_Bugs Adb
WHERE Adb.Bug_Number like p_ptch
AND ad_patch.is_patch_applied(p_rel, -1, adb.bug_number)!='NOT_APPLIED';
BEGIN
debug('Begin recommended patches signature: check_rec_patches_7');
-- Column headings
l_step := '10';
l_hdr.extend(5);
l_hdr(1) := 'Patch';
l_hdr(2) := 'Applied';
l_hdr(3) := 'Date';
l_hdr(4) := 'Name';
l_hdr(5) := 'Note';
l_col_rows.extend(5);
IF substr(g_rep_info('Apps Version'),1,4) = '12.2' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '24578455';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'REVERT CHANGES MADE TO VALIDATE MANAGED SERVER PORTS OF ALL NODES';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '21841299';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'R12.AD.C.DELTA.8 PATCH';
l_col_rows(5)(2) := '[1617461.1]';
l_col_rows(1)(3) := '21830810';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'R12.TXK.C.DELTA.8';
l_col_rows(5)(3) := '[1617461.1]';
l_col_rows(1)(4) := '20784380';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.TXK.C.delta.7 (Superseded by 21830810)';
l_col_rows(5)(4) := '[1617461.1]';
l_col_rows(1)(5) := '20745242';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'R12.AD.C.delta.7 (Superseded by 21841299)';
l_col_rows(5)(5) := '[1617461.1]';
l_col_rows(1)(6) := '17919161';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.2.4 - ORACLE E-BUSINESS SUITE 12.2.4 RELEASE UPDATE PACK';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '17020683';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.2.3 - ORACLE E-BUSINESS SUITE 12.2.3 RELEASE UPDATE PACK';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '16207672';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'R12.2.2 - ORACLE E-BUSINESS SUITE 12.2.2 RELEASE UPDATE PACK';
l_col_rows(5)(8) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.1.3' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '24516586';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Fix for Bug 24516586';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '22879584';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'Fix for Bug 22879584';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '22200487';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'E-BUSINESS SUITE: CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '20592764';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'CONSOLIDATED AD IO PATCH FOR EBS PLUGIN 12.1.0.4.0';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '20228512';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '1OFF:12.1.3:18356549:EM_MONITOR USER REQUIRES ACCESS TO TABLES';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '19287203';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'TECHPLAT:CHANGES REQUIRED FOR RELINKING FAILURES ON WIN 2012 R2 WITH VS2013';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '18312333';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ADGENJKY.SH GENERATING CORE DUMP AT THE END OF EXECUTION';
l_col_rows(5)(7) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.1' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '22644544';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 5 [RPC5]';
l_col_rows(5)(1) := '[1986065.1]';
l_col_rows(1)(2) := '21236633';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 4 [RPC4] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(2) := '[2053709.1]';
l_col_rows(1)(3) := '20203366';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 3 [RPC3] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(3) := '[1986065.1]';
l_col_rows(1)(4) := '19030202';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 2 [RPC2] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(4) := '[1920628.1]';
l_col_rows(1)(5) := '17774755';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'Oracle 12.1.3+ E-Business Suite Recommended Patch Collection 1 [RPC1] - (Superseded by RPC5 - Patch 22644544)';
l_col_rows(5)(5) := '[1638535.1]';
l_col_rows(1)(6) := '9239090';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ORACLE E-BUSINESS SUITE 12.1.3 RELEASE UPDATE PACK';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '8919491';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.B.DELTA.3';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '7651091';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'R12.ATG_PF.B.DELTA.2';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '7307198';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := 'R12.ATG_PF.B.DELTA.1';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '7303033';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := 'Oracle E-Business Suite 12.1.2 Release Update Pack (RUP2)';
l_col_rows(5)(10) := '';
l_col_rows(1)(11) := '7303030';
l_col_rows(2)(11) := 'No';
l_col_rows(3)(11) := NULL;
l_col_rows(4)(11) := '12.1.1 Maintenance Pack';
l_col_rows(5)(11) := '';
l_col_rows(1)(12) := '6430106';
l_col_rows(2)(12) := 'No';
l_col_rows(3)(12) := NULL;
l_col_rows(4)(12) := 'R12 ORACLE E-BUSINESS SUITE 12.1';
l_col_rows(5)(12) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,6) = '12.0.6' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '22200487';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'E-BUSINESS SUITE: CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '18312333';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'ADGENJKY.SH GENERATING CORE DUMP AT THE END OF EXECUTION';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '16541210';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'ENCOUNTER ORA-12899 WHEN RUNNIJNG PATCH WIZARD';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '16322006';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'TXK CPU fix';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6767273';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'INSTALLING R12.AD.A.DELTA.4 FAILS FOR OFF-CYCLE PRODUCTS';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '5938978';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'ADMRGPCH ERRORS WITH A "CHARACTER-SET CONVERSION" ERROR ON SUN SOLARIS';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5866902';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'ADMERGE.PL IS NOT COPYING THE MSI FILES IN THE MERGED PATCH.';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '5866720';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'CONNECTION ISSUES IN "PATCH APPLICATION ASSISTANT" ON RAC INSTANCE';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '5856453';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := 'QREP120.19:R12 MP(4440000) GETS KILLED WHILE EXECUTING EGOSILDU.SQL';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '5635729';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := 'ADPATCH TO COMPARE FILE VERSIONS FOR TRANSLATION SYNCH. PATCHES';
l_col_rows(5)(10) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,4) = '12.0' THEN
l_rel := 'R12';
l_col_rows(1)(1) := '7237006';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'R12.ATG_PF.A.DELTA.6';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '6728000';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := '12.0.6 RELEASE UPDATE PACK (RUP6)';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '6435000';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := '12.0.4 RELEASE UPDATE PACK (RUP4)';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '6272680';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'R12.ATG_PF.A.DELTA.4';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '6141000';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := '12.0.3 Release Update Pack (RUP3)';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '6077669';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'R12.ATG_PF.A.DELTA.3';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '5917344';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'R12.ATG_PF.A.DELTA.2';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '5907545';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'R12.ATG_PF.A.DELTA.1';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '5484000';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '12.0.2 Release Update Pack (RUP2)';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '5082400';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := '12.0.1 Release Update Pack (RUP1)';
l_col_rows(5)(10) := '';
l_col_rows(1)(11) := '4440000';
l_col_rows(2)(11) := 'No';
l_col_rows(3)(11) := NULL;
l_col_rows(4)(11) := 'Oracle Applications Release 12 Maintenance Pack';
l_col_rows(5)(11) := '';
END IF;
IF substr(g_rep_info('Apps Version'),1,9) = '11.5.10.2' THEN
l_rel := '11i';
l_col_rows(1)(1) := '24755689';
l_col_rows(2)(1) := 'No';
l_col_rows(3)(1) := NULL;
l_col_rows(4)(1) := 'E-BUSINESS SUITE: 11I CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(1) := '';
l_col_rows(1)(2) := '22200487';
l_col_rows(2)(2) := 'No';
l_col_rows(3)(2) := NULL;
l_col_rows(4)(2) := 'E-BUSINESS SUITE: CONSOLIDATED ONLINE PATCHING ENABLEMENT READINESS REPORT';
l_col_rows(5)(2) := '';
l_col_rows(1)(3) := '20592764';
l_col_rows(2)(3) := 'No';
l_col_rows(3)(3) := NULL;
l_col_rows(4)(3) := 'CONSOLIDATED AD IO PATCH FOR EBS PLUGIN 12.1.0.4.0';
l_col_rows(5)(3) := '';
l_col_rows(1)(4) := '19725648';
l_col_rows(2)(4) := 'No';
l_col_rows(3)(4) := NULL;
l_col_rows(4)(4) := 'ADGENJKY.SH GENERATING CORE DUMP AT THE END OF EXECUTION';
l_col_rows(5)(4) := '';
l_col_rows(1)(5) := '19502890';
l_col_rows(2)(5) := 'No';
l_col_rows(3)(5) := NULL;
l_col_rows(4)(5) := 'Fix for Bug 19502890';
l_col_rows(5)(5) := '';
l_col_rows(1)(6) := '19492734';
l_col_rows(2)(6) := 'No';
l_col_rows(3)(6) := NULL;
l_col_rows(4)(6) := 'Fix for Bug 19492734';
l_col_rows(5)(6) := '';
l_col_rows(1)(7) := '16322742';
l_col_rows(2)(7) := 'No';
l_col_rows(3)(7) := NULL;
l_col_rows(4)(7) := 'Fix for Bug 16322742';
l_col_rows(5)(7) := '';
l_col_rows(1)(8) := '16264433';
l_col_rows(2)(8) := 'No';
l_col_rows(3)(8) := NULL;
l_col_rows(4)(8) := 'Fix for Bug 16264433';
l_col_rows(5)(8) := '';
l_col_rows(1)(9) := '6241631';
l_col_rows(2)(9) := 'No';
l_col_rows(3)(9) := NULL;
l_col_rows(4)(9) := '11i.ATG_PF.H.RUP7';
l_col_rows(5)(9) := '';
l_col_rows(1)(10) := '6047864';
l_col_rows(2)(10) := 'No';
l_col_rows(3)(10) := NULL;
l_col_rows(4)(10) := 'REHOST JOC FIXES (BASED ON JOC 10.1.2.2) FOR APPS 11i';
l_col_rows(5)(10) := '';
l_col_rows(1)(11) := '6008417';
l_col_rows(2)(11) := 'No';
l_col_rows(3)(11) := NULL;
l_col_rows(4)(11) := 'AOL USER RESPONSIBILITY SECURITY FIXES 2b';
l_col_rows(5)(11) := '';
l_col_rows(1)(12) := '5903765';
l_col_rows(2)(12) := 'No';
l_col_rows(3)(12) := NULL;
l_col_rows(4)(12) := '11i.ATG_PF.H.RUP6';
l_col_rows(5)(12) := '';
l_col_rows(1)(13) := '5473858';
l_col_rows(2)(13) := 'No';
l_col_rows(3)(13) := NULL;
l_col_rows(4)(13) := '11i.ATG_PF.H.RUP5';
l_col_rows(5)(13) := '';
l_col_rows(1)(14) := '5121512';
l_col_rows(2)(14) := 'No';
l_col_rows(3)(14) := NULL;
l_col_rows(4)(14) := 'AOL USER RESPONSIBILITY SECURITY FIXES VERSION 1';
l_col_rows(5)(14) := '';
l_col_rows(1)(15) := '4676589';
l_col_rows(2)(15) := 'No';
l_col_rows(3)(15) := NULL;
l_col_rows(4)(15) := '11i.ATG_PF.H.RUP4';
l_col_rows(5)(15) := '';
l_col_rows(1)(16) := '4334965';
l_col_rows(2)(16) := 'No';
l_col_rows(3)(16) := NULL;
l_col_rows(4)(16) := '11i.ATG_PF.H RUP3';
l_col_rows(5)(16) := '';
l_col_rows(1)(17) := '4125550';
l_col_rows(2)(17) := 'No';
l_col_rows(3)(17) := NULL;
l_col_rows(4)(17) := 'ATG_PF:11.5.10 Consolidated Update (CU2) for ATG Product Family';
l_col_rows(5)(17) := '';
l_col_rows(1)(18) := '4017300';
l_col_rows(2)(18) := 'No';
l_col_rows(3)(18) := NULL;
l_col_rows(4)(18) := 'ATG_PF:11.5.10 Consolidated Update (CU1) for ATG Product Family';
l_col_rows(5)(18) := '';
l_col_rows(1)(19) := '3480000';
l_col_rows(2)(19) := 'No';
l_col_rows(3)(19) := NULL;
l_col_rows(4)(19) := 'ORACLE APPLICATIONS RELEASE 11.5.10.2 MAINTENANCE PACK';
l_col_rows(5)(19) := '';
l_col_rows(1)(20) := '3460000';
l_col_rows(2)(20) := 'No';
l_col_rows(3)(20) := NULL;
l_col_rows(4)(20) := '11.5.10 ORACLE E-BUSINESS SUITE CONSOLIDATED UPDATE 2';
l_col_rows(5)(20) := '';
l_col_rows(1)(21) := '3438354';
l_col_rows(2)(21) := 'No';
l_col_rows(3)(21) := NULL;
l_col_rows(4)(21) := '11i.ATG_PF.H INCLUDE OWF.H';
l_col_rows(5)(21) := '';
l_col_rows(1)(22) := '3262919';
l_col_rows(2)(22) := 'No';
l_col_rows(3)(22) := NULL;
l_col_rows(4)(22) := 'FMWK.H';
l_col_rows(5)(22) := '';
l_col_rows(1)(23) := '3262159';
l_col_rows(2)(23) := 'No';
l_col_rows(3)(23) := NULL;
l_col_rows(4)(23) := 'FND.H INCLUDE OWF.H';
l_col_rows(5)(23) := '';
l_col_rows(1)(24) := '3258819';
l_col_rows(2)(24) := 'No';
l_col_rows(3)(24) := NULL;
l_col_rows(4)(24) := 'OWF.H INCLUDED IN 11.5.10';
l_col_rows(5)(24) := '';
l_col_rows(1)(25) := '3240000';
l_col_rows(2)(25) := 'No';
l_col_rows(3)(25) := NULL;
l_col_rows(4)(25) := '11.5.10 ORACLE E-BUSINESS SUITE CONSOLIDATED UPDATE 1';
l_col_rows(5)(25) := '';
l_col_rows(1)(26) := '3140000';
l_col_rows(2)(26) := 'No';
l_col_rows(3)(26) := NULL;
l_col_rows(4)(26) := 'ORACLE APPLICATIONS RELEASE 11.5.10 MAINTENANCE PACK';
l_col_rows(5)(26) := '';
END IF;
l_sig.title := 'Recommended '||g_rep_info('Apps Version')||' E-Business Suite Technology Stack Patches';
l_sig.fail_condition := '[Applied] = [No]';
l_sig.problem_descr := 'Please check if any of the recommended E-Business Suite Technology Stack patches were not applied in this '||g_rep_info('Apps Version')||' instance';
l_sig.solution := '<b>To get a current accurate list of recommended EBS product patches that are applied/not applied to your instance, please run Patch Wizard.</b><br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>
<ul>Above is a short list of recommended product patches as of the date this script was written to show you what may or may not be applied on this '||g_rep_info('Instance')||' instance.
<li>Please review the list above and schedule to apply any unappplied patches as soon as possible</li>
<li>Refer to the note indicated for more information about each patch</li></ul><br>';
l_sig.success_msg := '<b>All known recommended EBS product patches, at the time this script was written, for release '||g_rep_info('Apps Version')||' have been applied.<br>
To get the most current list of recommended EBS product patches that are applied/not applied to your instance, please run Patch Wizard.</b><br>
See [976188.1] - Patch Wizard Utility, [976688.2] FAQ, or [1077813.1] Videos for more information.<br>';
l_sig.print_condition := 'ALWAYS';
l_sig.fail_type := 'W';
l_sig.print_sql_output := 'Y';
l_sig.limit_rows := 'N';
l_sig.include_in_xml :='Y';
-- Check if applied
IF l_col_rows.exists(1) THEN
FOR i in 1..l_col_rows(1).count loop
l_step := '40';
OPEN get_app_date(l_col_rows(1)(i),l_rel);
FETCH get_app_date INTO l_app_date;
CLOSE get_app_date;
l_col_rows(1)(i) := '{'||l_col_rows(1)(i)||'}';
IF l_app_date is not null THEN
l_step := '50';
l_col_rows(2)(i) := 'Yes';
l_col_rows(3)(i) := to_char(l_app_date);
END IF;
END LOOP;
END IF;
--Render
l_step := '60';
g_signatures('CP1_CHK_TXK_PATCHES') := l_sig;
l_step := '70';
RETURN process_signature_results(
'CP1_CHK_TXK_PATCHES', -- sig ID
l_sig, -- signature information
l_col_rows, -- data
l_hdr); -- headers
debug('End recommended patches signature: check_rec_patches_7');
EXCEPTION WHEN OTHERS THEN
print_log('Error in check_rec_patches_7 at step '||l_step);
raise;
END check_rec_patches_7;
-------------------------
-- Signatures
-------------------------
PROCEDURE add_signature(
p_sig_id VARCHAR2, -- Unique Signature identifier
p_sig_sql VARCHAR2, -- The text of the signature query
p_title VARCHAR2, -- Signature title
p_fail_condition VARCHAR2, -- 'RSGT1' (RS greater than 1), 'RS' (row selected), 'NRS' (no row selected), '[count(*)] > [0]'
p_problem_descr VARCHAR2, -- Problem description
p_solution VARCHAR2, -- Problem solution
p_success_msg VARCHAR2 DEFAULT null, -- Message on success
p_print_condition VARCHAR2 DEFAULT 'ALWAYS', -- ALWAYS, SUCCESS, FAILURE, NEVER
p_fail_type VARCHAR2 DEFAULT 'W', -- Warning(W), Error(E), Informational(I) is for use of data dump so no validation
p_print_sql_output VARCHAR2 DEFAULT 'RS', -- Y/N/RS - when to print data
p_limit_rows VARCHAR2 DEFAULT 'Y', -- Y/N
p_extra_info HASH_TBL_4K DEFAULT CAST(null AS HASH_TBL_4K), -- Additional info
p_child_sigs VARCHAR_TBL DEFAULT VARCHAR_TBL(),
p_include_in_dx_summary VARCHAR2 DEFAULT 'N') -- This is for AT use so internal only. Set to Y if want signature result to be printed at end of output file in DX Summary section
IS
l_rec signature_rec;
BEGIN
l_rec.sig_sql := p_sig_sql;
l_rec.title := p_title;
l_rec.fail_condition := p_fail_condition;
l_rec.problem_descr := p_problem_descr;
l_rec.solution := p_solution;
l_rec.success_msg := p_success_msg;
l_rec.print_condition := p_print_condition;
l_rec.fail_type := p_fail_type;
l_rec.print_sql_output := p_print_sql_output;
l_rec.limit_rows := p_limit_rows;
l_rec.extra_info := p_extra_info;
l_rec.child_sigs := p_child_sigs;
l_rec.include_in_xml := p_include_in_dx_summary;
g_signatures(p_sig_id) := l_rec;
EXCEPTION WHEN OTHERS THEN
print_log('Error in add_signature procedure: '||p_sig_id);
raise;
END add_signature;
FUNCTION run_stored_sig(p_sig_id varchar2) RETURN VARCHAR2 IS
l_col_rows COL_LIST_TBL := col_list_tbl();
l_col_hea VARCHAR_TBL := varchar_tbl();
l_sig signature_rec;
l_key VARCHAR2(255);
BEGIN
print_log('Processing signature: '||p_sig_id);
-- Get the signature record from the signature table
BEGIN
l_sig := g_signatures(p_sig_id);
EXCEPTION WHEN NO_DATA_FOUND THEN
print_log('No such signature '||p_sig_id||' error in run_stored_sig');
--CG raise;
return 'E';
END;
-- Clear FK values if the sig has children
IF l_sig.child_sigs.count > 0 THEN
l_key := g_sql_tokens.first;
WHILE l_key is not null LOOP
IF l_key like '##$$FK_$$##' THEN
g_sql_tokens.delete(l_key);
END IF;
l_key := g_sql_tokens.next(l_key);
END LOOP;
END IF;
-- Run SQL
run_sig_sql(l_sig.sig_sql, l_col_rows, l_col_hea,
l_sig.limit_rows);
-- Evaluate and print
RETURN process_signature_results(
p_sig_id, -- signature id
l_sig, -- Name/title of signature item
l_col_rows, -- signature SQL row values
l_col_hea); -- signature SQL column names
EXCEPTION WHEN OTHERS THEN
print_log('Error in run_stored_sig procedure for sig_id: '||p_sig_id);
print_log('Error: '||sqlerrm);
print_error('PROGRAM ERROR<br/>
Error for sig '||p_sig_id||' '||sqlerrm||'<br/>
See the log file for additional details');
--CG return null;
return 'E';
END run_stored_sig;
--########################################################################################
-- Beginning of specific code of this ANALYZER
--########################################################################################
----------------------------------------------------------------
--- Validate Parameters ---
----------------------------------------------------------------
PROCEDURE validate_parameters(
p_min_volume IN NUMBER DEFAULT 3500
,p_max_volume IN NUMBER DEFAULT 5000
,p_max_output_rows IN NUMBER DEFAULT 30
,p_debug_mode IN VARCHAR2 DEFAULT 'Y')
IS
l_revision VARCHAR2(25);
l_date_char VARCHAR2(30);
l_instance V$INSTANCE.INSTANCE_NAME%TYPE;
l_apps_version FND_PRODUCT_GROUPS.RELEASE_NAME%TYPE;
l_host V$INSTANCE.HOST_NAME%TYPE;
l_full_hostname VARCHAR2(255);
l_key VARCHAR2(255);
l_system_function_var VARCHAR2(2000);
l_index NUMBER:=1;
l_dbversion V$INSTANCE.VERSION%TYPE;
invalid_parameters EXCEPTION;
l_item_cnt number;
l_cp_status VARCHAR2(15);
l_nodename VARCHAR2(30);
l_cp_start_date DATE;
l_logfile_name VARCHAR2(240);
l_last_update_date DATE;
l_apps_invalid_cnt number;
l_fnd_invalid_cnt number;
l_CU1 varchar2(15);
l_CU2 varchar2(15);
l_RUP4 varchar2(15);
l_RUP6 varchar2(15);
l_run_alone_cnt number := 0;
l_run_alone_now_cnt number := 0;
l_std_mgr VARCHAR2(30);
l_enabled VARCHAR2(1);
l_cache NUMBER(3);
l_exists_val VARCHAR2(2000);
BEGIN
-- Determine instance info
BEGIN
SELECT max(release_name) INTO l_apps_version
FROM fnd_product_groups;
SELECT instance_name, host_name, version
INTO l_instance, l_host, l_dbversion
FROM v$instance;
EXCEPTION WHEN OTHERS THEN
print_log('Error in validate_parameters gathering instance information: '
||sqlerrm);
raise;
END;
BEGIN
SELECT distinct domain
INTO l_full_hostname
FROM (SELECT db_domain AS domain
FROM fnd_databases
UNION ALL
SELECT domain AS domain
FROM fnd_nodes) domains WHERE domains.domain IS NOT NULL and rownum = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_full_hostname := NULL;
WHEN OTHERS THEN
print_log('Error in validate_parameters gathering instance information: '
||sqlerrm);
END;
-- Revision and date values can be populated by RCS
l_revision := rtrim(replace('$Revision: 200.24 $','$',''));
l_revision := ltrim(replace(l_revision,'Revision:',''));
l_date_char := rtrim(replace('$Date: 2017/03/31 09:10:18 $','$',''));
l_date_char := ltrim(replace(l_date_char,'Date:',''));
l_date_char := to_char(to_date(l_date_char,'YYYY/MM/DD HH24:MI:SS'),'DD-MON-YYYY');
-- Create global hash for mapping internal result codes (E, W, S, I) to user friendly result codes (error, warning, successful, information)
g_result('E') := 'error';
g_result('W') := 'warning';
g_result('S') := 'success';
g_result('I') := 'info';
-- Create global hash for report information
g_rep_info('Host') := l_host;
-- the host name might already be fully qualified, need to check if it includes the domain before appending it
IF (l_host LIKE '%.%') THEN
g_rep_info('FullHost') := l_host;
ELSE
g_rep_info('FullHost') := l_host || '.' || l_full_hostname;
END IF;
g_rep_info('Instance') := l_instance;
g_rep_info('DB Version') := l_dbversion;
g_rep_info('Apps Version') := l_apps_version;
g_rep_info('File Name') := 'cp_analyzer.sql';
g_rep_info('File Version') := l_revision;
g_rep_info('Execution Date') := to_char(sysdate,'DD-MON-YYYY HH24:MI:SS');
g_rep_info('Description') := ('The ' || analyzer_title ||' Analyzer ' || '<a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1411723.1" target="_blank">(Note 1411723.1)</a> ' || ' is a self-service health-check script that reviews the overall footprint, analyzes current configurations and settings for the environment and provides feedback and recommendations on best practices. Your application data is not altered in any way when you run this analyzer.');
------------------------------------------------------------------------------
-- NOTE: Add code here for validation to the parameters of your diagnostic
------------------------------------------------------------------------------
g_max_output_rows := nvl(p_max_output_rows,20);
g_debug_mode := nvl(p_debug_mode, 'Y');
-- Validation to verify analyzer is run on proper e-Business application version
-- In case validation at the beginning is updated/removed, adding validation here also so execution fails
IF substr(l_apps_version,1,4) NOT IN ('11.5','12.0','12.1','12.2') THEN
print_log('eBusiness Suite version = '||l_apps_version);
print_log('ERROR: This Analyzer script is compatible for following version(s): 11i,12.0,12.1,12.2');
raise invalid_parameters;
END IF;
-- .log enhancements (ER # 140)
IF NOT g_is_concurrent THEN
print_log('EBS '||'Concurrent Processing'|| ' Analyzer Log File');
print_log('***************************************************************');
print_log('Host: '||g_rep_info('Host'));
print_log('FullHost: '||g_rep_info('FullHost'));
print_log('Instance: '||g_rep_info('Instance'));
print_log('Database version: '||g_rep_info('DB Version'));
print_log('Applications version: '||g_rep_info('Apps Version'));
print_log('Analyzer version: '||g_rep_info('File Version'));
ELSE
print_log('Host: '||g_rep_info('Host'));
print_log('FullHost: '||g_rep_info('FullHost'));
print_log('Instance: '||g_rep_info('Instance'));
print_log('Database version: '||g_rep_info('DB Version'));
print_log('Applications version: '||g_rep_info('Apps Version'));
print_log('Analyzer version: '||g_rep_info('File Version'));
END IF;
debug('begin Additional Code: Additional Validation');
select count(request_id) into l_item_cnt from fnd_concurrent_requests where phase_code='C';
SELECT q.CONCURRENT_QUEUE_NAME "Short Name", q.enabled_flag "Enabled", q.cache_size
into l_std_mgr, l_enabled, l_cache
from apps.fnd_concurrent_queues_vl q
where q.CONCURRENT_QUEUE_NAME = 'STANDARD';
select decode(process_status_code,
'A', 'Active','C', 'Connecting','D', 'Deactiviating','G', 'Awaiting Discovery','K', 'Terminated','M', 'Migrating','P', 'Suspended','R', 'Running','S', 'Deactivated','T', 'Terminating','U', 'Unreachable','Z', 'Initializing'), node_name, process_start_date, logfile_name, last_update_date
into l_cp_status, l_nodename, l_cp_start_date, l_logfile_name, l_last_update_date
from fnd_concurrent_processes
where concurrent_process_id = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = 'FNDICM');
select count(*) into l_apps_invalid_cnt
from dba_objects where status='INVALID'
and owner in ('APPS','APPLSYS','APPLSYSPUB','CTXSYS','PUBLIC','SYS','SYSTEM');
select count(*) into l_fnd_invalid_cnt from dba_objects
where object_name like 'FND%'
and owner in ('APPS','APPLSYS')
and status='INVALID';
select ad_patch.is_patch_applied('11i',-1,3240000) into l_CU1 from dual;
select ad_patch.is_patch_applied('11i',-1,3460000) into l_CU2 from dual;
select ad_patch.is_patch_applied('11i',-1,6435000) into l_RUP4 from dual;
select ad_patch.is_patch_applied('11i',-1,6728000) into l_RUP6 from dual;
select count(p.concurrent_program_name) into l_run_alone_cnt
from fnd_concurrent_programs p
where p.run_alone_flag = 'Y'
and p.enabled_flag = 'Y';
select count(p.concurrent_program_name) into l_run_alone_now_cnt
FROM fnd_concurrent_programs_tl t,
fnd_concurrent_programs p, fnd_application_tl a,
fnd_concurrent_requests r, fnd_languages l,
fnd_user u
WHERE a.application_id = t.application_id
and r.concurrent_program_id = t.concurrent_program_id
and t.concurrent_program_id = p.concurrent_program_id
AND r.nls_language = l.nls_language
AND l.language_code = t.language
AND l.language_code = a.language
AND r.requested_by = u.user_id
and p.run_alone_flag = 'Y';
g_reqid_cnt := l_item_cnt;
g_cp_status := l_cp_status;
g_nodename := l_nodename;
g_cp_start_date := l_cp_start_date;
g_logfile_name := l_logfile_name;
g_last_update_date := l_last_update_date;
g_apps_invalid_cnt := l_apps_invalid_cnt;
g_CU1 := l_CU1;
g_CU2 := l_CU2;
g_RUP4 := l_RUP4;
g_RUP6 := l_RUP6;
g_run_alone_cnt := l_run_alone_cnt;
g_run_alone_now_cnt := l_run_alone_now_cnt;
g_std_mgr := l_std_mgr;
g_enabled := l_enabled;
g_cache := l_cache;
g_min_vol := p_min_volume;
g_max_vol := p_max_volume;
print_log('l_CU1 = '||l_CU1);
print_log('l_CU2 = '||l_CU2);
print_log('g_RUP4 = '||g_RUP4);
print_log('g_RUP6 = '||g_RUP6);
debug('end Additional Code: Additional Validation');
-- Create global hash for parameters. Numbers required for the output order
debug('begin populate parameters hash table');
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Minimum acceptable volume of Concurrent Request data';
g_parameters(g_parameters.LAST).pvalue := p_min_volume;
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Maximum acceptable volume of Concurrent Request data';
g_parameters(g_parameters.LAST).pvalue := p_max_volume;
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Maximum Rows to Display';
g_parameters(g_parameters.LAST).pvalue := p_max_output_rows;
g_parameters.extend();
g_parameters(g_parameters.LAST).pname := 'Debug Mode';
g_parameters(g_parameters.LAST).pvalue := p_debug_mode;
debug('end populate parameters hash table');
-- Print parameters to the log
print_log('Parameter Values');
FOR i IN 1..g_parameters.COUNT LOOP
print_log(to_char(i) || '. ' || g_parameters(i).pname || ': ' || g_parameters(i).pvalue);
END LOOP;
-- Create global hash of SQL token values
debug('begin populate sql tokens hash table');
debug('end populate sql tokens hash table');
l_key := g_sql_tokens.first;
-- Print token values to the log
print_log('SQL Token Values');
WHILE l_key IS NOT NULL LOOP
print_log(l_key||': '|| g_sql_tokens(l_key));
l_key := g_sql_tokens.next(l_key);
END LOOP;
EXCEPTION
WHEN INVALID_PARAMETERS THEN
print_log('Invalid parameters provided. Process cannot continue.');
raise;
WHEN OTHERS THEN
print_log('Error validating parameters: '||sqlerrm);
raise;
END validate_parameters;
---------------------------------------------
-- Load signatures for this ANALYZER --
---------------------------------------------
PROCEDURE load_signatures IS
l_info HASH_TBL_4K;
BEGIN
null;
-----------------------------------------
-- Add definition of signatures here ....
------------------------------------------
debug('begin add_signature: CP2_LONGRPTS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_LONGRPTS',
p_sig_sql => 'SELECT p.user_concurrent_program_name program_name, count(r.request_id),
avg((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) avg_run_time,
min((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) min_run_time,
max((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) max_run_time
from apps.fnd_concurrent_requests r, apps.fnd_concurrent_processes c, apps.fnd_concurrent_queues q,
apps.fnd_concurrent_programs_vl p
where p.concurrent_program_id = r.concurrent_program_id and p.application_id = r.program_application_id
and c.concurrent_process_id = r.controlling_manager and q.concurrent_queue_id = c.concurrent_queue_id
and q.concurrent_queue_name <> ''HIGH_IMPACT''and p.application_id >= 20000 and r.actual_start_date >= sysdate-31
and r.status_code = ''C'' and r.phase_code in (''C'',''G'')
and (nvl(r.actual_completion_date,r.actual_start_date) - r.actual_start_date) * 24 * 60 > 30
and p.user_concurrent_program_name not like ''Gather%Statistics%''
and ((nvl(r.actual_completion_date,r.actual_start_date) - r.actual_start_date) * 24 > 16
or (r.actual_start_date-trunc(r.actual_start_date)) * 24 between 9 and 17
or (r.actual_completion_date-trunc(r.actual_completion_date)) * 24 between 9 and 17)
group by p.user_concurrent_program_name
order by avg((nvl(r.actual_completion_date,sysdate) - r.actual_start_date) * 1440) desc',
p_title => 'Long Running Reports During Business Hours',
p_fail_condition => 'RS',
p_problem_descr => 'You have Long Running Reports During Business Hours',
p_solution => 'Review the requests listed and confirm if they are intended to run for longer amounts of time.<br>
If the wrong date range is used or a large volume of data exists for the request, a longer run time can be expected.<br>
Monthly, Quarterly, and Yearly requests would typically run longer.<br><br>
Visit the Concurrent Processing Product Information Center (PIC) [1304305.1] for additional performance and setup documentation.',
p_success_msg => 'There does not appear to be any long running requests during business hours.<br>
The intent is to proactively identify requests which could represent potential performance problems.<br><br>
Visit the Concurrent Processing Product Information Center (PIC) [1304305.1] for additional performance and setup documentation.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_LONGRPTS');
debug('begin add_signature: CP1_ENV1');
add_signature(
p_sig_id => 'CP1_ENV1',
p_sig_sql => 'select VARIABLE_NAME, replace(value,'':'',chr(10)) "VALUE"
from FND_ENV_CONTEXT
where CONCURRENT_PROCESS_ID = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = ''FNDICM'')
and VARIABLE_NAME in (''APPLLKOR'',''AF_CLASSPATH'',''AF_JLIB'',''AF_JRE_TOP'',
''AF_LD_LIBRARY_PATH'',''AFJSMARG'',''AFJVAPRG'',''APPLCSF'',''APPLDCP'',
''APPLFENV'',''APPLLOG'',''APPLORB'',''APPLORC'',''APPLOUT'',''APPLPTMP'',
''APPLTMP'',''APPS_JDBC_URL'',''CA_FILEIO_64'',''CLASSPATH'',
''CONTEXT_FILE'',''CONTEXT_NAME'',''DE_DISABLE_PLS_512'',''DISPLAY'',
''EVENT_10932'',''FND_TOP'',''FNDNAM'',''FNDSM_SCRIPT'',''HOSTNAME'',
''LD_LIBRARY_PATH'',''NLS_LANG'',''NLS_NUMERIC_CHARACTERS'',
''ORACLE_HOME'',''PLATFORM'',''PRINTER'',''REPORTS60_PATH'',
''REPORTS_CLASSPATH'',''REPORTS_NO_DUMMY_PRINTER'',''REPORTS_PATH'',
''REPORTS_POST'',''REPORTS_PRE'',''REPORTS_TMP'',''TK_PRINT_STATUS'',
''TK_PRINTER'',''TNS_ADMIN'',''TWO_TASK'',''XDO_TOP'',''XENVIRONMENT'')
order by VARIABLE_NAME',
p_title => 'Concurrent Processing Environment Variables',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the Concurrent Processing Environment Variables',
p_solution => 'Verify the Concurrent Processing Environment Variables',
p_success_msg => 'The Internal Concurrent Manager (ICM) for '||g_nodename||' is "'||g_cp_status||'", and has been running since '||g_cp_start_date||'.<br>
The current Concurrent Manager logs are found :<br>
'||g_logfile_name||'.<br><br>
Refer to [1355735.1] - Difference between APPLPTMP and APPLTMP Directories in EBS',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_ENV1');
debug('begin add_signature: CP2_ELAPSEDHIST');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_ELAPSEDHIST',
p_sig_sql => 'SELECT f.application_short_name "APPLICATION", substr(p.user_concurrent_program_name,1,55) "DESCRIPTION",
substr(p.concurrent_program_name,1,20) "PROGRAM", r.priority "PRIORITY",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "#TIMESRUN",
''<div align="right">''||to_char(round(sum(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "TOTAL|MINS",
''<div align="right">''||to_char(round(avg(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "AVG|MINS",
''<div align="right">''||to_char(round(max(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "MAX|MINS",
''<div align="right">''||to_char(round(min(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "MIN|MINS",
''<div align="right">''||to_char(round(stddev(actual_completion_date - actual_start_date) * 1440, 2),''999,999,999,999.99'')||''</div>'' "RUN|STHDEV MINS",
''<div align="right">''||to_char(round(stddev(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 1440, 2),''999,999,999,999.99'')||''</div>'' "WAIT|STHDEV MINS",
''<div align="right">''||to_char(round(sum(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 1440, 2),''999,999,999,999.99'')||''</div>'' "#WAITED|MINS",
''<div align="right">''||to_char(round(avg(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 1440, 2),''999,999,999,999.99'')||''</div>'' "AVG|WAIT MINS",
c.request_class_name "TYPE"
from apps.fnd_concurrent_request_class c, apps.fnd_application f, apps.fnd_concurrent_programs_vl p,
apps.fnd_concurrent_requests r
where r.program_application_id = p.application_id and r.concurrent_program_id = p.concurrent_program_id
and r.status_code in (''C'',''G'') and r.phase_code = ''C'' and p.application_id = f.application_id
and r.program_application_id = f.application_id and r.request_class_application_id = c.application_id(+)
and r.concurrent_request_class_id = c.request_class_id(+)
group by c.request_class_name, f.application_short_name, p.concurrent_program_name, p.user_concurrent_program_name, r.priority
order by count(*)',
p_title => 'Elapsed Time History of Concurrent Requests',
p_fail_condition => 'RS',
p_problem_descr => 'This section identifies the total time duration for recently completed requests.',
p_solution => 'The output produced can be cross referenced with the enabled managers and defined workshifts outputs,
for better allocation of requests across the existing managers/workshifts. <br>
For example you can consider assigning quick requests to one manager and/or workshift, and assigning slow requests to another manager and/or workshift. <br>
Requests with varying runtimes can also be moved to their own manager, or remain with the standard manager queue.',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_ELAPSEDHIST');
debug('begin add_signature: CP4_STD_MGR_ENV');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_ENV',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "Manager", a.application_name, v.VARIABLE, v.VALUE
FROM apps.fnd_concurrent_queues_vl q, apps.fnd_application_vl a, FND_CONC_QUEUE_ENVIRON v
WHERE a.application_id = q.application_id
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
and a.application_id = v.CONCURRENT_QUEUE_ID(+)',
p_title => 'Environment',
p_fail_condition => 'NRS',
p_problem_descr => 'Standard Manager is not found.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_ENV');
debug('begin add_signature: CP4_STD_MGR_RULES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_RULES',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Specialization Rules',
p_fail_condition => '[c.include_flag]=[I]',
p_problem_descr => 'Standard Manager has INCLUDES.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_RULES');
debug('begin add_signature: CP4_STD_MGR_WRK_SHIFTS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_WRK_SHIFTS',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "Manager", a.application_name,
p.concurrent_time_period_name "Work Shift", p.description "Description",
qs.min_processes "Processes", qs.service_parameters "Parameter", qs.sleep_seconds "Sleep Seconds"
from apps.fnd_concurrent_queues_vl q, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y''
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Work Shifts',
p_fail_condition => 'NRS',
p_problem_descr => 'Standard Manager is not found.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_WRK_SHIFTS');
debug('begin add_signature: CP4_STD_MGR_DEFINE_R12');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_DEFINE_R12',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "Manager", q.CONCURRENT_QUEUE_NAME "Short Name", q.enabled_flag "Enabled",
a.application_name "Application Name", q.description "Description", decode(q.manager_type,''0'',''Internal Concurrent Manager'',''1'',''Concurrent Manager'', ''2'',''Internal Monitor'', ''3'',''Transaction Manager'', ''4'',''Conflict Resolution Manager'',''5'',''Scheduler/Prereleaser Manager'', ''6'',''Service Manager'') "TYPE", q.DATA_GROUP_ID "Data Group", q.RESOURCE_CONSUMER_GROUP "Consumer Group",
q.cache_size, q.node_name "Primary Node", q.os_queue "Primary System Queue",
q.node_name2 "Second Node", q.os_queue2 "Second System Queue"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Standard Manager Definition',
p_fail_condition => '[q.enabled_flag] <> [Y]',
p_problem_descr => 'Standard Manager is not enabled.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule<br>
"Excluded" is ok. <br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.<br><br>
As per the Oracle E-Business Suite System Administrator''s Guide - Configuration:
"A manager named Standard. The Standard manager accepts any and all requests; it has no specialization. The Standard manager is active all the time; it works 365 days a year, 24 hours a day.<br>
<b>ATTENTION:</b> You should not alter the definition of the Standard concurrent manager. If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs."',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL('CP4_STD_MGR_ENV','CP4_STD_MGR_RULES','CP4_STD_MGR_WRK_SHIFTS'),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_DEFINE_R12');
debug('begin add_signature: CP1_CONC_REQ1');
add_signature(
p_sig_id => 'CP1_CONC_REQ1',
p_sig_sql => 'select ''FND_CONCURRENT_REQUESTS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONCURRENT_REQUESTS
union
select ''FND_RUN_REQUESTS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_RUN_REQUESTS
union
select ''FND_CONC_REQUEST_ARGUMENTS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_REQUEST_ARGUMENTS
union
select ''FND_DUAL'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_DUAL
union
select ''FND_CONCURRENT_PROCESSES'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONCURRENT_PROCESSES
union
select ''FND_CONC_STAT_LIST'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_STAT_LIST
union
select ''FND_CONC_STAT_SUMMARY'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_STAT_SUMMARY
union
select ''FND_ENV_CONTEXT'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_ENV_CONTEXT
union
select ''FND_CONC_PP_ACTIONS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_CONC_PP_ACTIONS
union
select ''FND_RUN_REQ_PP_ACTIONS'' "TABLE", ''<div align="right">''||to_char(max(rownum),''999,999,999,999'')||''</div>'' "# ROWS" from FND_RUN_REQ_PP_ACTIONS',
p_title => 'Your overall Concurrent Processing HealthCheck Status is in need of Immediate Review!',
p_fail_condition => 'RS',
p_problem_descr => 'The FND_CONCURRENT_REQUESTS Table has '||to_char(g_reqid_cnt,'999,999,999,999')||' rows of completed runtime data which exceeds the acceptable thresholds that were entered to run this Analyzer.<BR><BR>
This Gauge is merely a simple indicator about volume of completed Concurrent Request runtime data on '||g_rep_info('Instance')||', which can be adjusted when running this Analyzer.<br>
It displays GREEN if less than '||to_char(g_min_vol,'999,999,999,999')||' rows are found, ORANGE if less than '||to_char(g_max_vol,'999,999,999,999')||', and RED if over '||to_char(g_max_vol,'999,999,999,999')||' rows are found.',
p_solution => 'Clean up Concurrent Request Data and move the needle to green by scheduling the <b>FNDCPPUR - <i>Purge Concurrent Request and/or Manager Data</i></b> on a regular basis.
<br><br>
Run these queries to gather more details about all old requests<br>
<blockquote>
<table width="100%" border="0">
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg5" onClick="showDetails(5);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts By Year
<div style="display:none; width: 90%" id="detailTxt5">
<blockquote>
select to_char(actual_start_date,''YYYY'') "STARTED", to_char(actual_completion_date,''YYYY'') "ENDED", <br>
count(request_id) "COUNT" <br>
from fnd_concurrent_requests <br>
where actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by to_char(actual_start_date,''YYYY''), to_char(actual_completion_date,''YYYY'')<br>
order by 1;
</blockquote>
</div></td>
</tr>
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg11" onClick="showDetails(11);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts by Concurrent Program
<div style="display:none; width: 90%" id="detailTxt11">
<blockquote>
select fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY'') "STARTED",<br> to_char(r.actual_completion_date,''YYYY'') "ENDED", count(r.request_id) "COUNT" <br>
from fnd_concurrent_requests r, fnd_concurrent_programs_tl fcp<br>
where r.concurrent_program_id = fcp.concurrent_program_id<br>
and r.actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY''),
to_char(r.actual_completion_date,''YYYY'')<br>
order by 2;
</blockquote>
</div></td>
</tr>
</table>
</blockquote>
For more information please review: <br>
[104282.1] - Concurrent Processing - Purge Concurrent Request and/or Manager Data Program (FNDCPPUR)<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite
',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_CONC_REQ1');
debug('begin add_signature: CP3_CPADV1');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV1',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME "QUEUE NAME", q.USER_CONCURRENT_QUEUE_NAME "USER QUEUE NAME",
a.application_short_name "MODULE", q.cache_size "CACHE", p.concurrent_time_period_name "TIME PERIOD",
qs.min_processes "MIN PROCESSES", qs.max_processes "MAX PROCESSES", qs.sleep_seconds "SLEEP SECS"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y''
and nvl(q.control_code,''X'') <> ''E''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Concurrent Managers Active/Enabled and Workshifts',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Managers Active/Enabled and Workshifts',
p_solution => 'This section collects the Concurrent Managers that are currently Active and Enabled to process data, and associated with a specific Workshift, and establishes a baseline list of managers defined on your system.
The Workshifts are created to define specific times when a Manager can run requests.<br>
The resulting data is for review and confirmation by your teams, and serves as a baseline for comparison with later outputs above. <br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices.',
p_success_msg => 'This section collects the Concurrent Managers that are currently Active and Enabled to process data, and associated with a specific Workshift, and establishes a baseline list of managers defined on your system.
The Workshifts are created to define specific times when a Manager can run requests.<br>
The resulting data is for review and confirmation by your teams, and serves as a baseline for comparison with later outputs above. <br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV1');
debug('begin add_signature: CP4_STD_MGR_DEFINE_11I');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_DEFINE_11I',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "MANAGER", q.CONCURRENT_QUEUE_NAME "SHORT NAME", q.enabled_flag "ENABLED",
a.application_name "APPLICATION NAME", q.description "DESCRIPTION", decode(q.manager_type,''0'',''Internal Concurrent Manager'',''1'',''Concurrent Manager'', ''2'',''Internal Monitor'', ''3'',''Transaction Manager'', ''4'',''Conflict Resolution Manager'',''5'',''Scheduler/Prereleaser Manager'', ''6'',''Service Manager'') "TYPE", q.DATA_GROUP_ID "DATA GROUP", q.RESOURCE_CONSUMER_GROUP "CONSUMER GROUP",
q.cache_size "CACHE SIZE", q.node_name "PRIMARY NODE", q.os_queue "PRIMARY SYSTEM QUEUE",
q.node_name2 "2ND NODE", q.os_queue2 "2ND SYSTEM QUEUE"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Standard Manager Definition',
p_fail_condition => '[q.enabled_flag] <> [Y]',
p_problem_descr => 'Standard Manager is not enabled.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule<br>
"Excluded" is ok. <br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.<br><br>
As per the Oracle E-Business Suite System Administrator''s Guide - Configuration:
"A manager named Standard. The Standard manager accepts any and all requests; it has no specialization. The Standard manager is active all the time; it works 365 days a year, 24 hours a day.<br>
<b>ATTENTION:</b> You should not alter the definition of the Standard concurrent manager. If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs."',
p_success_msg => 'Standard Manager is running as expected.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL('CP4_STD_MGR_RULES','CP4_STD_MGR_WRK_SHIFTS'),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_DEFINE_11I');
debug('begin add_signature: CP3_CPADV2');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV2',
p_sig_sql => 'SELECT f.concurrent_queue_name, f.concurrent_queue_id "CONC QUEUE ID",
f.user_concurrent_queue_name "QUEUE NAME", f.max_processes "MAX", f.running_processes "RUNNING",
DECODE(f.control_code, ''B'',''B=Activated'',''A'',''A=Activating'',''E'',''E=Deactivated'',
''D'',''D=Deactivating'',''R'',''R=Restarting'',''Q'',''Q=Resuming Concurrent Manager'',
''P'',''P=Suspended'',''O'',''O=Suspending Concurrent Manager'',
''H'',''H=System Hold, Fix Manager before resetting counters'',
''N'',''N=Target node/queue unavailable'',''X'',''X=Terminated'',
''T'',''T=Terminating'',''U'',''U=Updating Environment Information'',''V'',''V=Verifying'') "CONTROL CODE",
f.target_node "ACTUAL NODE", f.enabled_flag "ENABLED",
to_char(f.last_update_date,''DD-MON-RR HH24:MI:SS'') "LAST_UPDATE_DATE",
f.node_name "PRIMARY NODE", f.node_name2 "SECONDARY NODE"
FROM fnd_concurrent_queues_vl f
where f.enabled_flag = ''Y''
order by f.application_id, f.concurrent_queue_id',
p_title => 'Concurrent Managers Active/Enabled Overview',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Managers which are Active or Enabled',
p_solution => 'Review the fnd_concurrent_queues_vl view table',
p_success_msg => 'Displays a list of Active Managers',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV2');
debug('begin add_signature: CP1_ORPHANED_PURGE_DATA');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_ORPHANED_PURGE_DATA',
p_sig_sql => 'select ''FND_CONC_REQUEST_ARGUMENTS'' TABLE_NAME,
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT OF ORPHANED REQUEST_IDS" from fnd_conc_request_arguments
where request_id in ((select request_id from fnd_conc_request_arguments)
minus (select request_id from fnd_concurrent_requests))
union
select ''FND_CONC_PP_ACTIONS'' TABLE_NAME,
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT OF ORPHANED REQUEST_IDS" from fnd_conc_pp_actions
where concurrent_request_id in ((select concurrent_request_id from fnd_conc_pp_actions))',
p_title => 'Orphaned Purge Concurrent Data',
p_fail_condition => 'RS',
p_problem_descr => 'There are orphaned concurrent request records found that will not be purged using the concurrent program (FNDCPPUR) - Purge Concurrent Request and/or Manager Data.
',
p_solution => 'This data must have been manually purged but did not include all associated tables which cause the orphaned records identified.<br><br>
To correct the problem deleting FND_CONCURRENT_PROCESSES can cause,
the following SQL Statement may be run on the database:<blockquote>
delete from fnd_conc_request_arguments
where request_id in ((select request_id from fnd_conc_request_arguments)
minus (select request_id from fnd_concurrent_requests));<br><br>
delete from fnd_conc_pp_actions
where concurrent_request_id in ((select concurrent_request_id from fnd_conc_pp_actions)
minus (select request_id from fnd_concurrent_requests));
</blockquote>
For more details, please review :<br>
[104282.1] - Concurrent Processing - Purge Concurrent Request and/or Manager Data Program (FNDCPPUR)',
p_success_msg => 'No Orphaned Concurrent Request Data found.',
p_print_condition => nvl('FAILURE','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_ORPHANED_PURGE_DATA');
debug('begin add_signature: CP2_CURRENTREQS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_CURRENTREQS',
p_sig_sql => 'SELECT w.seconds_in_wait "Secondswait", w.event "waitEvent", w.p1||chr(10)||w.p2||chr(10)||w.p3 "Session Wait",
p.spid||chr(10)||s.process "ServerClient", s.sid||chr(10)||s.serial#||chr(10)||s.sql_hash_value "SidSerialSQLHash",
u.user_name||chr(10)||PHASE_CODE||'' ''||STATUS_CODE||chr(10)||s.status "DBPhaseStatusCODEUser",
Request_id||chr(10)||priority_request_id||chr(10)||Parent_request_id "Request_id",
concurrent_program_name, user_concurrent_program_name,
requested_start_Date||chr(10)||round((sysdate- requested_start_date)*1440, 2)||''M'' "RequestStartDate",
ARGUMENT_TEXT, CONCURRENT_QUEUE_ID, QUEUE_DESCRIPTION
FROM FND_CONCURRENT_WORKER_REQUESTS, fnd_user u, v$session s, v$process p, v$session_wait w
WHERE (Phase_Code=''R'')and hold_flag != ''Y''and Requested_Start_Date <= SYSDATE
AND ('''' IS NULL OR ('''' = ''B'' AND PHASE_CODE = ''R'' AND STATUS_CODE IN (''I'', ''Q'')))and ''1'' in (0,1,4)
and requested_by=u.user_id and s.paddr=p.addr and s.sid=w.sid and oracle_process_id = p.spid
and oracle_session_id = s.audsid
order by requested_start_date',
p_title => 'Requests Currently Running on a System',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Requests currently Running on this instance.',
p_solution => 'This table reflects a summary for all concurrent requests running on the instance with their current state.',
p_success_msg => 'This reflects a summary for all concurrent requests running on the instance with their current state.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_CURRENTREQS');
debug('begin add_signature: EBS_VERSION');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'EBS_VERSION',
p_sig_sql => 'SELECT instance_name, release_name, host_name,
startup_time, version
from fnd_product_groups, v$instance',
p_title => 'E-Business Suite Version',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the EBS Instance Information',
p_solution => '',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: EBS_VERSION');
debug('begin add_signature: CP4_STD_MGR_DEFINE_CACHE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_DEFINE_CACHE',
p_sig_sql => 'SELECT q.USER_CONCURRENT_QUEUE_NAME "MANAGER", q.CONCURRENT_QUEUE_NAME "SHORT NAME", q.enabled_flag "ENABLED",
a.application_name "APPLICATION", q.description "DESCRIPTION", decode(q.manager_type,''0'',''Internal Concurrent Manager'',''1'',''Concurrent Manager'', ''2'',''Internal Monitor'', ''3'',''Transaction Manager'', ''4'',''Conflict Resolution Manager'',''5'',''Scheduler/Prereleaser Manager'', ''6'',''Service Manager'') "TYPE", q.DATA_GROUP_ID "DATA GROUP", q.RESOURCE_CONSUMER_GROUP "CONSUMER GROUP",
q.cache_size "CACHE SIZE", q.node_name "PRIMARY NODE", q.os_queue "PRIMARY SYSTEM QUEUE",
q.node_name2 "2ND NODE", q.os_queue2 "2ND SYSTEM QUEUE"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id
and a.application_id = q.application_id
and qs.queue_application_id = q.application_id
and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id
and qs.concurrent_time_period_id = p.concurrent_time_period_id
and nvl(q.control_code,''X'') <> ''E''
and q.CONCURRENT_QUEUE_NAME = ''STANDARD''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Standard Manager Cache Size',
p_fail_condition => '[q.cache_size] > [5]',
p_problem_descr => 'Standard Manager Cache Size is set to '||g_cache||'.',
p_solution => 'By setting the cache size at a higher number, the concurrent manager does not have to read its requests list each time it runs a request.<br>However, the manager does not recognize any priority changes you make for a particular request if it has already read that request into its cache. Further, even if you give a higher priority to a new request, that new request must wait until the buffer is empty and the manager returns to look at the requests list. That request may have to wait a long time if you set the buffer size to a high number.<br><br>
You should use cache size to tune your concurrent managers to work most efficiently for you site''s needs. If your organization tends to reprioritize jobs going to a certain manager, that manager should have its buffer size set fairly low.<br><br>
<b>Tip:</b> Enter a value of 1 when defining a manager that runs long, time-consuming jobs, and a value of 3 or 4 for managers that run small, quick jobs."',
p_success_msg => 'Standard Manager Cache Size is set to '||g_cache||'.
<br><br>
According to the "Oracle Applications System Administrator''s Guide - Configuration" Defining Concurrent Managers section : <br>
Release 12 (Part No. B31453-04)<br>
Release 11i (Part No. B13925-06)<br><br>
"Cache Size (Concurrent Manager only)<br>
Enter the number of requests your manager remembers each time it reads which requests to run. For example, if a manager''s workshift has 1 target process and a cache value of 3, it will read three requests and wait until these three requests have been run before reading new requests.
<br><br>
In reading requests, the manager will only put requests it is allowed to run into its cache. For example, if you have defined your manager to run only Order Entry reports then the manager will put only Order Entry requests into its cache.
<br><br>
If you enter 1, the concurrent manager must look at its requests list each time it is ready to process another request.
',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_DEFINE_CACHE');
debug('begin add_signature: CP1_CONC_REQ2');
add_signature(
p_sig_id => 'CP1_CONC_REQ2',
p_sig_sql => 'select to_char(actual_completion_date,''YYYY'') "COMPLETED",
''<div align="right">''||to_char(count(request_id),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests where phase_code=''C''
group by to_char(actual_completion_date,''YYYY'')
order by to_char(actual_completion_date,''YYYY'') desc',
p_title => 'Your overall Concurrent Processing HealthCheck Status is in need of Review!',
p_fail_condition => 'RS',
p_problem_descr => 'The FND_CONCURRENT_REQUESTS Table has '||to_char(g_reqid_cnt,'999,999,999,999')||' rows of completed runtime data which is above the minimum, but below the maximum acceptable thresholds that were entered to run this Analyzer.<BR><BR>
This Gauge is merely a simple indicator about volume of completed Concurrent Request runtime data on '||g_rep_info('Instance')||', which can be adjusted when running this Analyzer.<br>
It displays GREEN if less than '||to_char(g_min_vol,'999,999,999,999')||' rows are found, ORANGE if less than '||to_char(g_max_vol,'999,999,999,999')||', and RED if over '||to_char(g_max_vol,'999,999,999,999')||' rows are found.',
p_solution => 'Clean up Concurrent Request Data and move the needle to green by scheduling the <b>FNDCPPUR - <i>Purge Concurrent Request and/or Manager Data</i></b> on a regular basis.
<br><br>
Run these queries to gather more details about your old requests<br>
<blockquote>
<table width="100%" border="0">
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg5" onClick="showDetails(5);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts By Year
<div style="display:none; width: 90%" id="detailTxt5">
<blockquote>
select to_char(actual_start_date,''YYYY'') "STARTED", to_char(actual_completion_date,''YYYY'') "ENDED", <br>
count(request_id) "COUNT" <br>
from fnd_concurrent_requests <br>
where actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by to_char(actual_start_date,''YYYY''), to_char(actual_completion_date,''YYYY'')<br>
order by 1;
</blockquote>
</div></td>
</tr>
<tr>
<td width="3%" valign="top">
<div id="divImg5"><input type="button" id="detailImg11" onClick="showDetails(11);" value="+"></input></div>
</td>
<td width="97%">Show Summary of counts by Concurrent Program
<div style="display:none; width: 90%" id="detailTxt11">
<blockquote>
select fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY'') "STARTED",<br> to_char(r.actual_completion_date,''YYYY'') "ENDED", count(r.request_id) "COUNT" <br>
from fnd_concurrent_requests r, fnd_concurrent_programs_tl fcp<br>
where r.concurrent_program_id = fcp.concurrent_program_id<br>
and r.actual_start_date < sysdate-365 --Show Requests started over 1 year ago<br>
group by fcp.USER_CONCURRENT_PROGRAM_NAME, to_char(r.actual_start_date,''YYYY''),
to_char(r.actual_completion_date,''YYYY'')<br>
order by 2;
</blockquote>
</div></td>
</tr>
</table>
</blockquote>
For more information please review: [1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite
',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_CONC_REQ2');
debug('begin add_signature: CP1_ENV2');
add_signature(
p_sig_id => 'CP1_ENV2',
p_sig_sql => 'select VARIABLE_NAME, replace(value,'':'',chr(10)) "VALUE"
from FND_ENV_CONTEXT
where CONCURRENT_PROCESS_ID = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = ''FNDICM'')
and VARIABLE_NAME in (''APPLLKOR'',''AF_CLASSPATH'',''AF_JLIB'',''AF_JRE_TOP'',
''AF_LD_LIBRARY_PATH'',''AFJSMARG'',''AFJVAPRG'',''APPLCSF'',''APPLDCP'',
''APPLFENV'',''APPLLOG'',''APPLORB'',''APPLORC'',''APPLOUT'',''APPLPTMP'',
''APPLTMP'',''APPS_JDBC_URL'',''CA_FILEIO_64'',''CLASSPATH'',
''CONTEXT_FILE'',''CONTEXT_NAME'',''DE_DISABLE_PLS_512'',''DISPLAY'',
''EVENT_10932'',''FND_TOP'',''FNDNAM'',''FNDSM_SCRIPT'',''HOSTNAME'',
''LD_LIBRARY_PATH'',''NLS_LANG'',''NLS_NUMERIC_CHARACTERS'',
''ORACLE_HOME'',''PLATFORM'',''PRINTER'',''REPORTS60_PATH'',
''REPORTS_CLASSPATH'',''REPORTS_NO_DUMMY_PRINTER'',''REPORTS_PATH'',
''REPORTS_POST'',''REPORTS_PRE'',''REPORTS_TMP'',''TK_PRINT_STATUS'',
''TK_PRINTER'',''TNS_ADMIN'',''TWO_TASK'',''XDO_TOP'',''XENVIRONMENT'')
order by VARIABLE_NAME',
p_title => 'Concurrent Processing Environment Variables',
p_fail_condition => 'RS',
p_problem_descr => 'The Concurrent Manager for '||g_nodename||' is "'||g_cp_status||'".',
p_solution => 'The Concurrent Manager was last started on '||g_cp_start_date||', and last updated on '||g_last_update_date||'.<br>
The current Concurrent Manager logs are found :<br>
'||g_logfile_name||'.<br><br>Refer to [1355735.1] - Difference between APPLPTMP and APPLTMP Directories in EBS',
p_success_msg => 'There is a problem identifying the Concurrent Processing Environment Variables for '||g_nodename||'.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_ENV2');
debug('begin add_signature: CP3_CPADV3');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV3',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME "QUEUE NAME", p.concurrent_time_period_name "TIME PERIOD", qs.min_processes "MIN PROCESSES"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id and a.application_id = q.application_id
and qs.queue_application_id = q.application_id and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y'' and nvl(q.control_code,''X'') <> ''E'' and qs.min_processes >0 and i.status <> ''I''
order by q.concurrent_queue_name, p.concurrent_time_period_id',
p_title => 'Active Managers for Applications not Installed/Used',
p_fail_condition => 'RS',
p_problem_descr => 'There are Concurrent Managers that are active for Application modules not Installed or Used.',
p_solution => 'These unused managers can impact performance, and deactivating them can reduce current application overhead on the instance.',
p_success_msg => 'There are no Concurrent Managers that are active for Application modules not Installed or Used.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV3');
debug('begin add_signature: CP2_CONCREQTOTALS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_CONCREQTOTALS',
p_sig_sql => 'SELECT decode(phase_code, ''P'', ''Pending requests'',''R'', ''Running requests'',''C'', ''Completed requests'') "PHASE", ''<div align="right">''||to_char(count(request_id),''999,999,999,999'')||''</div>'' "# OF REQUESTS"
FROM fnd_concurrent_requests
GROUP BY phase_code',
p_title => 'FND_CONCURRENT_REQUESTS Totals',
p_fail_condition => 'RS',
p_problem_descr => 'Provides a count of concurrent requests in a state of: Pending, Running, or Completed.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of how often you are purging Concurrent Request tables. <br>
If the total records are too large performance issues can result and FNDCPPUR should be run, otherwise there is no immediate action required.',
p_success_msg => 'There are no concurrent requests in a state of: Pending, Running, or Completed.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_CONCREQTOTALS');
debug('begin add_signature: CP1_INVALIDS_ALL_LOW');
add_signature(
p_sig_id => 'CP1_INVALIDS_ALL_LOW',
p_sig_sql => 'select d.owner, d.object_type, substr(d.object_name,0,3)||''%...'' "OBJECT_NAME", ''<div align="right">''||to_char(count(d.status),''999,999,999,999'')||''</div>'' "COUNT"
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'',''APPLSYSPUB'',''CTXSYS'',''PUBLIC'',''SYS'',''SYSTEM'')
group by d.owner, d.object_type, substr(d.object_name,0,3)
order by 4 desc',
p_title => 'There are '||g_apps_invalid_cnt||' Invalid Objects Found',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_apps_invalid_cnt||' Invalid Objects found in your instance.',
p_solution => 'The above list summarizes quickly what products the INVALID objects belong to.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
We next check if any belong to FND, as this control Concurrent Processing in particular.<br>
Consider running ADADMIN and compiling the entire APPS Schema, or just for the Product in question.<br><br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
Troubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work !!!
There are no invalid objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_ALL_LOW');
debug('begin add_signature: CP1_CONC_REQ3');
add_signature(
p_sig_id => 'CP1_CONC_REQ3',
p_sig_sql => 'select to_char(actual_completion_date,''YYYY'') "COMPLETED", count(request_id) "COUNT"
from fnd_concurrent_requests where phase_code=''C''
group by to_char(actual_completion_date,''YYYY'')
order by to_char(actual_completion_date,''YYYY'') desc',
p_title => 'Your overall Concurrent Processing HealthCheck Status is Healthy!',
p_fail_condition => 'RS',
p_problem_descr => 'The FND_CONCURRENT_REQUESTS Table has '||to_char(g_reqid_cnt,'999,999,999,999')||' rows of completed runtime data which is within acceptable thresholds that were entered to run this Analyzer.<BR><BR>
This Gauge is merely a simple indicator about volume of completed Concurrent Request runtime data on '||g_rep_info('Instance')||', which can be adjusted when running this Analyzer.<br>
It displays GREEN if less than '||to_char(g_min_vol,'999,999,999,999')||' rows are found, ORANGE if less than '||to_char(g_max_vol,'999,999,999,999')||', and RED if over '||to_char(g_max_vol,'999,999,999,999')||' rows are found.',
p_solution => 'Clean up Concurrent Request Data and move the needle to green.<BR>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite.',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_CONC_REQ3');
debug('begin add_signature: CP1_FNDRSRUN');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_FNDRSRUN',
p_sig_sql => 'select app_short_name "TOP", subdir "SUBDIR", filename "FILENAME", version "VERSION"
from (
select *
from ad_files f, ad_file_versions fv
where f.FILE_ID=fv.FILE_ID
and f.FILENAME like ''FNDRSRUN%''
order by fv.version_segment1 desc,
fv.version_segment2 desc, fv.version_segment3 desc,
fv.version_segment4 desc, fv.version_segment5 desc,
fv.version_segment6 desc, fv.version_segment7 desc,
fv.version_segment8 desc, fv.version_segment9 desc,
fv.version_segment10 desc,
fv.translation_level desc)
where rownum = 1',
p_title => 'Identify the version of FNDRSRUN',
p_fail_condition => 'NRS',
p_problem_descr => 'There is no version for FNDRSRUN form.',
p_solution => '',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_FNDRSRUN');
debug('begin add_signature: CP1_ENV3');
add_signature(
p_sig_id => 'CP1_ENV3',
p_sig_sql => 'select VARIABLE_NAME, VALUE
from FND_ENV_CONTEXT
where CONCURRENT_PROCESS_ID = (select max(p.CONCURRENT_PROCESS_ID)
from fnd_concurrent_processes p, fnd_concurrent_queues u
WHERE p.concurrent_queue_id = u.concurrent_queue_id
AND p.queue_application_id = u.application_id
AND u.concurrent_queue_name = ''FNDICM'')
and VARIABLE_NAME in (''APPLLKOR'',''AF_CLASSPATH'',''AF_JLIB'',''AF_JRE_TOP'',
''AF_LD_LIBRARY_PATH'',''AFJSMARG'',''AFJVAPRG'',''APPLCSF'',''APPLDCP'',
''APPLFENV'',''APPLLOG'',''APPLORB'',''APPLORC'',''APPLOUT'',''APPLPTMP'',
''APPLTMP'',''APPS_JDBC_URL'',''CA_FILEIO_64'',''CLASSPATH'',
''CONTEXT_FILE'',''CONTEXT_NAME'',''DE_DISABLE_PLS_512'',''DISPLAY'',
''EVENT_10932'',''FND_TOP'',''FNDNAM'',''FNDSM_SCRIPT'',''HOSTNAME'',
''LD_LIBRARY_PATH'',''NLS_LANG'',''NLS_NUMERIC_CHARACTERS'',
''ORACLE_HOME'',''PLATFORM'',''PRINTER'',''REPORTS60_PATH'',
''REPORTS_CLASSPATH'',''REPORTS_NO_DUMMY_PRINTER'',''REPORTS_PATH'',
''REPORTS_POST'',''REPORTS_PRE'',''REPORTS_TMP'',''TK_PRINT_STATUS'',
''TK_PRINTER'',''TNS_ADMIN'',''TWO_TASK'',''XDO_TOP'',''XENVIRONMENT'')
order by VARIABLE_NAME',
p_title => 'Concurrent Processing Environment Variables',
p_fail_condition => 'RS',
p_problem_descr => 'The Concurrent Manager Environment for '||g_nodename||' may not be available. It is currently in "'||g_cp_status||'" status.',
p_solution => 'Concurrent Manager was last started on '||g_cp_start_date||', and last updated on '||g_last_update_date||'.<br>
The current Concurrent Manager logs are found :<br>
'||g_logfile_name||'.<br><br>Refer to [1355735.1] - Difference between APPLPTMP and APPLTMP Directories in EBS',
p_success_msg => 'There is a problem identifying the Concurrent Processing Environment Variables for '||g_nodename||'.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_ENV3');
debug('begin add_signature: CP4_RUN_ALONE_PROGRAMS2');
add_signature(
p_sig_id => 'CP4_RUN_ALONE_PROGRAMS2',
p_sig_sql => 'SELECT r.request_id "REQ ID", a.application_name "APPLICATION",
t.user_concurrent_program_name "PROGRAM", p.concurrent_program_name "SHORT NAME",
DECODE(p.execution_method_code, ''I'',''PL/SQL Concurrent Program'',''K'',''Java Concurrent Program'',
''P'',''Oracle*Reports Concurrent Program'',''Q'',''SQL*Plus Concurrent Program'') "EXECUTION METHOD",
DECODE(p.queue_method_code,''B'',''B=Yes'',''I'',''I=No'') "QUEUE METHOD", u.user_name "USER",
TO_CHAR(r.requested_start_date, ''DD-MON-RR HH24:MI:SS'') "STARTED",
r.is_sub_request "IS SUB REQUEST",
DECODE(r.PHASE_CODE, ''C'',''Completed'',''I'',''I=Inactive'',''P'',''P=Pending'',''R'',''R=Running'') "PHASE",
DECODE(r.STATUS_CODE, ''A'',''Waiting'',''B'',''B=Resuming'',''C'',''C=Normal'',
''D'',''D=Cancelled'',''E'',''E=Error'',''G'',''G=Warning'',
''H'',''H=On Hold'',''I'',''I=Normal'',''M'',''M=No Manager'',
''P'',''P=Scheduled'',''Q'',''Q=Standby'',''R'',''R=Normal'',
''S'',''S=Suspended'',''T'',''T=Terminating'',''U'',''U=Disabled'',
''W'',''W=Paused'',''X'',''X=Terminated'',''Z'',''Z=Waiting'') "STATUS"
FROM apps.fnd_concurrent_programs_tl t,
apps.fnd_concurrent_programs p, apps.fnd_application_tl a,
apps.fnd_concurrent_requests r,apps.fnd_languages l,
apps.fnd_user u
WHERE a.application_id = t.application_id
and r.concurrent_program_id = t.concurrent_program_id
and t.concurrent_program_id = p.concurrent_program_id
AND r.nls_language = l.nls_language
AND l.language_code = t.language
AND l.language_code = a.language
AND r.requested_by = u.user_id
and p.run_alone_flag = ''Y''',
p_title => 'Run Alone Programs',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_run_alone_cnt||' <strong>Run Alone</strong> Concurrent Programs defined in this '||g_rep_info('Instance')||' instance that are enabled, and currently there are '||g_run_alone_now_cnt||' running or scheduled to run via Concurrent Manager.',
p_solution => 'Concurrent "Run Alone" programs will cause a momentary "Inactive No Manager" and/or "Pending" status, because no program can run while a "Run Alone" program runs.<br><br> Check the above list of program(s) that may be causing any prolonged "Inactive No Manager" state.<br>
The "Run Alone" option should be used very sparingly and only with short / quick running programs, because it blocks all other programs while it is queued / running.
',
p_success_msg => 'There are '||g_run_alone_cnt||' <strong>Run Alone</strong> Concurrent Programs defined in this '||g_rep_info('Instance')||' instance, that are enabled, but currently none being run or scheduled to run via Concurrent Manager.<br><br>
It is possible to define a concurrent program to be "Run-Alone" or to be "Incompatible" with specific concurrent programs by editing the concurrent program''s definition using the
Concurrent Programs window.<br><br>
Program incompatibility and run-alone program definitions are enforced by the Conflict Resolution Manager (CRM).<br>
For more details see: Oracle E-Business Suite System Administrator''s Guide - Configuration - Concurrent Programs, page 6-65.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP4_RUN_ALONE_PROGRAMS2');
debug('begin add_signature: CP3_CPADV4');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV4',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME "QUEUE NAME", q.max_processes "MAX PROCESSES", q.running_processes "RUNNING", q.node_name "NODE1", q.node_name2 "NODE2",
p.concurrent_time_period_name "TIME PERIOD", qs.min_processes "MIN PROCESSES"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id and a.application_id = q.application_id
and qs.queue_application_id = q.application_id and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y'' and nvl(q.control_code,''X'') <> ''E'' and qs.min_processes >0 and q.manager_type = 1
and p.concurrent_time_period_name not in (''Weekend'',''Off-Peak AM'',''Off-Peak PM'')
order by qs.min_processes desc,q.concurrent_queue_name',
p_title => 'Total Target Processes for Request Managers Excluding Off-Hours',
p_fail_condition => 'RS',
p_problem_descr => 'Total Target Processes for Request Managers Excluding Off-Hours<br>
This identifies the total number of processes that can be run for a given concurrent manager. <br>
The greater the number of processes defined can impact increased Concurrent Processing loads. ',
p_solution => 'The resulting data is for review and confirmation by your teams, and serves as a baseline for comparison with later outputs above. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'There are no rows found for Total Target Processes for Request Managers Excluding Off-Hours',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV4');
debug('begin add_signature: CP2_CONCREQS2');
add_signature(
p_sig_id => 'CP2_CONCREQS2',
p_sig_sql => 'SELECT request_id "REQUEST ID", nvl(meaning, ''UNKNOWN'') "STATUS", user_concurrent_program_name "PROGRAM NAME",
to_char(actual_start_date, ''DD-MON-RR HH24:MI:SS'') "STARTED", decode(run_alone_flag, ''Y'', ''Yes'', ''No'') "RUN ALONE"
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv
WHERE phase_code = ''R'' AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code
AND fcr.concurrent_program_id = fcpv.concurrent_program_id AND fcr.program_application_id = fcpv.application_id
ORDER BY actual_start_date, request_id',
p_title => 'Running Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no concurrent requests currently running on this '||g_rep_info('Instance')||' instance.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently running on the system.<br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently running on the system.<br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP2_CONCREQS2');
debug('begin add_signature: CP1_PURGEREQS');
add_signature(
p_sig_id => 'CP1_PURGEREQS',
p_sig_sql => 'SELECT r.REQUEST_ID, u.user_name, r.PHASE_CODE, r.ACTUAL_START_DATE,
c.CONCURRENT_PROGRAM_NAME, p.USER_CONCURRENT_PROGRAM_NAME, r.ARGUMENT_TEXT,
r.RESUBMIT_INTERVAL, r.RESUBMIT_INTERVAL_UNIT_CODE, r.RESUBMIT_END_DATE
FROM fnd_concurrent_requests r, FND_CONCURRENT_PROGRAMS_TL p, fnd_concurrent_programs c, fnd_user u
WHERE r.CONCURRENT_PROGRAM_ID = p.CONCURRENT_PROGRAM_ID and r.requested_by = u.user_id
and p.CONCURRENT_PROGRAM_ID = c.CONCURRENT_PROGRAM_ID
and c.CONCURRENT_PROGRAM_NAME = ''FNDCPPUR''
AND p.language = ''US''
and r.ACTUAL_COMPLETION_DATE is null and r.PHASE_CODE in (''P'',''R'')
order by c.CONCURRENT_PROGRAM_NAME, r.ARGUMENT_TEXT',
p_title => 'Verify Purge and/or Manager Data Programs Scheduled to Run',
p_fail_condition => 'NRS',
p_problem_descr => '<b>There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, but no "Purge Concurrent Request and/or Manager Data" program (FNDCPPUR) scheduled or running</b>',
p_solution => 'Please Review Concurrent Processing purging status with your team.<br><br>
Run the concurrent program "Purge Concurrent Request and/or Manager Data" (FNDCPPUR) with "Entity" parameter as "ALL" for all requests, or for specific requests that have large volumes of purge eligible data as seen above. The last purge of Concurrent Request data completed on No Date info available for VISION.<br>
FNDCPPUR should be scheduled and run on a regular basis to avoid performance issues. Run the query behind the SQL SCRIPT button to get the complete list of purge eligible concurrent request data.<br><br>
Additionally, the following are very good methods to follow for optimizing the process:
<ul><li>Run the job during hours of low workload. Doing this after hours will lessen the contention on the tables from running against your daily processing.</li>
<li>To get the requests under control, run the FNDCPPUR program with Age=20 or Age=18 would be a good method. That means, all requests older than 18 or 20 days will be purged.</li>
<li>Once the requests are under control, run the FNDCPPUR program with Age=7 to maintain an efficient process. This would solely depend on the level of processing that is performed at your site</li></ul>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite<br>
[1095625.1] - Health Check Alert: Purge the eligible records from the FND_CONCURRENT_REQUESTS table<br><br>
<b>Note:</b> This section is only looking at the scheduled jobs in FND_CONCURRENT_REQUESTS table. Jobs scheduled using other tools (DBMS_JOBS, CONSUB, or PL/SQL, etc) are not reflected here, so keep this in mind.',
p_success_msg => '<b>There is a "Purge Concurrent Request and/or Manager Data" program (FNDCPPUR) scheduled or running on '||g_rep_info('Instance')||'.</b><br>
There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, and eligible for purging.<br><br>
Run the query behind the SQL SCRIPT button to get the complete list of purge eligible concurrent request data.<br><br>
Additionally, the following are very good methods to follow for optimizing the "Purge Concurrent Request and/or Manager Data" process:
<ul><li>Run the job during hours of low workload. Doing this after hours will lessen the contention on the tables from running against your daily processing.</li>
<li>To get the requests under control, run the FNDCPPUR program with Age=20 or Age=18 would be a good method. That means, all requests older than 18 or 20 days will be purged.</li>
<li>Once the requests are under control, run the FNDCPPUR program with Age=7 to maintain an efficient process. This would solely depend on the level of processing that is performed at your site</li></ul>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite<br>
[1095625.1] - Health Check Alert: Purge the eligible records from the FND_CONCURRENT_REQUESTS table<br><br>
<b>Note:</b> This section is only looking at the scheduled jobs in FND_CONCURRENT_REQUESTS table. Jobs scheduled using other tools (DBMS_JOBS, CONSUB, or PL/SQL, etc) are not reflected here, so keep this in mind.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_PURGEREQS');
debug('begin add_signature: CP2_PENDREQ');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_PENDREQ',
p_sig_sql => 'SELECT ''Pending'' "PHASE", meaning "STATUS", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "# REQUESTS"
FROM fnd_concurrent_requests, fnd_lookups
WHERE LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code AND phase_code = ''P''
GROUP BY meaning',
p_title => 'Total Pending Requests by Status Code',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Pending Requests currently found on this ''||g_rep_info(''Instance'')||'' instance.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently pending on the system. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently pending on the system. <br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_PENDREQ');
debug('begin add_signature: CP2_TOP_10_CONC_REQS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_TOP_10_CONC_REQS',
p_sig_sql => 'select u.user_name, cp.CONCURRENT_PROGRAM_ID "CP ID", cp.CONCURRENT_PROGRAM_NAME "SHORT NAME", cp.USER_CONCURRENT_PROGRAM_NAME "PROGRAM NAME",
''<div align="right">''||to_char(count(r.request_id),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests r, fnd_user u, fnd_concurrent_programs_vl cp
where r.requested_by = u.user_id
and r.CONCURRENT_PROGRAM_ID = cp.CONCURRENT_PROGRAM_ID
and u.user_name in (select user_name from (
select u.user_name, count(r.request_id)
from fnd_concurrent_requests r, fnd_user u
where r.requested_by = u.user_id
group by u.user_name
order by 2 desc)
where rownum < 11)
group by u.user_name, cp.CONCURRENT_PROGRAM_ID, cp.CONCURRENT_PROGRAM_NAME, cp.USER_CONCURRENT_PROGRAM_NAME
order by 5 desc',
p_title => 'Top 10 Users Running Concurrent Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'No Users are found to be running Concurrent Requests',
p_solution => 'Check the FND_CONCURRENT_REQUESTS table for data.',
p_success_msg => 'List of top 10 users that are running/scheduling Concurrent Requests and the Concurrent Programs they are running. This list is for performance review.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_TOP_10_CONC_REQS');
debug('begin add_signature: CP3_CPADV5');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV5',
p_sig_sql => 'SELECT q.CONCURRENT_QUEUE_NAME, q.USER_CONCURRENT_QUEUE_NAME, q.cache_size, qs.MAX_PROCESSES "ACTUAL", qs.min_processes "TARGET"
from apps.fnd_concurrent_queues_vl q, apps.fnd_product_installations i, apps.fnd_application_vl a,
apps.fnd_concurrent_time_periods p, apps.fnd_concurrent_queue_size qs
where i.application_id = q.application_id and a.application_id = q.application_id
and qs.queue_application_id = q.application_id and qs.concurrent_queue_id = q.concurrent_queue_id
and qs.period_application_id = p.application_id and qs.concurrent_time_period_id = p.concurrent_time_period_id
and q.enabled_flag = ''Y'' and nvl(q.control_code,''X'') <> ''E'' and qs.min_processes >0 and q.manager_type = 1
group by q.CONCURRENT_QUEUE_NAME, q.USER_CONCURRENT_QUEUE_NAME, q.cache_size, qs.min_processes, qs.MAX_PROCESSES
having decode(max(qs.min_processes),1,2,max(qs.min_processes)) > nvl(q.cache_size,1)
order by q.concurrent_queue_name',
p_title => 'Display Managers Cache Size, Actual & Target Processes',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Concurrent Queue or Managers defined in this instance.',
p_solution => 'A Managers cache size reflects the number of requests a manager adds to its queue, each time it reads available requests to run. <br>
For example, if a manager has 1 target process and a cache value of 3, it will read 3 requests and run those requests before returning to cache additional requests.
<br><br>
Tip: Enter a value of 1 when defining a manager that runs long, time-consuming jobs, and a value of 3 or 4 for managers that run small, quick jobs. <BR><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices',
p_success_msg => 'Please review the list of Concurrent Managers for correct Cache Size and Actual & Target Processes.<br><br>
A Managers cache size reflects the number of requests a manager adds to its queue, each time it reads available requests to run. <br>
For example, if a manager has 1 target process and a cache value of 3, it will read 3 requests and run those requests before returning to cache additional requests.
<br><br>
Tip: Enter a value of 1 when defining a manager that runs long, time-consuming jobs, and a value of 3 or 4 for managers that run small, quick jobs. <BR><br>
For more information refer to [1373727.1] - FAQ: EBS Concurrent processing Performance and Best Practices',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV5');
debug('begin add_signature: CP1_PURGELIGIBLE');
add_signature(
p_sig_id => 'CP1_PURGELIGIBLE',
p_sig_sql => 'select p.USER_CONCURRENT_PROGRAM_NAME, decode(r.phase_code,''C'',''Complete'') STATUS,
''<div align="right">''||to_char(count(r.request_id),''999,999,999,999'')||''</div>'' "COUNT"
FROM fnd_concurrent_requests r, FND_CONCURRENT_PROGRAMS_TL p
WHERE r.CONCURRENT_PROGRAM_ID = p.CONCURRENT_PROGRAM_ID
and r.phase_code=''C''
and p.language = ''US''
group by p.USER_CONCURRENT_PROGRAM_NAME, r.phase_code
order by count(r.request_id) desc',
p_title => 'Total Purge Eligible Records in FND_CONCURRENT_REQUESTS',
p_fail_condition => 'RS',
p_problem_descr => 'There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, and eligible for purging.',
p_solution => 'Review Concurrent Processing purging status with your team.<br><br>
Run the concurrrent program "Purge Concurrent Request and/or Manager Data" (FNDCPPUR) with "Entity" parameter as "ALL" for all requests, or for specific requests that have large volumes of purge eligible data as seen above. The last purge of Concurrent Request data completed on No Date info available for VISION.<br><br>
FNDCPPUR should be scheduled and run on a regular basis to avoid performance issues. Run the query behind the SQL SCRIPT button to get the complete list of purge eligible concurrent request data.<br><br>
For more information please review:<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite<br>
[1095625.1] - Health Check Alert: Purge the eligible records from the FND_CONCURRENT_REQUESTS table<br><br>
<b>Note:</b> This section is only looking at the scheduled jobs in FND_CONCURRENT_REQUESTS table. Jobs scheduled using other tools (DBMS_JOBS, CONSUB, or PL/SQL, etc) are not reflected here, so keep this in mind.',
p_success_msg => 'There are a total of '||to_char(g_reqid_cnt,'999,999,999,999')||' records in FND_CONCURRENT_REQUESTS that are completed, and eligible for purging.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_PURGELIGIBLE');
debug('begin add_signature: CP1_INVALIDS_FND_LOW');
add_signature(
p_sig_id => 'CP1_INVALIDS_FND_LOW',
p_sig_sql => 'select d.owner, d.object_name, d.object_type, d.status
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'')
and d.object_name like ''FND%''',
p_title => 'Check for Invalid FND Objects',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_fnd_invalid_cnt||' Invalid FND Objects found in your instance.',
p_solution => 'The above list summarizes quickly what FND Objects are INVALID.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
FND Objects are very important, as this control Concurrent Processing in particular.<br><br>
<br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
Debug and Validate Invalid Objects [300056.1] for more information.',
p_success_msg => 'Nice Work!!
There are no Invalid FND Objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_FND_LOW');
debug('begin add_signature: CP2_PENDING_REQUESTS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_PENDING_REQUESTS',
p_sig_sql => 'SELECT ''Pending Requests Regularly Scheduled:'' "PENDING REQUESTS",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNTS"
from fnd_concurrent_requests
WHERE (requested_start_date > sysdate OR status_code = ''P'') AND phase_code = ''P''
union
SELECT ''Pending Requests Non Regularly Scheduled:'' "Pending Requests",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests
WHERE requested_start_date <= sysdate AND status_code != ''P'' AND phase_code = ''P''
union
SELECT ''Pending Requests On Hold:'' "Pending Requests",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests
WHERE hold_flag = ''Y'' AND phase_code = ''P''
union
SELECT ''Pending Requests Not On Hold:'' "Pending Requests",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT"
from fnd_concurrent_requests
WHERE hold_flag != ''Y'' AND phase_code = ''P''',
p_title => 'Types of Pending Requests and Counts',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows found for pending requests.
',
p_solution => 'Ensure that Concurrent Manager is up and running.',
p_success_msg => 'Displays a list a Pending Requests for : <br>
<ul>
<li>Pending Requests Regularly Scheduled:</li>
<li>Pending Requests Non Regularly Scheduled:</li>
<li>Pending Requests On Hold:</li>
<li>Pending Requests Not On Hold:</li>
</ul>',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_PENDING_REQUESTS');
debug('begin add_signature: CP3_CPADV11');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV11',
p_sig_sql => 'SELECT q.concurrent_queue_name "CONCURRENT QUEUE NAME",
''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT",
''<div align="right">''||to_char(round(sum(r.actual_completion_date - r.actual_start_date) * 24, 2),''999,999,999,999.99'')||''</div>'' "ELAPSED",
''<div align="right">''||to_char(round(avg(r.actual_completion_date - r.actual_start_date) * 24, 2),''999,999,999,999.99'')||''</div>'' "AVG",
''<div align="right">''||to_char(round(stddev(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 24, 2),''999,999,999,999.99'')||''</div>'' "WSTDDEV",
''<div align="right">''||to_char(round(sum(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 24, 2),''999,999,999,999.99'')||''</div>'' "WAITED",
''<div align="right">''||to_char(round(avg(actual_start_date - greatest(r.requested_start_date,r.request_date)) * 24, 2),''999,999,999,999.99'')||''</div>'' "AVGWAIT"
from apps.fnd_concurrent_programs p, apps.fnd_concurrent_requests r, apps.fnd_concurrent_queues q,
apps.fnd_concurrent_processes p
where r.program_application_id = p.application_id and r.concurrent_program_id = p.concurrent_program_id
and r.phase_code=''C'' -- completed and r.status_code in (''C'',''G'') -- completed normal or with warning
and r.controlling_manager=p.concurrent_process_id and q.concurrent_queue_id=p.concurrent_queue_id
and r.concurrent_program_id=p.concurrent_program_id
group by q.concurrent_queue_name',
p_title => 'Concurrent Manager Request Summary by Manager',
p_fail_condition => 'RS',
p_problem_descr => 'These are the concurrent managers being used, and can be compared with the actual concurrent managers allocated at startup. <br>
This only considers requests with completion status of normal/warning.',
p_solution => 'Please consider deactivation of any managers which are consistently not being used, and are listed as Active/Enabled above.',
p_success_msg => 'There are no concurrent managers are being used, and can be compared with the actual concurrent managers allocated at startup.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV11');
debug('begin add_signature: CP1_INVALIDS_ALL_HIGH');
add_signature(
p_sig_id => 'CP1_INVALIDS_ALL_HIGH',
p_sig_sql => 'select d.owner, d.object_type, substr(d.object_name,0,3)||''%...'' "OBJECT_NAME", ''<div align="right">''||to_char(count(d.status),''999,999,999,999'')||''</div>'' "COUNT"
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'',''APPLSYSPUB'',''CTXSYS'',''PUBLIC'',''SYS'',''SYSTEM'')
group by d.owner, d.object_type, substr(d.object_name,0,3)
order by 4 desc',
p_title => 'Check for Invalid Objects All',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_apps_invalid_cnt||' Invalid Objects found in your E-Business Suite instance.',
p_solution => 'The above list summarizes quickly what products the INVALID objects belong to.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
We next check if any belong to FND, as they control Concurrent Processing in particular.<br>
Consider running ADADMIN and compiling the entire APPS Schema.<br><br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br><br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
Troubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work !!!
There are no invalid objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_ALL_HIGH');
debug('begin add_signature: CP1_NODE_INFO');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_NODE_INFO',
p_sig_sql => 'SELECT substr(fn.node_name, 1, 20) "NODE_NAME", flkup.meaning "PLATFORM", fn.node_mode, fn.server_address, substr(fn.host, 1, 15) "HOST",
substr(fn.domain, 1, 20) "DOMAIN", substr(fn.support_cp, 1, 3) "CP", substr(fn.support_web, 1, 3) "WEB",
substr(fn.support_admin, 1, 3) "ADMIN", substr(fn.support_forms, 1, 3) "FORMS",
substr(fn.SUPPORT_DB, 1, 3) "DB", substr(fn.VIRTUAL_IP, 1, 30) "VIRTUAL_IP"
from fnd_nodes fn, fnd_lookups flkup
where flkup.lookup_type=''PLATFORM''
and fn.platform_code=flkup.lookup_code',
p_title => 'Instance Node Details',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the EBS Instance Information',
p_solution => '',
p_success_msg => '',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_NODE_INFO');
debug('begin add_signature: CP4_STD_MGR');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Standard Manager Analysis',
p_fail_condition => 'NRS',
p_problem_descr => 'Standard Manager is not running.',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed
with a "Included" Specialization" rule--"Excluded" is ok.
(Responsibility = System Administrator, Navigate --> Concurrent:
Manager: Define)
Any changes requires that you "Verify" the Internal Concurrent Manager
on the "Administer Concurrent Managers" screen.
',
p_success_msg => 'Standard Manager is running.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR');
debug('begin add_signature: CP2_SCHEDULEDREQ');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_SCHEDULEDREQ',
p_sig_sql => 'SELECT request_id REQ_ID, fu.user_name REQUESTED_BY, nvl(meaning, ''UNKNOWN'') status, user_concurrent_program_name PROGRAM_NAME,
to_char(request_date, ''DD-MON-RR HH24:MI:SS'') SUBMITTED, to_char(requested_start_date, ''DD-MON-RR HH24:MI:SS'') START_DATE
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv, fnd_user fu
WHERE fcr.requested_by = fu.user_id
and phase_code = ''P'' AND (fcr.requested_start_date >= sysdate OR status_code = ''P'')
AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code AND fcr.concurrent_program_id = fcpv.concurrent_program_id
AND fcr.program_application_id = fcpv.application_id
ORDER BY requested_start_date',
p_title => 'Listing of Scheduled Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Scheduled Requests',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system.<br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [213021.1] - Concurrent Processing (CP) / APPS Reporting Scripts',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system.<br>
Otherwise there is no immediate action required.<br><br>
For more information refer to [213021.1] - Concurrent Processing (CP) / APPS Reporting Scripts',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_SCHEDULEDREQ');
debug('begin add_signature: CP1_PARAMETERS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_PARAMETERS',
p_sig_sql => 'SELECT name, value
from v$parameter
where upper(name) in (''AQ_TM_PROCESSES'',''JOB_QUEUE_PROCESSES'',''JOB_QUEUE_INTERVAL'',
''UTL_FILE_DIR'',''NLS_LANGUAGE'',''NLS_TERRITORY'',
''CPU_COUNT'',''PARALLEL_THREADS_PER_CPU'')
UNION
select parameter, value from v$nls_parameters where parameter in (''NLS_CHARACTERSET'')',
p_title => 'Concurrent Processing Database Parameter Settings',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the Concurrent Processing Database Parameter Settings',
p_solution => 'Verify the Concurrent Processing Database Parameter Settings are set',
p_success_msg => 'For more information refer to [396009.1] - Database Initialization Parameters for Oracle E-Business Suite Release 12',
p_print_condition => nvl('SUCCESS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_PARAMETERS');
debug('begin add_signature: CP3_CPADV12');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV12',
p_sig_sql => 'SELECT a.CONCURRENT_QUEUE_ID "Queue ID", a.QUEUE_APPLICATION_ID "Apps ID",
b.user_CONCURRENT_QUEUE_NAME "Concurrent Manager", decode(a.PHASE_CODE, ''P'',''PENDING'',''R'',''Running'') Phase,count(1)
FROM FND_CONCURRENT_WORKER_REQUESTS a, fnd_concurrent_queues_vl b
WHERE (a.Phase_Code = ''P'' or a.Phase_Code = ''R'') and a.hold_flag != ''Y'' and a.Requested_Start_Date <= SYSDATE
AND ('''' IS NULL OR ('''' = ''B'' AND a.PHASE_CODE = ''R'' AND a.STATUS_CODE IN (''I'', ''Q''))) and ''1'' in (0,1,4)
And a.concurrent_queue_id=b.concurrent_queue_id
group by a.CONCURRENT_QUEUE_ID, a.QUEUE_APPLICATION_ID, b.user_CONCURRENT_QUEUE_NAME, a.PHASE_CODE
order by 1',
p_title => 'Check Manager Queues for Pending Requests',
p_fail_condition => 'RS',
p_problem_descr => 'There are concurrent requests that are in a Pending state. ',
p_solution => 'The output above is for review and confirmation by your team. Typically when there are requests pending, the number should be the same as the number of actual processes. <br>
However if there are no pending requests or requests were just submitted, the number of requests running may be less than the number of actual processes. <br>
Also note if a concurrent program is incompatible with another program currently running, it does not start until the incompatible program has completed. In this case, the number of requests running may be less than number of actual processes even when there are requests pending.',
p_success_msg => 'There are no concurrent requests that are in a Pending state.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV12');
debug('begin add_signature: CP1_INVALIDS_FND_HIGH');
add_signature(
p_sig_id => 'CP1_INVALIDS_FND_HIGH',
p_sig_sql => 'select d.owner, d.object_name, d.object_type, d.status
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'')
and d.object_name like ''FND%''',
p_title => 'Check for Invalid FND Objects',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_fnd_invalid_cnt||' Invalid FND Objects found in your instance.',
p_solution => 'The above list summarizes quickly what FND Objects are INVALID.<br><br>
It is recommended that you re-compile these in order to make them VALID again.<br>
FND Objects are very important, as this control Concurrent Processing in particular.<br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br><br>
Please review the following :<br>
EBS Invalid Object Utility [2214169.1] and<br>
roubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work!!
There are no Invalid FND Objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_FND_HIGH');
debug('begin add_signature: CP4_STD_MGR_INCL');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_INCL',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.include_flag = ''I''
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Standard Manager has an INCLUDE defined',
p_fail_condition => 'RS',
p_problem_descr => 'The Standard concurrent manager has been altered with an INCLUDE. <br>
',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule--"Excluded" is ok. <br>
If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs.
<br><br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)<br>
Any changes requires that you "Verify" the Internal Concurrent Manager on the "Administer Concurrent Managers" screen.<br><br>
When changing manager specialization or program incompatibilities, remember to "Verify" the ICM on the Administer Concurrent Manager form or bounce (restart) the concurrent managers for the changes to take effect.
',
p_success_msg => 'No rows were selected so I am calling this a success.',
p_print_condition => nvl('FAILURE','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_INCL');
debug('begin add_signature: CP_STD_MGR_INCLUDES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP_STD_MGR_INCLUDES',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and c.include_flag = ''I''
and a.language=t.language',
p_title => 'Standard Manager INCLUDES',
p_fail_condition => 'RS',
p_problem_descr => 'The Standard Manager has an INCLUDE!!
',
p_solution => 'You should not alter the definition of the Standard concurrent manager. <br>
If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs.
<br><br>
Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization rule--"Excluded" is ok. <br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)<br>
Any changes requires that you "Verify" the Internal Concurrent Manager on the "Administer Concurrent Managers" screen.
When changing manager specialization or program incompatibilities, remember to "Verify" the ICM on the Administer Concurrent Manager form or bounce (restart) the concurrent managers for the changes to take effect.
',
p_success_msg => 'There are no INCLUDE rules assigned to the Standard Manager.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP_STD_MGR_INCLUDES');
debug('begin add_signature: CP3_CPADV17');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_CPADV17',
p_sig_sql => 'SELECT v.concurrent_queue_name "CONCURRENT QUEUE NAME", v.concurrent_queue_id "QUEUE ID",
v.user_concurrent_queue_name "NAME", v.max_processes "TARGET", v.running_processes "ACTUAL",
v.control_code "CODE", v.target_node "TARGET NODE",
TO_CHAR(v.last_update_date, ''DD-MON-RR HH24:MI:SS'') "LAST UPDATE",
v.node_name "NODE NAME", s.service_parameters "SERVICE PARAMETERS",
c.developer_parameters "DEVELOPER PARAMETERS"
FROM fnd_concurrent_queues_vl v, fnd_concurrent_queue_size s,
fnd_cp_services c
WHERE v.concurrent_queue_name like ''FNDCPOPP%''
and v.concurrent_queue_id = s.concurrent_queue_id
and v.manager_type = c.service_id',
p_title => 'Check the Configuration of OPP',
p_fail_condition => 'RS',
p_problem_descr => 'OPP is currently configured, identifying the: Service ID, Service Handle, and Parameters used.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your current OPP configuration. <br>
You can cross reference the collected information with existing notes on OPP best practices :<br>
[1399454.1] - Tuning Output Post Processor (OPP) to Improve Performance<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite',
p_success_msg => 'OPP is currently not configured.<br><br>
Please check existing notes on OPP best practices :<br>
[1399454.1] - Tuning Output Post Processor (OPP) to Improve Performance<br>
[1057802.1] - Concurrent Processing - Best Practices for Performance for Concurrent Managers in E-Business Suite',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_CPADV17');
debug('begin add_signature: CP1_INVALIDS_BY_SCHEMA');
add_signature(
p_sig_id => 'CP1_INVALIDS_BY_SCHEMA',
p_sig_sql => 'select d.owner,
''<div align="right">''||to_char(count(d.status),''999,999,999,999'')||''</div>'' "COUNT"
from dba_objects d
where d.status = ''INVALID''
and d.owner in (''APPS'',''APPLSYS'',''APPLSYSPUB'',''CTXSYS'',''PUBLIC'',''SYS'',''SYSTEM'')
group by d.owner',
p_title => 'There are '||g_apps_invalid_cnt||' Invalid Objects Found',
p_fail_condition => 'RS',
p_problem_descr => 'There are '||g_apps_invalid_cnt||' Invalid Objects found in your instance schemas.',
p_solution => 'The above list summarizes quickly what schemas the INVALID objects belong to.<br><br>
It is recommended that you drill down into each schema and re-compile these in order to make them VALID again.<br>
We also check if any belong to FND, as this control Concurrent Processing in particular.<br>
Consider running ADADMIN and compiling the entire APPS Schema, or just for the Product in question.<br><br>
In order to avoid dependencies issues and errors, EBS customers should always use the adamin tool instead of manually compiling EBS / Apps database objects.<br>
Please follow Troubleshooting Guide - invalid objects in the E-Business Suite Environment 11i and 12 [1325394.1] for more information.',
p_success_msg => 'Nice Work !!!
There are no invalid objects found on your instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','Y')
);
l_info.delete;debug('end add_signature: CP1_INVALIDS_BY_SCHEMA');
debug('begin add_signature: CP2_PENDREQHOLD');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_PENDREQHOLD',
p_sig_sql => 'SELECT request_id "REQ ID", nvl(meaning, ''UNKNOWN'') "STATUS", user_concurrent_program_name "PROGRAM NAME",
to_char(request_date, ''DD-MON-RR HH24:MI:SS'') "SUBMITTED"
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv
WHERE phase_code = ''P'' AND hold_flag = ''Y'' AND fcr.requested_start_date <= sysdate
AND status_code != ''P'' AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code
AND fcr.concurrent_program_id = fcpv.concurrent_program_id AND fcr.program_application_id = fcpv.application_id
ORDER BY request_date, request_id',
p_title => 'Listing of Pending Requests on Hold',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Pending Requests on Hold and wating to be run',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system. <br>
Otherwise there is no immediate action required.<br>
To get a complete list of Pending Requests on Hold including the Request ID, run the query behind the SQL SCRIPT button.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of Pending Requests on Hold and wating to be run. <br>
Otherwise there is no immediate action required.<br>
To get a complete list of Pending Requests on Hold including the Request ID, run the query behind the SQL SCRIPT button.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_PENDREQHOLD');
debug('begin add_signature: CP2_SCHEDULEDREQ2');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_SCHEDULEDREQ2',
p_sig_sql => 'SELECT request_id id, nvl(meaning, ''UNKNOWN'') status, user_concurrent_program_name pname,
to_char(request_date, ''DD-MON-RR HH24:MI:SS'') submitd, to_char(requested_start_date, ''DD-MON-RR HH24:MI:SS'') requestd
FROM fnd_concurrent_requests fcr, fnd_lookups fl, fnd_concurrent_programs_vl fcpv
WHERE phase_code = ''P'' AND hold_flag = ''N'' AND fcr.requested_start_date <= sysdate
AND status_code != ''P'' AND LOOKUP_TYPE = ''CP_STATUS_CODE'' AND lookup_code = status_code
AND fcr.concurrent_program_id = fcpv.concurrent_program_id AND fcr.program_application_id = fcpv.application_id
ORDER BY request_date, request_id',
p_title => 'Listing of Scheduled Requests',
p_fail_condition => 'NRS',
p_problem_descr => 'There are not scheduled requests waiting to run that are currently not on hold.',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of whats currently scheduled on the system. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of Pending Requests waiting to run that are currently not on hold.. <br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_SCHEDULEDREQ2');
debug('begin add_signature: CP4_STD_MGR_VALIDATE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_STD_MGR_VALIDATE',
p_sig_sql => 'select decode(c.include_flag,''E'',''Exclude'',''I'',''Include'') "INCLUDE_FLAG",
decode (c.type_code,''C'',''Combined Rule'',''L'',''Logical DB'',
''O'',''Oracle ID'',''P'',''Program'',''R'',''Request Type'',''U'',''User'') "TYPE_CODE",
a.application_name, t.user_concurrent_program_name
from fnd_concurrent_queue_content c, fnd_concurrent_programs p,
fnd_concurrent_programs_tl t, fnd_application_tl a
where c.concurrent_queue_id = 0
and c.type_application_id = p.application_id
and c.type_id = p.concurrent_program_id
and p.application_id = a.application_id
and t.concurrent_program_id = p.concurrent_program_id
and a.language=t.language',
p_title => 'Validate Standard Manager Definition',
p_fail_condition => 'RS',
p_problem_descr => 'You should not alter the definition of the Standard concurrent manager. <br>
',
p_solution => 'Ensure that the Standard Manager''s definition has not been changed with a "Included" Specialization" rule--"Excluded" is ok. <br>
If you do, and you have not defined additional managers to accept your requests, some programs may not run. Use the Standard manager as a safety net, a manager who is always available to run any request. Define additional managers to handle your installation site''s specific needs.
<br><br>
(Responsibility = System Administrator, Navigate --> Concurrent: Manager: Define)<br>
Any changes requires that you "Verify" the Internal Concurrent Manager on the "Administer Concurrent Managers" screen.<br><br>
When changing manager specialization or program incompatibilities, remember to "Verify" the ICM on the Administer Concurrent Manager form or bounce (restart) the concurrent managers for the changes to take effect.
',
p_success_msg => 'No rows were selected so I am calling this a success.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_STD_MGR_VALIDATE');
debug('begin add_signature: CP3_FND_CP_GSM_OPP_AQTBL');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP3_FND_CP_GSM_OPP_AQTBL',
p_sig_sql => 'select ''AQ$_FND_CP_GSM_OPP_AQTBL'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.FND_CP_GSM_OPP_AQTBL
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_S'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_S
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_T'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_T
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_T'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_T
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_H'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_H
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_I'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_I
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_I'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_I
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_G'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_G
union
select ''AQ$_FND_CP_GSM_OPP_AQTBL_L'' "NAME", ''<div align="right">''||to_char(count(*),''999,999,999,999'')||''</div>'' "COUNT" from applsys.AQ$_FND_CP_GSM_OPP_AQTBL_L',
p_title => 'Status of AQ$_FND_CP_GSM_OPP_AQTBL tables',
p_fail_condition => '[COUNT] > [500]',
p_problem_descr => '<b>The AQ$_FND_CP_GSM_OPP_AQTBL table has many rows</b><br>
AQs tables are used to look for "subscriptions" by FNDSMs. <br>That is, when ICM calls for FNDSM to start, they "subscribe" to this queue to identify its status. The time taking for the process cleanup prior to the ICM starting up the regular CMs is correlated to the number of processes that were not stopped cleanly. In case of un-clean shutdown, the process to restart will be longer as manager spends extra cycles to perform housekeeping tasks.',
p_solution => '<ul><li>It is highly recommended to always ensure the clean shutdown of the concurrent managers.</li>
<li>The Purge Concurrent Request and/or Manager Data Program request should be run periodically, however, it does not Purge AQ Tables.<br>
For maintaining a healthy level of records in FND_CONCURRENT_REQUESTS instead of running ''Purge Concurrent Program'' with the same parameters for all the applications, try running it for different applications depending on the number of days the data should be kept for.</li>
<li>It is recommended to schedule a cron job to query records in APPLSYS.FND_CP_GSM_OPP_AQTBL to monitor it and use DBMS_AQADM.PURGE_QUEUE_TABLE to purge the table as needed.</li>
<li>Follow the steps outlined in <b>[1156523.1] - <i>How To Purge FND_AQ Tables</i></b> on how to purge the FND_CP_GSM_OPP_AQTBL table manually to clean up the associated tables and indexes.</li></ul>',
p_success_msg => 'The AQ$_FND_CP_GSM_OPP_AQTBL table counts look fine.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP3_FND_CP_GSM_OPP_AQTBL');
debug('begin add_signature: CP1_PROFILES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_PROFILES',
p_sig_sql => 'SELECT t.PROFILE_OPTION_ID "PROFILE OPTION ID", t.PROFILE_OPTION_NAME "NAME", z.language "LANG", z.USER_PROFILE_OPTION_NAME "DISPLAY NAME",
v.PROFILE_OPTION_VALUE "VALUE", z.DESCRIPTION
from fnd_profile_options t, fnd_profile_option_values v, fnd_profile_options_tl z
where (v.PROFILE_OPTION_ID (+) = t.PROFILE_OPTION_ID)
and (v.level_id = 10001)
and (z.PROFILE_OPTION_NAME = t.PROFILE_OPTION_NAME)
and (z.language = ''US'')
and (t.PROFILE_OPTION_NAME in (''CONC_GSM_ENABLED'',''CONC_PP_RESPONSE_TIMEOUT'',''CONC_TM_TRANSPORT_TYPE'',''GUEST_USER_PWD'',
''AFLOG_ENABLED'',''AFLOG_FILENAME'',''AFLOG_LEVEL'',''AFLOG_BUFFER_MODE'',''AFLOG_MODULE'',
''FND_FWK_COMPATIBILITY_MODE'',''FND_VALIDATION_LEVEL'',''FND_MIGRATED_TO_JRAD'',''AMPOOL_ENABLED'',
''CONC_PP_PROCESS_TIMEOUT'',''CONC_DEBUG'',''CONC_COPIES'',''CONC_FORCE_LOCAL_OUTPUT_MODE'',''CONC_HOLD'',
''CONC_CD_ID'',''CONC_PMON_METHOD'',''CONC_PP_INIT_DELAY'',''CONC_PRINT_WARNING'',''CONC_REPORT_ACCESS_LEVEL'',
''CONC_REQUEST_LIMIT'',''CONC_SINGLE_THREAD'',''CONC_TOKEN_TIMEOUT'',''CONC_VALIDATE_SUBMISSION'',
''FND_CONC_ALLOW_DEBUG'',''CP_INSTANCE_CHECK'',''FND_NATIVE_CLIENT_ENCODING'',''ICX_CLIENT_IANA_ENCODING'',
''FS_SVC_PREFIX'',''FS_MAX_TRANS'',''FND_SMTP_HOST'',''FND_SMTP_PORT'',''CONC_FORCE_LOCAL_OUTPUT_FILE_MODE'',
''CONC_DATE_INCREMENT_OPTION'',''FS_DELETE'',''FS_ENABLED'',''FS_MAX_TRANS'',''EDITOR_PS'',''FNDCPVWR_FONT_SIZE'',
''FS_MIME_PDF'',''FS_MIME_XML''))
order by t.PROFILE_OPTION_NAME',
p_title => 'E-Business Suite Profile Settings',
p_fail_condition => 'NRS',
p_problem_descr => 'There is a problem identifying the E-Business Suite Profile Settings',
p_solution => 'Verify the E-Business Suite Profile Settings',
p_success_msg => 'E-Business Suite Profile Settings',
p_print_condition => nvl('SUCCESS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_PROFILES');
debug('begin add_signature: CP4_XDO_SETTINGS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP4_XDO_SETTINGS',
p_sig_sql => 'select property_code "PROPERTY CODE", value, config_level "CONFIG LEVEL", data_source_code "DATA SOURCE CODE", template_code "TEMPLATE CODE", application_short_name "APP SHORT NAME", last_update_date "LAST UPDATE"
from XDO_CONFIG_VALUES order by property_code',
p_title => 'XDO Settings',
p_fail_condition => 'NRS',
p_problem_descr => 'No XDO Settings for this instance.',
p_solution => 'Need a solution here.',
p_success_msg => 'XDO Settings have been found on this instance.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP4_XDO_SETTINGS');
debug('begin add_signature: CP_STD_MGR_LONG_RUN');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP_STD_MGR_LONG_RUN',
p_sig_sql => 'SELECT r.request_id "REQ ID", a.application_name "APPLICATION",
t.user_concurrent_program_name "PROGRAM", p.concurrent_program_name "SHORT NAME",
DECODE(p.execution_method_code, ''I'',''PL/SQL Concurrent Program'',''K'',''Java Concurrent Program'',
''P'',''Oracle*Reports Concurrent Program'',''Q'',''SQL*Plus Concurrent Program'') "EXECUTION METHOD",
DECODE(p.queue_method_code,''B'',''B=Yes'',''I'',''I=No'') "QUEUE METHOD", u.user_name "USER",
TO_CHAR(r.requested_start_date, ''DD-MON-RR HH24:MI:SS'') "STARTED",
r.is_sub_request "IS SUB REQUEST",
DECODE(r.PHASE_CODE, ''C'',''Completed'',''I'',''I=Inactive'',''P'',''P=Pending'',''R'',''R=Running'') "PHASE",
DECODE(r.STATUS_CODE, ''A'',''Waiting'',''B'',''B=Resuming'',''C'',''C=Normal'',
''D'',''D=Cancelled'',''E'',''E=Error'',''G'',''G=Warning'',
''H'',''H=On Hold'',''I'',''I=Normal'',''M'',''M=No Manager'',
''P'',''P=Scheduled'',''Q'',''Q=Standby'',''R'',''R=Normal'',
''S'',''S=Suspended'',''T'',''T=Terminating'',''U'',''U=Disabled'',
''W'',''W=Paused'',''X'',''X=Terminated'',''Z'',''Z=Waiting'') "STATUS"
FROM apps.fnd_concurrent_programs_tl t,
apps.fnd_concurrent_programs p, apps.fnd_application_tl a,
apps.fnd_concurrent_requests r,apps.fnd_languages l,
apps.fnd_user u
WHERE a.application_id = t.application_id
and r.concurrent_program_id = t.concurrent_program_id
and t.concurrent_program_id = p.concurrent_program_id
AND r.nls_language = l.nls_language
AND l.language_code = t.language
AND l.language_code = a.language
AND r.requested_by = u.user_id
and p.run_alone_flag = ''Y''',
p_title => 'Long Running Programs',
p_fail_condition => 'RS',
p_problem_descr => 'This is my Warning message because rows were detected
<br><br>
"Run Alone" programs will cause a momentary "Inactive No Manager" and/or "Pending" status, because no program can run while a "Run Alone" program runs. With the following SQL, check what program(s) are causing the prolonged "Inactive No Manager" state.
',
p_solution => 'My Warning solution
<br><br>
The "Run Alone" option should be used very sparingly and only with short / quick running programs, because it block all other programs while it is queued / running.
',
p_success_msg => 'No rows were found so this is a success, meaning no long running programs are found.???',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP_STD_MGR_LONG_RUN');
debug('begin add_signature: CP1_FND_FILE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP1_FND_FILE',
p_sig_sql => 'SELECT name, value
FROM v$parameter
WHERE name = ''utl_file_dir''',
p_title => 'Check FND_FILE Setup',
p_fail_condition => 'NRS',
p_problem_descr => 'The FND_FILE Setup is not enabled.',
p_solution => 'Need to correct this<br>Please review [210062.1] - Concurrent Processing - Generic Service Management (GSM) in Oracle Applications, for more information.',
p_success_msg => '<b>FND_FILE Setup is enabled as expected.</b><br>
For more information, please review [261693.1] - Concurrent Processing - Troubleshooting Concurrent Request ORA-20100 errors in the request logs.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('E','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP1_FND_FILE');
debug('begin add_signature: CP2_LASTMONDAILY');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_LASTMONDAILY',
p_sig_sql => 'SELECT trunc(REQUESTED_START_DATE) "REQUESTED START DATE", ''<div align="right">''||to_char(count(request_id),''999,999,999,999'')||''</div>'' "COUNTS"
FROM FND_CONCURRENT_REQUESTS
WHERE REQUESTED_START_DATE BETWEEN sysdate-30 AND sysdate
group by rollup(trunc(REQUESTED_START_DATE))',
p_title => 'Volume of Daily Concurrent Requests for Last Month',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows showing Volume of Daily Concurrent Requests for Last Month',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline of your average monthly throughput, and identify any spikes or drops. <br>
Otherwise there is no immediate action required.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline of your average monthly throughput, and identify any spikes or drops. <br>
Otherwise there is no immediate action required.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_LASTMONDAILY');
debug('begin add_signature: BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE',
p_sig_sql => 'select
b.user_profile_option_name profile_name
, a.profile_option_name profile_short_name
, decode(to_char(c.level_id),''10001'',''Site''
,''10002'',''Application''
,''10003'',''Responsibility''
,''10004'',''User''
,''Unknown'') Level_type
, decode(to_char(c.level_id),''10001'',''Site''
,''10002'',nvl(h.application_short_name,to_char(c.level_value))
,''10003'',nvl(g.responsibility_name,to_char(c.level_value))
,''10004'',nvl(e.user_name,to_char(c.level_value))
,''Unknown'') level_value
, c.PROFILE_OPTION_VALUE profile_value
from
apps.fnd_profile_options a
, apps.FND_PROFILE_OPTIONS_VL b
, apps.FND_PROFILE_OPTION_VALUES c
, apps.FND_USER d
, apps.FND_USER e
, apps.FND_RESPONSIBILITY_VL g
, apps.FND_APPLICATION h
where
b.user_profile_option_name like ''%Concurrent%Force%Output%''
and a.profile_option_name = b.profile_option_name
and a.profile_option_id = c.profile_option_id
and a.application_id = c.application_id
and c.last_updated_by = d.user_id (+)
and c.level_value = e.user_id (+)
and c.level_value = g.responsibility_id (+)
and c.level_value = h.application_id (+)
order by
b.user_profile_option_name, c.level_id,
decode(to_char(c.level_id),''10001'',''Site''
,''10002'',nvl(h.application_short_name,to_char(c.level_value))
,''10003'',nvl(g.responsibility_name,to_char(c.level_value))
,''10004'',nvl(e.user_name,to_char(c.level_value))
,''Unknown'')',
p_title => 'Verify Force Local Output File Mode Profile',
p_fail_condition => 'NRS',
p_problem_descr => 'Concurrent: Force Local Output File Mode profile option is not set.',
p_solution => 'Please set Concurrent: Force Local Output File Mode profile option.',
p_success_msg => 'Concurrent: Force Local Output File Mode is set as expected',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE');
debug('begin add_signature: CP2_RUNALONE');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_RUNALONE',
p_sig_sql => 'SELECT CONCURRENT_PROGRAM_NAME "SHORT NAME", USER_CONCURRENT_PROGRAM_NAME "PROGRAM NAME", RUN_ALONE_FLAG "RUN ALONE", ENABLED_FLAG "ENABLED", DESCRIPTION
FROM FND_CONCURRENT_PROGRAMS_VL
WHERE (RUN_ALONE_FLAG=''Y'')
order by RUN_ALONE_FLAG, ENABLED_FLAG desc',
p_title => 'Identify/Resolve the "Pending/Standby" Issue, if Caused by Run Alone Flag',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no Requests that Identify/Resolve the "Pending/Standby" Issue, if Caused by Run Alone Flag',
p_solution => 'The output provided is for review and confirmation by your teams, and is intended to identify any concurrent program definitions causing Pending/Standby Requests which may require review.',
p_success_msg => 'The output provided is for review and confirmation by your teams, and is intended to identify any concurrent program definitions causing Pending/Standby Requests which may require review.',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_RUNALONE');
debug('begin add_signature: OPP_PENDING_REQS');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'OPP_PENDING_REQS',
p_sig_sql => 'select concurrent_request_id, action_type
from fnd_conc_pp_actions
where action_type >= 6
and processor_id is null',
p_title => 'Check Pending OPP Requests',
p_fail_condition => 'RS',
p_problem_descr => 'There are pending OPP Requests
',
p_solution => 'We need a solution for pending OPP Requests if this is really a Warning scenario.<br><br>
<b>Note :</b>Output Post Processing currently does not display “Pending Requests” like any other Manager (for Example Standard Manager).<br><br>
This keep the customers in dark with respect to “workload of OPP”. They could not perform “sizing” of the OPP ; to handle the load of the system. For Standard Manager, they know how many requests pending (on the screen) . Hence they could resize the Manager process accordingly. But OPP they could not do so.
Support is currently using the following query to find pending requests against OPP (Based on Dev input)
</blockquote>
SQL> select concurrent_request_id, action_type
from fnd_conc_pp_actions
where action_type >= 6
and processor_id is null;</blockquote>
Most of the time, Requests stuck in Running/Normal as the requests wait at OPP. Because they do not know the pending queue size (OPP), customer inadvertently increases the Standard Manager process to speed up which goes in vain. That results in performance issue in the concurrent manager layer.
We need to display the “Pending Requests” in Concurrent Administer Screen for “OPP”.<br><br>
Bug 24626221 - CONCURRENT ADMINISTER SCREEN TO DISPLAY PENDING REQUESTS',
p_success_msg => 'Success!!!<br>
There are no OPP pending requests at this time.<br><br>
<b>Note :</b>Output Post Processing currently does not display “Pending Requests” like any other Manager (for Example Standard Manager).<br><br>
This keep the customers in dark with respect to “workload of OPP”. They could not perform “sizing” of the OPP ; to handle the load of the system. For Standard Manager, they know how many requests pending (on the screen) . Hence they could resize the Manager process accordingly. But OPP they could not do so.
Support is currently using the following query to find pending requests against OPP (Based on Dev input)
</blockquote>
SQL> select concurrent_request_id, action_type
from fnd_conc_pp_actions
where action_type >= 6
and processor_id is null;</blockquote>
Most of the time, Requests stuck in Running/Normal as the requests wait at OPP. Because they do not know the pending queue size (OPP), customer inadvertently increases the Standard Manager process to speed up which goes in vain. That results in performance issue in the concurrent manager layer.
We need to display the “Pending Requests” in Concurrent Administer Screen for “OPP”.<br><br>
Bug 24626221 - CONCURRENT ADMINISTER SCREEN TO DISPLAY PENDING REQUESTS',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('W','W'),
p_print_sql_output => nvl('Y','RS'),
p_limit_rows => nvl('N','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: OPP_PENDING_REQS');
debug('begin add_signature: CP2_TABLESPACES');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_TABLESPACES',
p_sig_sql => 'SELECT SEGMENT_NAME "TABLE NAME",
''<div align="right">''||to_char(sum(BLOCKS),''999,999,999,999'')||''</div>'' "TOTAL BLOCKS",
''<div align="right">''||to_char(sum(bytes/1024/1024),''999,999,999,999'')||''</div>'' "SIZE IN MB"
from dba_segments
where segment_name in (''FND_CONCURRENT_REQUESTS'',''FND_CONCURRENT_PROCESSES'',''FND_CONCURRENT_QUEUES'',
''FND_ENV_CONTEXT'',''FND_EVENTS'',''FND_EVENT_TOKENS'')
group by segment_name
order by 2',
p_title => 'Tablespace Statistics for the FND_CONCURRENT Tables',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows found for Tablespace Statistics for the FND_CONCURRENT Tables',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_TABLESPACES');
debug('begin add_signature: CP2_TABLESPACES2');
l_info('SHOW_SQL'):= 'Y';
add_signature(
p_sig_id => 'CP2_TABLESPACES2',
p_sig_sql => 'SELECT table_name "TABLE NAME", ''<div align="right">''||to_char(blocks,''999,999,999,999'')||''</div>'' "BLOCKS",
''<div align="right">''||to_char(empty_blocks,''999,999,999,999'')||''</div>'' "EMPTY BLOCKS",
''<div align="right">''||to_char(num_rows,''999,999,999,999'')||''</div>'' "LAST ANALYZED",
''<div align="right">''||to_char(sample_size,''999,999,999,999'')||''</div>'' "SAMPLE SIZE"
FROM all_tables
WHERE table_name in (''FND_CONCURRENT_REQUESTS'',''FND_CONCURRENT_PROCESSES'',
''FND_CONCURRENT_QUEUES'',''FND_ENV_CONTEXT'',''FND_EVENTS'',''FND_EVENT_TOKENS'')',
p_title => 'Additional Tablespace Statistics for the FND_CONCURRENT Tables',
p_fail_condition => 'NRS',
p_problem_descr => 'There are no rows found for Additional Tablespace Statistics for the FND_CONCURRENT Tables',
p_solution => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_success_msg => 'The output provided is for review and confirmation by your teams, and serves as a baseline regarding your tablespace disk overhead. <br>
You can cross reference the collected information with exisiting notes on tablespace sizing and defragmentation best practices',
p_print_condition => nvl('ALWAYS','ALWAYS'),
p_fail_type => nvl('I','W'),
p_print_sql_output => nvl('RS','RS'),
p_limit_rows => nvl('Y','Y'),
p_extra_info => l_info,
p_child_sigs => VARCHAR_TBL(),
p_include_in_dx_summary => nvl('Y','N')
);
l_info.delete;
debug('end add_signature: CP2_TABLESPACES2');
EXCEPTION WHEN OTHERS THEN
print_log('Error in load_signatures');
raise;
END load_signatures;
---------------------------------
-- MAIN ENTRY POINT
---------------------------------
PROCEDURE main(
p_min_volume IN NUMBER DEFAULT 3500
,p_max_volume IN NUMBER DEFAULT 5000
,p_max_output_rows IN NUMBER DEFAULT 30
,p_debug_mode IN VARCHAR2 DEFAULT 'Y')
IS
l_sql_result VARCHAR2(1);
l_step VARCHAR2(5);
l_analyzer_end_time TIMESTAMP;
l_completion_status BOOLEAN;
BEGIN
-- re-initialize values
g_sect_no := 1;
g_sig_id := 0;
g_item_id := 0; -- CG REMOVE
g_sig_count := 0 ;
-- initialize the global results hash
g_results('S') := 0;
g_results('W') := 0;
g_results('E') := 0;
g_results('I') := 0;
-- CG CHANGE This should be generated automagically but need to rethink the init/validation steps. We need to initialize the g_debug_mode flag before the file init!
g_debug_mode := nvl(p_debug_mode, 'Y');
IF g_is_concurrent THEN
g_rep_info('Calling From'):='Concurrent Program';
ELSE
g_rep_info('Calling From'):='SQL Script';
END IF;
l_step := '10';
initialize_files;
l_step := '15';
set_cloud_flag;
IF (g_cloud_flag) THEN
debug ('CG Cloud flag: TRUE');
ELSE
debug ('CG Cloud flag: FALSE');
END IF;
-- Title of analyzer!! - do not add word 'analyzer' at the end as it is appended in code where title is called
analyzer_title := 'Concurrent Processing';
l_step := '20';
validate_parameters(
p_min_volume => p_min_volume
,p_max_volume => p_max_volume
,p_max_output_rows => p_max_output_rows
,p_debug_mode => p_debug_mode );
l_step := '30';
l_step := '25';
print_page_header;
l_step := '30';
print_rep_header(analyzer_title);
print_execdetails;
print_parameters;
l_step := '40';
load_signatures;
l_step := '45';
create_hyperlink_table;
l_step := '50';
-- Start of Sections and signatures
l_step := '60';
debug('begin section: Main Section');
-- Print the menu of the section screen
start_main_section;
debug('begin section: EBS_CP_OVERVIEW');
start_section('E-Business Applications Concurrent Processing Analyzer Overview');
if (g_reqid_cnt < 100) THEN
show_data_gauge;
set_item_result(run_stored_sig('CP1_CONC_REQ3'));
elsif (g_reqid_cnt > 99) THEN
show_gauge_chart;
if (g_reqid_cnt > 5000) THEN
set_item_result(run_stored_sig('CP1_CONC_REQ1'));
elsif (g_reqid_cnt > 3500) THEN
set_item_result(run_stored_sig('CP1_CONC_REQ2'));
else
set_item_result(run_stored_sig('CP1_CONC_REQ3'));
end if;
end if;
set_item_result(run_stored_sig('CP1_ORPHANED_PURGE_DATA'));
set_item_result(run_stored_sig('EBS_VERSION'));
set_item_result(run_stored_sig('CP1_FNDRSRUN'));
set_item_result(run_stored_sig('CP1_PURGEREQS'));
set_item_result(run_stored_sig('CP1_PURGELIGIBLE'));
set_item_result(run_stored_sig('CP1_NODE_INFO'));
set_item_result(run_stored_sig('CP1_PARAMETERS'));
if (g_cp_status = 'Active') THEN
set_item_result(run_stored_sig('CP1_ENV1'));
elsif (g_cp_status = 'Deactivated') THEN
set_item_result(run_stored_sig('CP1_ENV2'));
else
set_item_result(run_stored_sig('CP1_ENV3'));
end if;
set_item_result(run_stored_sig('CP1_PROFILES'));
set_item_result(run_stored_sig('CP1_INVALIDS_BY_SCHEMA'));
if (g_apps_invalid_cnt > 100) then
set_item_result(run_stored_sig('CP1_INVALIDS_ALL_HIGH'));
else
set_item_result(run_stored_sig('CP1_INVALIDS_ALL_LOW'));
end if;
if (g_fnd_invalid_cnt > 5) then
set_item_result(run_stored_sig('CP1_INVALIDS_FND_HIGH'));
else
set_item_result(run_stored_sig('CP1_INVALIDS_FND_LOW'));
end if;
set_item_result(run_stored_sig('CP1_FND_FILE'));
set_item_result(check_rec_patches_7);
IF g_rep_info('Apps Version')>='12.2' THEN
set_item_result(check_rec_patches_2);
END IF;
IF (g_rep_info('Apps Version') < '12.0' ) THEN
set_item_result(check_rec_patches_1);
END IF;
if ((g_rep_info('Apps Version') < '12.0' ) and (g_CU2 = 'EXPLICIT') and (g_CU1 = 'NOT_APPLIED')) then
set_item_result(check_rec_patches_1); --Check 11i Recommended Patches
elsif ((g_rep_info('Apps Version') < '12.1' ) and (g_RUP6 = 'EXPLICIT')) then
set_item_result(check_rec_patches_3); --Check R12.0 Recommended Patches minus RUP4
elsif ((g_rep_info('Apps Version') < '12.1' ) and (g_RUP6 = 'NOT_APPLIED') and (g_RUP4 = 'NOT_APPLIED')) then
set_item_result(check_rec_patches_2); --Check R12.0 Recommended Patches Min RUP4
else
set_item_result(check_rec_patches_4); --Check Recommended Patches
end if;
end_section;
debug('end section: EBS_CP_OVERVIEW');
debug('begin section: EBS_CP_REQUEST');
start_section('E-Business Applications Concurrent Request Analysis');
set_item_result(run_stored_sig('CP2_LONGRPTS'));
set_item_result(run_stored_sig('CP2_ELAPSEDHIST'));
set_item_result(run_stored_sig('CP2_CURRENTREQS'));
set_item_result(run_stored_sig('CP2_CONCREQTOTALS'));
set_item_result(run_stored_sig('CP2_CONCREQS2'));
set_item_result(run_stored_sig('CP2_PENDREQ'));
set_item_result(run_stored_sig('CP2_TOP_10_CONC_REQS'));
set_item_result(run_stored_sig('CP2_PENDING_REQUESTS'));
set_item_result(run_stored_sig('CP2_SCHEDULEDREQ'));
set_item_result(run_stored_sig('CP2_PENDREQHOLD'));
set_item_result(run_stored_sig('CP2_SCHEDULEDREQ2'));
set_item_result(run_stored_sig('CP2_LASTMONDAILY'));
set_item_result(run_stored_sig('CP2_RUNALONE'));
set_item_result(run_stored_sig('CP2_TABLESPACES'));
set_item_result(run_stored_sig('CP2_TABLESPACES2'));
end_section;
debug('end section: EBS_CP_REQUEST');
debug('begin section: EBS_CONC_MGR');
start_section('E-Business Applications Concurrent Manager Analysis');
set_item_result(run_stored_sig('CP3_CPADV1'));
set_item_result(run_stored_sig('CP3_CPADV2'));
set_item_result(run_stored_sig('CP3_CPADV3'));
set_item_result(run_stored_sig('CP3_CPADV4'));
set_item_result(run_stored_sig('CP3_CPADV5'));
set_item_result(run_stored_sig('CP3_CPADV11'));
set_item_result(run_stored_sig('CP3_CPADV12'));
set_item_result(run_stored_sig('CP3_CPADV17'));
set_item_result(run_stored_sig('CP3_FND_CP_GSM_OPP_AQTBL'));
set_item_result(run_stored_sig('BIPXDO_CONC_FORCE_LOCAL_OUTPUT_FILE_MODE'));
set_item_result(run_stored_sig('OPP_PENDING_REQS'));
set_item_result(run_stored_sig('CP4_XDO_SETTINGS'));
end_section;
debug('end section: EBS_CONC_MGR');
debug('begin section: STANDARD_MANAGER');
start_section('Standard Manager Analysis');
IF g_std_mgr = 'STANDARD' and g_enabled = 'Y' and
(g_rep_info('Apps Version') >= '12.2.4' ) THEN
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_R12'));
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_CACHE'));
END IF;
IF g_std_mgr = 'STANDARD' and g_enabled = 'Y' and
(g_rep_info('Apps Version') < '12.2.4' ) THEN
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_11I'));
set_item_result(run_stored_sig('CP4_STD_MGR_DEFINE_CACHE'));
END IF;
set_item_result(run_stored_sig('CP4_RUN_ALONE_PROGRAMS2'));
set_item_result(run_stored_sig('CP4_STD_MGR'));
set_item_result(run_stored_sig('CP4_STD_MGR_INCL'));
set_item_result(run_stored_sig('CP_STD_MGR_INCLUDES'));
set_item_result(run_stored_sig('CP4_STD_MGR_VALIDATE'));
set_item_result(run_stored_sig('CP4_XDO_SETTINGS'));
set_item_result(run_stored_sig('CP_STD_MGR_LONG_RUN'));
end_section;
debug('end section: STANDARD_MANAGER');
-- End of Sections and signatures
end_main_section;
l_step := '140';
g_analyzer_elapsed := stop_timer(g_analyzer_start_time);
get_current_time(l_analyzer_end_time);
print_execution_time (l_analyzer_end_time);
print_mainpage;
print_footer;
print_hidden_xml;
close_files;
IF g_is_concurrent THEN
l_completion_status:=FND_CONCURRENT.SET_COMPLETION_STATUS('NORMAL','');
END IF;
EXCEPTION WHEN others THEN
g_retcode := 2;
g_errbuf := 'Error in main at step '||l_step||': '||sqlerrm;
print_log(g_errbuf);
IF g_is_concurrent THEN
l_completion_status:=FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',g_errbuf);
END IF;
END main;
BEGIN
null;
main(
p_min_volume => p_min_volume
,p_max_volume => p_max_volume );
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('Error encountered: '||sqlerrm);
END;
/
show errors
exit;
-- Exit required for bundling project so do not remove
No comments:
Post a Comment