//////////////////////////////////////////////////////////////////////////////
//
// Copyright © 2002-2003, Microsoft Corporation.  All rights reserved.
//
// File: thumbnails.js
//
// Description: Functions that are used to load and display the thumbnail images for topics.
//
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// GLOBAL CONSTANTS
//////////////////////////////////////////////////////////////////////////////

var THUMBNAIL_MAPPING_FILENAME = "thumbnail.xml";		// mapping file for the course thumbnail images
var delimiter = "$&%#"                                  //delimiter for array containing the item information


//--------------------------------------------------------------------
// Function: loadThumbnails
//
// Purpose:creates and renders the thumbnail images for the course item nodes 
//
// Parameters:
//	itemNodesArray - array containing the information of the item nodes
//
// Returns: None
//--------------------------------------------------------------------
function loadThumbnails(itemNodesArray,m_bShowCheckmarks)
{
    try
    {
        var bIsHostOLP = API.LRNIsHostOfflinePlayer();
        var THUMBNAIL_DIR_PATH = API.LRNGetManifestPath();
        var IMG_PATH;
        if (API.LRNIsViewerHosted())
            IMG_PATH = "../" + THUMBNAIL_DIR_PATH;
        else
            IMG_PATH = THUMBNAIL_DIR_PATH;
         var TOCFrameDoc = TocFrame.document;
         var thumbnailViewDiv = TOCFrameDoc.getElementById("thumbnailControl");
         var currentNodeId;
         
         //obtain the current node by checking the tree control 
         var treeCtrlObj = TOCFrameDoc.getElementById("__idtreectrl");
         var divObjs = treeCtrlObj.getElementsByTagName("DIV");
         
         for(var divCount = 0; divCount < divObjs.length; divCount++)
         {
            if(divObjs[divCount].getAttribute("id") == "__idParent")
            {
                var divTopicClassName = divObjs[divCount].parentNode.getAttribute("classname");
                var divModuleClassName = divObjs[divCount].getAttribute("classname");
                if(divModuleClassName == "courseSelected" || divTopicClassName == "topicNodeSelected")
                {
                    currentNodeId = divObjs[divCount].parentNode.id;
                    break;
                }
            }
        }
        //hide the text view and show the thumbnail view
        TOCFrameDoc.getElementById("TreeControltd").style.display = "none";
        thumbnailViewDiv.style.display = "";
        
        //load the thumbnail mapping xml
        var thumbnailPath = THUMBNAIL_DIR_PATH + "thumbnails/" + THUMBNAIL_MAPPING_FILENAME ;
        var m_thumbnail = LoadXMLFile(thumbnailPath);
        if(!m_thumbnail)
        {
            return false;
        }

        //get the course absolute path
        var courseDirIndex =  document.location.href.indexOf("shared");
        var COURSE_DIR_Path = document.location.href.substring(0,courseDirIndex);

        var imageObj = null;
        var thumbnailNode = null;
        var itemId =null;
        var itemTitle = null;
        var imgSrc = null;
        var itemUrl = null;
        var nodeType = null;
        var itemStatus = null;
        var itemInfoArray = null;

        //loop thru the item nodes array,and find the corresponding element from the thumbnail mapping xml
        for(var itemCount = 0; itemCount< itemNodesArray.length; itemCount++)
        {
            itemInfoArray = itemNodesArray[itemCount].split(delimiter);
            itemId =itemInfoArray[0] ;
            itemTitle = itemInfoArray[1] ;
            itemUrl = COURSE_DIR_Path + "course/" + itemInfoArray[2];
            itemStatus = itemInfoArray[3];
            
            if(itemStatus == "not attempted")
            {
                 itemStatus = "notattempted";
            }
            else if(itemStatus == "current node")
            {
                itemStatus = "currentnode";
            }
            
            if(itemId == currentNodeId)
            {
                itemStatus = "currentnode";
            }
            
            thumbnailNode = m_thumbnail.selectSingleNode("//Thumbnail[@id='" + itemId + "']");
            //if image exists,create am image element for it
            if(thumbnailNode)
            {
                nodeType = thumbnailNode.getAttribute("type"); 
                //for module/topic nodes
                if (nodeType != "Lesson" || (nodeType == "Lesson" && isLessonEnabled))
                {
                    imgSrc = thumbnailNode.getAttribute("uri"); 
                }
                else
                {
                    imgSrc = "";
                }
                    //table contaning the status img & thumbnail                                   
                    var itemTable = TOCFrameDoc.createElement("table");
                        itemTable.id = 'tbl_' + itemId;
                        itemTable.border='0';
                        itemTable.width='100%';                             
                
                    var itemTr = TOCFrameDoc.createElement("tr" );
                    itemTr.id = 'tr_' + itemId;
                    itemTr.setAttribute("class", "thumbnailsParentBgr"); 
                    
                    var itemThumbnailTd = TOCFrameDoc.createElement("td");
                    itemThumbnailTd.id='thumbnail_'+ itemId;
                    itemThumbnailTd.align='center';
                    itemThumbnailTd.setAttribute("class" ,"thumbnailsBgr");            
                    
                    //create a div for each thumbnail -lesson node thumbnails will not be clickable
                    if (nodeType != "Lesson" || (nodeType == "Lesson" && isLessonEnabled))
                    {
                        var imgDiv = TOCFrameDoc.createElement("div");
                        imgDiv.align = 'center';
                        imgDiv.id='imgDiv_' + itemId;
                        imgDiv.setAttribute("onmouseover" ,"setThumbnailStyle(this,event);");
                        imgDiv.setAttribute("onmouseout" ,"setThumbnailStyle(this,event);");
                        imgDiv.setAttribute("onclick", "loadTopic(this);");
                        imgDiv.tabindex = 0;                    
                        imgDiv.topicUrl=itemUrl;
                    }
                    else
                    {
                        itemThumbnailTd.style.cursor = "auto"; 
                        //var imgDiv = TOCFrameDoc.createElement("<div align='middle' id='imgDiv_" + itemId + "'></div>" );
                        var imgDiv = TOCFrameDoc.createElement("div" );
                        imgDiv.align = 'center';
                        imgDiv.id='imgDiv_' + itemId;
                    }
                    //image for each of the module/topic nodes
                    if (nodeType != "Lesson" || (nodeType == "Lesson" && isLessonEnabled))
                    {
                        //create the image obj
//                        imageObj = TOCFrameDoc.createElement("<img id='img_" + itemId + "' src='" + IMG_PATH + imgSrc + ">");
                            imageObj = TOCFrameDoc.createElement("img");
                            imageObj.id='img_' + itemId;                            
                            imageObj.src = IMG_PATH + imgSrc;
                                                        
                            if(imgSrc == "")
                            {
                                imageObj.setAttribute("height","50px;"); 
                            }
                        imgDiv.appendChild(imageObj); 
                    }
                    //table contaning the status img & title
                    var statusTitleTable = TOCFrameDoc.createElement("table");
                    statusTitleTable.id='tblStatusTitle_' + itemId;
                    statusTitleTable.width='100%';
                    var statusTitleTr = TOCFrameDoc.createElement("tr");
                    statusTitleTr.id='trStatusTitle_' + itemId;
                    var statusTd = TOCFrameDoc.createElement("td");
                    statusTd.id='tdstatus_' + itemId;
                    statusTd.valign='middle';
                    var titleTd = TOCFrameDoc.createElement("td");
                    
                    //item title div
                    var titleDiv = TOCFrameDoc.createElement("div");
                    titleDiv.innerHTML = itemTitle;

                    if (nodeType == "Lesson" || isLessonEnabled)
                    {
                        titleDiv.setAttribute("class" ,"topicTitle lessonTitle");
                    }
                    else
                    {
                        titleDiv.setAttribute("class" ,"topicTitle");
                    }
                    
                    titleTd.appendChild(titleDiv);
                    statusTitleTr.appendChild(statusTd);
                    statusTitleTr.appendChild(titleTd);
                    statusTitleTable.appendChild(statusTitleTr);
                    
                    imgDiv.appendChild(statusTitleTable);
                    itemThumbnailTd.appendChild(imgDiv);
                    
                    if( itemStatus == "currentnode")
                    {
                        itemThumbnailTd.className = "thumbnailsSelected";
                    }
                    itemTr.appendChild(itemThumbnailTd);
                    itemTable.appendChild(itemTr); 
                    thumbnailViewDiv.appendChild(itemTable); 
                    
                    //var  thumbnailDivider = TOCFrameDoc.createElement("<div id='divider_" + itemId + "' class='thumbnail_Divider'></div>");
                    var  thumbnailDivider = TOCFrameDoc.createElement("div");
                    thumbnailDivider.id='divider_' + itemId;
                    thumbnailDivider.setAttribute("class" ,"thumbnail_Divider");
                    //thumbnailDivider.class='thumbnail_Divider';
                    
                    thumbnailViewDiv.appendChild(thumbnailDivider);
                     
                    if (itemInfoArray[3] != "currentnode") 
                    {
                        if (itemInfoArray[3] == "not attempted") 
                            itemStatus = "notattempted";
                        else itemStatus = itemInfoArray[3];
                    }
                    UpdateThumbnailStatus(itemId,itemStatus,"thumbnailsLoad",m_bShowCheckmarks);
                    }
        }
        thumbnailViewDiv.outerHTML = thumbnailViewDiv.outerHTML + "</Div>";
        
        //resize images according to cuurent TOC width
		var currentTOCWidth = TOCFrameDoc.body.offsetWidth; 
        resizeThumbnails(currentTOCWidth,"onLoad");
    }
    catch(e)
    {
    }
}

//--------------------------------------------------------------------
// Function: loadTOC
//
// Purpose:hides the Thumbnail view and shows the text view for the 
//Table Of Contents
//
// Parameters:
//
// Returns: None
//--------------------------------------------------------------------
function loadTOC()
{
   try
    {
        var TOCFrameDoc = TocFrame.document;
        if(TOCFrameDoc.getElementById("TreeControltd").style.display != "")
        {
            TOCFrameDoc.getElementById("thumbnailControl").style.display = "none";
            imgTextView.src = IMG_TOC_TEXTVIEW_BTN_SELECTED;
            TOCFrameDoc.getElementById("TreeControltd").style.display = "";
            imgThumbnailView.src = IMG_TOC_THUMBNAILVIEW_BTN_NORMAL ;
        }
    }
    catch(e)
    {
    }
}

//--------------------------------------------------------------------
// Function: loadTopic
//
// Purpose:loads the topic for the selected thumbnail image
//
// Parameters:
// nodeControl -  the selected thumbnail node object
//
// Returns: None
//--------------------------------------------------------------------
var itemId = '';
function loadTopic(nodeControl) 
{
    try
    {
           itemId = nodeControl.id.substring(7);
           if (window.ActiveXObject)
            setTimeout('document.parentWindow.parent.API.LRNDoSelect(itemId)',50);
           else
           {            
             setTimeout('m_oLMSAPI.LRNDoSelect(itemId)',50);           
           }
    }
    catch(e)
    {
    }
}

//--------------------------------------------------------------------
// Function: setThumbnailStyle
//
// Purpose:sets the mouseover & mouseout styles for the thumbnails
//
// Parameters:
// obj -  the current object
// event - current event 
//
// Returns: None
//--------------------------------------------------------------------

function setThumbnailStyle(obj,event)
{
    try
    {
        if(event.type == "mouseover")
        {
            obj.className = "thumbnailHover";
        }
        else if (event.type == "mouseout")
        {
            obj.className = "thumbnailsBgr";
        }   
    }
    catch(e)
    {
    }
}

//--------------------------------------------------------------------
// Function: showThumbnails
//
// Purpose:hides the thumbnail view and shows the textview for 
//the Table Of Contents

// Parameters:
//
// Returns: None
//--------------------------------------------------------------------
function showThumbnails()
{
    try
    {
        if(TocFrame.document.getElementById("thumbnailControl").style.display != "")
        {
            //hide the text view and show the thumbnail view
            TocFrame.document.getElementById("TreeControltd").style.display = "none";
            TocFrame.document.getElementById("thumbnailControl").style.display = "";
        }
    }
    catch(e)
    {
    }
}

//--------------------------------------------------------------------
// Function: UpdateThumbnailStatus
//
// Purpose:sets the status for thumbnail images 
//the Table Of Contents

// Parameters:
//sID - id of the item node
// sNewStatus - updated status of the node

// Returns: None
//--------------------------------------------------------------------
function UpdateThumbnailStatus(sID,sNewStatus,evType,m_bShowCheckmarks)
{
    try
    {
        var currDoc;
        var currentThumbnail_sID = "imgDiv_" + sID;
        if(evType == "thumbnailsLoad")
        {
            currDoc = TocFrame.document;
        }
        else if(evType == "itemLoad")
        {
            currDoc = document;
        }
        if(sNewStatus == "not attempted")
        {
             sNewStatus = "notattempted";
        }
        else if(sNewStatus == "current node")
        {
            sNewStatus = "currentnode";
        }
        var itemThumbnail = currDoc.getElementById("tdstatus_" + sID);
        
        if (sNewStatus != "currentnode" && m_bShowCheckmarks && sNewStatus!="block")
        {
            var nodeCurrentStatus = "itemStatus_" + sNewStatus;
            itemThumbnail.setAttribute("className", nodeCurrentStatus); 
        }
        
        if(sNewStatus == "currentnode")
        {
                document.getElementById(currentThumbnail_sID).parentNode.className = "thumbnailsSelected";
        }
        else
        {
            document.getElementById(currentThumbnail_sID).parentNode.className = "thumbnailsBgr";
        }
         
    }
    catch(e)
    {
    }
}

//--------------------------------------------------------------------
// Function: resizeThumbnails
//
// Purpose:resizes the thumbnails according to the width of the TOC frame

// Parameters:
//currentTOCWidth - width of the TOC frame

// Returns: None
//--------------------------------------------------------------------
function resizeThumbnails(currentTOCWidth,evType)
{
    try
    {
        var thumbnail_window_perc = 80;
        var imgObj = null;
        var newThumbnailWidth = (thumbnail_window_perc * currentTOCWidth) / 100;
        var newThumbnailHeight = newThumbnailWidth * 0.8;
        var thumbnailsCollection = TocFrame.document.getElementById("thumbnailControl").getElementsByTagName("img");
        for(var imgCount = 0; imgCount <thumbnailsCollection.length;imgCount++)
        {
           imgObj = thumbnailsCollection[imgCount];
           imgObj.width = newThumbnailWidth;
           imgObj.height = newThumbnailHeight;
        }
    }
    catch(e)
    {
    }
   
}

// SIG // Begin signature block
// SIG // MIIbDAYJKoZIhvcNAQcCoIIa/TCCGvkCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFN/P5ewiDG2i
// SIG // fG7oLvQDkeoq47QEoIIV5zCCBIUwggNtoAMCAQICCmEI
// SIG // d18AAAAAAEowDQYJKoZIhvcNAQEFBQAweTELMAkGA1UE
// SIG // BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
// SIG // BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
// SIG // b3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENv
// SIG // ZGUgU2lnbmluZyBQQ0EwHhcNMTAwNzE5MjI1MzEwWhcN
// SIG // MTExMDE5MjI1MzEwWjCBgzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjENMAsGA1UECxMETU9QUjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAQ8AMIIBCgKCAQEAzH6Ae0H6i7RNmSlD3eb4Ut9b
// SIG // Qpe9Mxmc77Xa0MDc6PG3vlzhCrLCNaB+5PPUOKfyD0Jy
// SIG // p7qbzx8k3lYNhHPM02P3F82vaW9hTUyAT8h3HFFkyNME
// SIG // 8xQms7hCPzNDsNsmWViTtW2JYg8HVlvVEqCxCcwWK/mM
// SIG // 32FW6AZ4f9dziCYDZ9Gj/zSCrC1M2ALs7W+5ojHFMky7
// SIG // 9v1fYlte8fZkkceFd0cc9qcrRy0LN1RPth8EjbXsYCen
// SIG // 8362fKFMkaaLcdbGNWFHvMEVS92sMyK+BhmWS4oebgDr
// SIG // vh5p3VhZIQMrPL7mEwUXZjWnhi0a8dk0wAGAGvyaRp1u
// SIG // pOdI3DXqNwIDAQABo4IBAjCB/zATBgNVHSUEDDAKBggr
// SIG // BgEFBQcDAzAdBgNVHQ4EFgQU5G9fyon5U77wcFcGUKrC
// SIG // eQ2sVpswDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaA
// SIG // FFdFdBxdsPbIQwXgjFQtjzKn/kiWMEkGA1UdHwRCMEAw
// SIG // PqA8oDqGOGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
// SIG // a2kvY3JsL3Byb2R1Y3RzL0NvZGVTaWdQQ0EuY3JsME0G
// SIG // CCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAoYxaHR0cDov
// SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9Db2Rl
// SIG // U2lnUENBLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAlkFd
// SIG // PVwrpM64KkUvQgJeoZAcTHQnCc4LVH1wKEFyO6QVvNEE
// SIG // Ulevd3RtC1VXhzcQSR7W5tTCY5S0/aQuLfpf4hlZFYTZ
// SIG // t7bpUqJS3iNfIC9Z06sahH8d473qD98BiDkl2O1kYRkb
// SIG // eq+mFEpGUEjZckvVS5Ld8A+EfMvTxvJMeG79vP9mEAr3
// SIG // A10V6l6YDAnSmY8utSC9YebJbwUUEct7+0IIvQPxJldn
// SIG // TY9Zi7hEx0XTYgQMLTADWF7sSPRuqBQxBP00orgELQLd
// SIG // OqEJXq1hsY9wwHhVI2Oon1l3otu5G3EoHPwu4QSPte80
// SIG // vkqZR+NkUhY8+r3g6OAUDBAiNIKCHjCCBMowggOyoAMC
// SIG // AQICCmEEs/UAAAAAAA0wDQYJKoZIhvcNAQEFBQAwdzEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9z
// SIG // b2Z0IFRpbWUtU3RhbXAgUENBMB4XDTA4MDcyNTE5MTM0
// SIG // NVoXDTExMDcyNTE5MjM0NVowgbMxCzAJBgNVBAYTAlVT
// SIG // MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
// SIG // ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
// SIG // YXRpb24xDTALBgNVBAsTBE1PUFIxJzAlBgNVBAsTHm5D
// SIG // aXBoZXIgRFNFIEVTTjo5RTc4LTg2NEItMDM5RDElMCMG
// SIG // A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
// SIG // ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
// SIG // AKtGL7yoFPL4Rj8MBaGkY0UFf5rpM3LMJ9My7JjD4DSI
// SIG // hc6hEpeuSFBOSCB/cORZM/yZW7kHgEgovI24+mYCZrXx
// SIG // fxxQliiTVY2BVapwW6XJzu8u4uclw3ZvKQufLMhTgJrB
// SIG // DeO9p0W/Md/mhot9iQGLHHhYOLLdk0pbnh3XnMbwxE3Q
// SIG // vydKB5QEcQKIDXDm+CrnDmHjmEvR3atUtjf7xkb9pBy8
// SIG // /6/sspeA3LiT/bgiqJ0lWXA+XHscQSn+c5kiSYHXVSbA
// SIG // 7PJOKFRiO3AtYZMdUNWfAcIFw1UaSoekAIZUoHtisuoP
// SIG // +l1cxSoRgpe+hhsdq7erCin8zM00ib9Atk8CAwEAAaOC
// SIG // ARkwggEVMB0GA1UdDgQWBBSghTFeh64PqgoE6+HA02S9
// SIG // PLtp9TAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7syuw
// SIG // wzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vY3Js
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
// SIG // aWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsGAQUF
// SIG // BwEBBEwwSjBIBggrBgEFBQcwAoY8aHR0cDovL3d3dy5t
// SIG // aWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3NvZnRU
// SIG // aW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUF
// SIG // BwMIMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0BAQUF
// SIG // AAOCAQEAR3FPtkhFwAjrnC/TJVvbZ1ERkqbZ2bIUmibC
// SIG // /QbBzNeI9aY1tc0rtmtYas35nfNa60YvofqnH316QrKw
// SIG // 0RoJKFRsb5mLOPw65MEkqnJMEgQv8dR6djvFz3EnC238
// SIG // OGenxSJiK3t/wXasp8UmTKmvmN2KOF3PZaSBLqnvVgJM
// SIG // uQi+ZcQeiyEtbqfydWS03Bpr0PEl5cLngEQ51C8KeX4B
// SIG // Kqd4W6NrW84J7zk6ObfEZ1O5qvNh/515489IZ/+ryMYr
// SIG // YgmU0B+iePdzSTtYU8EJq0wGC9VAKH72sWbFv1LEvj47
// SIG // 4PmOdI3mIgzBxjOYtXnoDPcAfOqyTsyAmhYtyKQQBTCC
// SIG // BgcwggPvoAMCAQICCmEWaDQAAAAAABwwDQYJKoZIhvcN
// SIG // AQEFBQAwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
// SIG // CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMk
// SIG // TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
// SIG // aXR5MB4XDTA3MDQwMzEyNTMwOVoXDTIxMDQwMzEzMDMw
// SIG // OVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
// SIG // bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
// SIG // FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMY
// SIG // TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjANBgkq
// SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIq
// SIG // fGsuGeG94uPFmVEjUK3O3RhOJA/u0afRTK10MCAR6wfV
// SIG // VJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY8InMH8sz
// SIG // JIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBC
// SIG // BKL5pmyTZ9co3EZTsIbQ5ShGLieshk9VUgzkAyz7apCQ
// SIG // MG6H81kwnfp+1pez6CGXfvjSE/MIt1NtUrRFkJ9IAEpH
// SIG // ZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiF
// SIG // ABAwRu233iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1HQ2x
// SIG // /PebsgHOIktU//kFw8IgCwIDAQABo4IBqzCCAacwDwYD
// SIG // VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArt
// SIG // QPt2+7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsGAQQB
// SIG // gjcVAQQDAgEAMIGYBgNVHSMEgZAwgY2AFA6sgmBAVieX
// SIG // 5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQB
// SIG // GRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0
// SIG // MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZp
// SIG // Y2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcTLmUw
// SIG // UAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNy
// SIG // b3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvbWljcm9z
// SIG // b2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgwRjBE
// SIG // BggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQu
// SIG // Y29tL3BraS9jZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5j
// SIG // cnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcN
// SIG // AQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRx
// SIG // W20ME6vOvnuPuC7UEqKMbWK4VwLLTiATUJndekDiV7uv
// SIG // WJoc4R0Bhqy7ePKL0Ow7Ae7ivo8KBciNSOLwUxXdT6uS
// SIG // 5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8
// SIG // GE6djmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy+cwx
// SIG // SnYxPStyC8jqcD3/hQoT38IKYY7w17gX606Lf8U1K16j
// SIG // v+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZY
// SIG // sy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76KbKTQG
// SIG // dxpiyT0ebR+C8AvHLLvPQ7Pl+ex9teOkqHQ1uE7FcSMS
// SIG // JnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGboQhJe
// SIG // GsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m3pmd
// SIG // yjpvvYEndAYR7nYhv5uCwSdUtrFqPYmhdmG0bqETpr+q
// SIG // R/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2vWY+45CHl
// SIG // tbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgI
// SIG // bqBbjCW/oO+EyiHW6x5PyZruSeD3AWVviQt9yGnI5m7q
// SIG // p5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJE6P9MIIGgTCC
// SIG // BGmgAwIBAgIKYRUIJwAAAAAADDANBgkqhkiG9w0BAQUF
// SIG // ADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZIm
// SIG // iZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNy
// SIG // b3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
// SIG // HhcNMDYwMTI1MjMyMjMyWhcNMTcwMTI1MjMzMjMyWjB5
// SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
// SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
// SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNy
// SIG // b3NvZnQgQ29kZSBTaWduaW5nIFBDQTCCASIwDQYJKoZI
// SIG // hvcNAQEBBQADggEPADCCAQoCggEBAJ+N34U3jLEGVmY2
// SIG // TtQK6zYjkR6vq41Y6cTPwZ86CiTExMResO4VFMX6Ppkz
// SIG // axlpcvR8BV/lmSVE1zUZipDcKI6QDO/VkGGt3twYcC2D
// SIG // yW+vhSz43bm5MP1xeByD/cipuYJnDXq4wQnCvBaXVz8c
// SIG // mNNp1zCQkJCNMB/YJtSee4jZ4gntl0lF6wRSgXV7uLUi
// SIG // uC5Wu9fPqU48CoOiqDrFrbYBDmrPIrQjH2zVJ+e3fsG0
// SIG // 1TKteSUcQobinYX0V9obWS8tJpIpxbPXhaOeYFqU5nuc
// SIG // e16CNEtt/9TuJ9Ci3NGQDM59DhV8iKw0x8BsmIRKyUR5
// SIG // aCjfIoMNuIosSGHi/hECAwEAAaOCAiMwggIfMBAGCSsG
// SIG // AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRXRXQcXbD2yEMF
// SIG // 4IxULY8yp/5IljALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/
// SIG // BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBQOrIJgQFYnl+Ul
// SIG // E/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkW
// SIG // A2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEt
// SIG // MCsGA1UEAxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
// SIG // dGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAG
// SIG // A1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jvc29m
// SIG // dHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYI
// SIG // KwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
// SIG // bS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0
// SIG // MHYGA1UdIARvMG0wawYJKwYBBAGCNxUvMF4wXAYIKwYB
// SIG // BQUHAgIwUB5OAEMAbwBwAHkAcgBpAGcAaAB0ACAAqQAg
// SIG // ADIAMAAwADYAIABNAGkAYwByAG8AcwBvAGYAdAAgAEMA
// SIG // bwByAHAAbwByAGEAdABpAG8AbgAuMBMGA1UdJQQMMAoG
// SIG // CCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4ICAQAwvLAg
// SIG // pGKgp+85JmE93KzGmdCGxC71gzJlXiI+m9aG+Oi2n8qL
// SIG // 1jt1C6GRPkzdZHSMSfKIjBhnbP4VZka4OkZCl8iRN9Qk
// SIG // sees0+pBFIN308lPBV+jFFK/lqQvPlZbEHXOU8POBVRp
// SIG // tGXJJKUP4SW4GrlN5QK5UB5Ps5gMHZUC7iJZrSLLBXQL
// SIG // BEV7BFng2A+z60z4YN3CeJ7Rup9r9/PufkQRQNK9uptL
// SIG // FghupL5V5KY4EqNI9BxVeoog0X3+kduUjy/Ce2umZIVP
// SIG // o+UsNCldC7/1xzgvxCDEVjH2ac6F+AqR7NDWrro4BQzr
// SIG // bk9MnAMpqqL8GKApDA1cXFYjV9oclg3IJjbBRMvl4eZv
// SIG // ieeP6Zi1c9N44+2jATx05V68bPYhiWcF7JedtbH9r6bp
// SIG // cqXDNOEvn/n0ajniLQSCW/zQnK58nRH55rVTGXS6OUo5
// SIG // 631Cs0o7Nz3CSnsnmOfiTpsbSlQ4aiM3vmq3SO7qQg1J
// SIG // JJGOtwQul2/k50W7j039YNnXWcLYgNZgNHu3oZMg/oG4
// SIG // qqVcCemKDb4oTX7X6A/tZXjRMV+5ZtvfQucLzAIHjd//
// SIG // IAajRWW0szKNLpHiTbSpyfq8awQOsp/qn96kyQqW9I33
// SIG // 2Jio8IUCCFmkIKYsCxryUgbtaeVkGBvgo6veynwUYUO4
// SIG // ZfU2o1UTK2csTRswTDGCBJEwggSNAgEBMIGHMHkxCzAJ
// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
// SIG // ZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29m
// SIG // dCBDb2RlIFNpZ25pbmcgUENBAgphCHdfAAAAAABKMAkG
// SIG // BSsOAwIaBQCggb4wGQYJKoZIhvcNAQkDMQwGCisGAQQB
// SIG // gjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC
// SIG // ARUwIwYJKoZIhvcNAQkEMRYEFCHT4HZUGymL4FcgNQEJ
// SIG // hQqbJAUqMF4GCisGAQQBgjcCAQwxUDBOoCaAJABNAGkA
// SIG // YwByAG8AcwBvAGYAdAAgAEwAZQBhAHIAbgBpAG4AZ6Ek
// SIG // gCJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbGVhcm5p
// SIG // bmcgMA0GCSqGSIb3DQEBAQUABIIBAJ+FzVoJzOGHw27t
// SIG // pR7A8GX7bgw/X1/8kKKH+y1jcMFMgk7oh4+DIz9eoSVp
// SIG // 1Av8kZcM+tKcshYg134akwKtL7VxkhPmstsQ55MZ9HVh
// SIG // rYA1dNauGVGBLMhcT47jr+33kMyzalNbNjQEk5ZlNqrR
// SIG // RvMdDatIh5frCtvgTqFqVPWl5WPKEgxJ9lgheXuVenlU
// SIG // HX5o4/0DBmngb7QORv8UeZSiw39/mF/zYhTQt/VQVUSe
// SIG // Fanjar3jKDAQFqFudF3qHYULoHkX8oBg182d0Apyv2J9
// SIG // 3TuUnaM8KeIc96UBTYJnKTShjSMiN79+KuK9JglXIgLU
// SIG // CPAbNbHS1gAPk3CHJqmhggIdMIICGQYJKoZIhvcNAQkG
// SIG // MYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAg
// SIG // UENBAgphBLP1AAAAAAANMAcGBSsOAwIaoF0wGAYJKoZI
// SIG // hvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUx
// SIG // DxcNMTAxMTEwMTc1MDU1WjAjBgkqhkiG9w0BCQQxFgQU
// SIG // Qoo3K5fYOD4dbnd4Ugu6ucZHD0IwDQYJKoZIhvcNAQEF
// SIG // BQAEggEAHzf76jzXEwxt1FaqibzKr22wa9QCqHwdDBY9
// SIG // iqK/K05A4nzCs1c6XRvUSOmzbzEdWR1xqgvi4otV82Xv
// SIG // QbhrPrxHmUo5OtbiKdxSq197xnfC7Jw9pnB4CfNKYIA4
// SIG // bKYdFEzhyhs62pFlipOudShjSoUPTEFWuK3Z0m4iTpMy
// SIG // /PHKKw1XrbMYtUO5onz4Cfe3Qt0o6W0pZ1QiXKQw8hQw
// SIG // tT+kfWFhEVFu7VqI2eVN6beASJ7UVii6gJQ0AWvBSiTh
// SIG // xWMrZEnLEvcqVj5cMbrAF/KEE/1R/YMRa3L2/imiw812
// SIG // zR39OMzNSl6t64KMek7R3Oqo5yOCApIHGA8CAlPvsA==
// SIG // End signature block
