An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#18387089" at line 19, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#18387089" at line 19, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() > 
4<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
5<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
6<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
7<#assign url404 = '/error/404.html' > 
8<#assign environment = url?replace('/11t3.*','','r')> 
9 
10<#assign text_to_apply_source = "vanity url" > 
11<#if qstringmap["sms"]?has_content> 
12    <#assign sms = 1 > 
13    <#assign text_to_apply_source = "sms" > 
14</#if> 
15<#if qstringmap["qrCode"]?has_content> 
16    <#assign text_to_apply_source = "qr code" > 
17</#if> 
18 
19<#assign lc = qstringmap["ecdma-lc"]?first>  
20<#assign lc = htmlUtil.escape(lc)> 
21<#assign lc = htmlUtil.escapeJS(lc)> 
22 
23<#assign prefix = "00000" > 
24<#assign lcWithPrefix = prefix + lc > 
25<#assign withPrefixLength = lcWithPrefix?length > 
26<#assign startHere = withPrefixLength - 5> 
27<#assign lc = lcWithPrefix?substring(startHere)> 
28 
29<#if qstringmap["ecid"]?has_content> 
30    <#assign ecidExt = qstringmap["ecid"]?first> 
31    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
32    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
33    <#assign ecidExt = "&ecid=" + ecidExt> 
34 
35 
36    <#assign campaignId = qstringmap["ecid"]?first > 
37    <#assign campaignId = htmlUtil.escape(campaignId)> 
38    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
39<#else> 
40    <#assign ecidExt=""> 
41    <#assign campaignId = "" > 
42</#if> 
43 
44<#assign isFromDCOLink = false> 
45<#assign dcoSourceCode = ''> 
46<#if qstringmap["sourcecode"]?has_content> 
47    <#assign dcoSourceCode = qstringmap["sourcecode"]?first> 
48    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
49    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
50<#elseif qstringmap["sourceCode"]?has_content> 
51    <#assign dcoSourceCode = qstringmap["sourceCode"]?first> 
52    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
53    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
54</#if> 
55 
56<#if dcoSourceCode?has_content> 
57    <#assign isFromDCOLink = true> 
58</#if> 
59 
60<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
61<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
62<#assign clientProfile = clientProfileList?first> 
63<#assign partnerName = clientProfile.getMarketingNameLong()> 
64<#assign pbu = clientProfile.getPbu()> 
65<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
66 
67<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
68<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
69<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)> 
70 
71 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
72<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
73<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
74<script> 
75//console.log('Partner URL', ${partnerUrl}); 
76</script> 
77<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>     
78    <#assign partnerUrl = 'https://' + partnerUrl> 
79</#if> 
80<script> 
81//console.log('Partner URL', ${partnerUrl}); 
82 
83</script> 
84<#-- Begin: filter duplicated cards--> 
85<#assign temp = []> 
86<#assign offerTypeList = []>   
87<#if (fiCardsData?size > 0)>      
88    <#assign index = 0> 
89    <#list fiCardsData as fib> 
90        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>  
91            <#assign offerTypeList = offerTypeList + [fib.offerType]>                   
92            <#assign temp = temp + fiCardsData[index..index]>  
93        </#if>   
94        <#assign index = index + 1>               
95    </#list>  
96    <#assign fiCardsData = temp> 
97    <#if (fiCardsData?size > 0)> 
98        <div class="content-container content-container-main"> 
99            <#if url?contains("index")> 
100                <#assign product="All Cards"> 
101                <h1 class="sr-only">${partnerName!'Elan'} Credit Cards</h1> 
102                <header class="page-header"> 
103                    <div class="page-header__logo">  
104                        <#if partnerUrl?has_content> 
105                            <a href="${partnerUrl!''}"> 
106                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo"> 
107                            </a> 
108                        <#else> 
109                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo"> 
110                        </#if> 
111                    </div>  
112                </header>         
113            <#else> 
114                <header class="page-header"> 
115                    <#if !isFromDCOLink> 
116                        <div class="back-overview hide-desktop">  
117                            <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
118                        </div>  
119                    </#if> 
120 
121                    <div class="header-main-logo"> 
122                        <#if partnerUrl?has_content> 
123                            <a href="${partnerUrl!''}"> 
124                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo"> 
125                            </a> 
126                        <#else>                            
127                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo">                             
128                        </#if> 
129                    </div> 
130                    <#if !isFromDCOLink> 
131                        <div class="styled-select slate"> 
132                            <nav class="styled-select__dropdown"> 
133                                <div class="back-overview hide-mobile-flex">  
134                                    <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
135                                </div>   
136                                <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false"> 
137                                    <span class="selected-option"></span>  
138                                    <div class="jn-arrow arrow arrow-right"></div> 
139                                </a> 
140                                <a href="javascript:void(0)" aria-label="Open page navigation menu" class="jn-hamburger hamburger" aria-expanded="false"> 
141                                    <div class="first-line transform transformed1"></div> 
142                                    <div></div> 
143                                    <div class="transform transformed2"></div> 
144                                    <div></div> 
145                                </a> 
146                                <ul> 
147                                    <#list fiCardsData as fib> 
148                                        <#switch fib.offerType> 
149                                            <#case "101"> 
150                                                <#assign productURL = "202302/consumer-edr"> 
151                                                <#assign productName = "Everyday Rewards+"> 
152                                                <#break> 
153                                            <#case "103"> 
154                                                <#assign productURL = "202302/consumer-edr"> 
155                                                <#assign productName = "Everyday Rewards+"> 
156                                                <#break> 
157                                            <#case "104"> 
158                                                <#assign productURL = "max-cash"> 
159                                                <#assign productName = "Max Cash Preferred Card">       
160                                                <#break> 
161                                            <#case "108"> 
162                                                <#assign productURL="202308/consumer-platinum"> 
163                                                <#assign productName="Platinum Card"> 
164                                                <#break> 
165                                            <#case "109"> 
166                                                <#assign productURL="202308/consumer-platinum"> 
167                                                <#assign productName="Platinum Card"> 
168                                                <#break> 
169                                            <#case "115"> 
170                                                <#assign productURL = "secured"> 
171                                                <#assign productName = "Secured Card" > 
172                                                <#break> 
173                                            <#case "138"> 
174                                                <#assign productURL = "202305/travel-rewards-plus"> 
175                                                <#assign productName = "Travel Rewards+" > 
176                                                <#break> 
177                                            <#case "141"> 
178                                                <#assign productURL = "college-real-rewards"> 
179                                                <#assign productName = "College Real Rewards" >     
180                                                <#break> 
181                                            <#case "147"> 
182                                                <#assign productURL = "max-cash-secured"> 
183                                                <#assign productName = "Max Cash Secured Card" >     
184                                                <#break> 
185                                            <#case "154"> 
186                                                <#assign productURL = "202305/reserve-rewards-plus"> 
187                                                <#assign productName = "Reserve Rewards+" > 
188                                                <#break> 
189                                            <#case "121"> 
190                                                <#assign productURL = "202208/business-platinum"> 
191                                                <#assign productName = "Business Card" > 
192                                                <#break> 
193                                            <#case "128"> 
194                                                <#assign productURL = "business-cash-preferred"> 
195                                                <#assign productName = "Business Cash Preferred" > 
196                                                <#break> 
197                                            <#case "143"> 
198                                                <#assign productURL = "business-real-rewards"> 
199                                                <#assign productName = "Business Real Rewards Card" > 
200                                                <#break> 
201                                            <#case "144"> 
202                                                <#assign productURL = "smart-business-rewards"> 
203                                                <#assign productName = "Smart Business Rewards Card" >     
204                                                <#break> 
205                                            <#default>                                                         
206                                        </#switch> 
207                                        <#if url?matches(".*/${productURL}\\?.*")> 
208                                            <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li> 
209                                        <#else>                                 
210                                            <li class="dropdown-item" data-value="${productName}"> 
211                                                <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}"> 
212                                                ${productName}  
213                                                </a> 
214                                            </li>                                    
215                                        </#if> 
216                                    </#list> 
217                                </ul> 
218                            </nav> 
219                             
220                        </div> 
221                    </#if> 
222                </header> 
223                <script> 
224                    function toggleFlyOutMenu() { 
225                        $('.styled-select').toggleClass('show-select'); 
226                        var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded'); 
227                        if(ariaExpanded !== null) { 
228                            var isAriaExpanded; 
229                            if(ariaExpanded === "true") { 
230                                isAriaExpanded = true; 
231                            } else {  
232                                isAriaExpanded = false  
233
234                            $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded); 
235                            const ariaLabel = isAriaExpanded? "Open page navigation menu" : "Close page navigation menu"; 
236                            $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded).attr('aria-label', ariaLabel); 
237
238
239                    AUI().ready(function () { 
240                        var pageSelected = $('.selected').attr('data-value'); 
241                        $('.jn-hamburger, .dropdown-select').click(function () { 
242                            toggleFlyOutMenu(); 
243                        }); 
244                        $('.styled-select__dropdown').keydown(function(event) { 
245                            var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first(); 
246                            var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last(); 
247 
248                            if(event.keyCode === 9 ) { 
249                                // if they tab outside of the nav close the navigation 
250                                //shift + tab pressed 
251                                if(event.shiftKey && firstNavigationLink.is(document.activeElement)) { 
252                                    toggleFlyOutMenu(); 
253                                } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) { 
254                                    toggleFlyOutMenu(); 
255                                }                             
256
257                        }); 
258                        $('.selected-option').text(pageSelected); 
259                    }); 
260                </script>            
261            </#if> 
262        </div> 
263        <script> 
264                var reportingData = {}; 
265                                                             
266                //document.addEventListener('DOMContentLoaded', function() { 
267                AUI().ready(function () { 
268                    //console.log('inside ready'); 
269                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
270                    var hostName = location.hostname;                                 
271                    function getDomainFromHostname(hostname) { 
272                        var parts = hostname.split('.'); 
273                        return parts.length === 3 ? parts[1] : parts[0]; 
274
275                    var domain = getDomainFromHostname(hostName); 
276                    var partnerName = "${partnerName!''}"; 
277                    var product = "All Cards"; 
278                    var title = ""; 
279                    var metaDesc = ""; 
280                    var m = document.createElement('meta');  
281                    switch(page) { 
282                        case "max-cash-secured": 
283                            product="Max Cash Secured Card"; 
284                            title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card"; 
285                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
286                            break;  
287                        case "max-cash": 
288                            product="Max Cash Preferred Card"; 
289                            title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card"; 
290                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select."; 
291                            break;                         
292                        case "consumer-platinum": 
293                            product="Platinum Card"; 
294                            title = "The purchasing power of Zero | "+partnerName+" Platinum Card"; 
295                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 18 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card."; 
296                            break; 
297                        case "consumer-edr": 
298                            product="Everyday Rewards+"; 
299                            title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+"; 
300                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn 15,000 when you spend $500 within the first 90 days."; 
301							break; 
302                        case "secured": 
303                            product="Secured Card"; 
304                            title = "Strengthen your finances | "+partnerName+" Secured Card"; 
305                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
306                            break; 
307                        case "college-real-rewards": 
308                            product="College Real Rewards"; 
309                            title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards"; 
310                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
311                            break; 
312                        case "smart-business-rewards": 
313                            product="Smart Business Rewards Card"; 
314                            title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card"; 
315                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card."; 
316                            break;                             
317                        case "business-cash-preferred": 
318                            product="Business Cash Preferred"; 
319                            title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred"; 
320                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
321                            break; 
322                        case "business-real-rewards": 
323                            product="Business Real Rewards Card"; 
324                            title = "Earn up to 1.5X points with no caps | "+partnerName+" Business Real Rewards Card"; 
325                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ; 
326                            break; 
327                        case "business-platinum": 
328                            product="Business Card"; 
329                            title = "Pay down your other credit card balances faster | "+partnerName+" Business Card"; 
330                            metaDesc = "Apply Today for a "+partnerName+"  Business Card. 0% Intro APR on Purchases and Balance Transfers for 18 Billing Cycles."; 
331                            break; 
332                        case "travel-rewards-plus": 
333                            product="Travel Rewards+" 
334                            title = partnerName + " | Travel Rewards+ Card"; 
335                            metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories." 
336                            break; 
337                        case "reserve-rewards-plus": 
338                            product="Reserve Rewards+" 
339                            title = partnerName + " | Reserve Rewards+ Card"; 
340                            metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card."; 
341                            break; 
342                        default:   
343                            product = "All Cards";    
344                            title = partnerName + " Credit Card Index Page";   
345                            metaDesc = "Apply Today for a "+partnerName+" Credit Card.";                      
346
347                    document.title = title; 
348                    m.name = 'description';  
349                    m.content = metaDesc;  
350                    document.head.appendChild(m); 
351 
352                    var lc = "${lc!'0'}"; 
353 
354                    /* update SiteCatalyst data object */ 
355                        reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
356                        reportingData.page_type = 'product';  
357                        reportingData.site_section = 'credit cards'; 
358                        reportingData.platform = 'microsite'; 
359                        reportingData.campaign_id = '${campaignId}'; 
360                        reportingData.location_code = lc; 
361                        reportingData.partner_name = partnerName; 
362                        reportingData.product = product; 
363                        reportingData.text_to_apply_source = '${text_to_apply_source}'; 
364                        reportingData.visitor_type = 'prospect';         
365                        reportingData.Banker_id = '0'; 
366                        reportingData.Banker_code = '0';        
367 
368 
369                    /* SiteCatalyst  pageView tracking */ 
370                        AUI().ready(function() { 
371                            if (window.publisherFW) { 
372                                //console.log("pageView"); 
373                                window.publisherFW.publishEvent("pageView", reportingData); 
374                            }  
375                        }); 
376 
377                    jQuery('.jn-button, .applyNowLink').on('click', function(e){ 
378                        var buttonName = $(this).data('button-name'); 
379                        var productName = $(this).data('product-name'); 
380                        /* SiteCatalyst  onClick tracking */ 
381                        reportingData.applyButton = buttonName; 
382                        reportingData.product = productName; 
383 
384                            if (window.publisherFW) { 
385                                //console.log('clicked', reportingData); 
386                                window.publisherFW.publishEvent("onClick", reportingData); 
387                            }   
388 
389                    }); 
390 
391                    jQuery('.applyNowLink').on('click', function(e){ 
392                        ga("send", { 
393                            hitType: "event", 
394                            eventAction: "ApplyNow", 
395                            eventCategory: "click", 
396                            eventLabel: "BottomButton" 
397                        }); 
398                    }); 
399             
400                }); 
401        </script>    
402    <#else> 
403        <script> 
404            console.log("Empty card list"); 
405            location.href = '${url404}'; 
406        </script> 
407    </#if>    
408<#else> 
409    <script> 
410        console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}"); 
411        location.href = '${url404}'; 
412    </script> 
413</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#18372542" at line 6, column 14]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#18372542" at line 6, column 1]
----
1<#assign uniqueID = randomNamespace /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign environment = url?replace('/11t3/index.*','','r')> 
5 
6<#assign lc= qstringmap["ecdma-lc"]?first>   
7<#assign lc = htmlUtil.escape(lc)> 
8<#assign lc = htmlUtil.escapeJS(lc)> 
9 
10<#assign prefix = "00000" > 
11<#assign lcWithPrefix = prefix + lc > 
12<#assign withPrefixLength = lcWithPrefix?length > 
13<#assign startHere = withPrefixLength - 5> 
14<#assign lc = lcWithPrefix?substring(startHere)> 
15 
16<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! > 
17<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
18<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
19<#assign clientProfile = clientProfileList?first> 
20<#assign partnerName = clientProfile.getMarketingNameLong()> 
21<#assign pbu = clientProfile.getPbu()> 
22<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
23<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
24 
25 
26<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&'+ pbu + '&'+subbu + '&' + lc)> 
27<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')> 
28 
29<#assign personalOfferTypes = []> 
30<#assign businessOfferTypes = []> 
31 
32<#list personalBusinessOfferTypes as pbOfferType> 
33    <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content> 
34        <#if pbOfferType.groupname == "Personal"> 
35            <#assign personalOfferTypes += [pbOfferType.offertype]> 
36        <#elseif pbOfferType.groupname == "Business"> 
37            <#assign businessOfferTypes += [pbOfferType.offertype]> 
38        </#if> 
39    </#if> 
40</#list> 
41 
42 
43<#assign productTypeValue = ""> 
44<#if productType.getData()?has_content> 
45    <#assign productKey = productType.getData()> 
46	<#assign productTypeValue = productType.optionsMap[productKey]> 
47	   
48</#if> 
49 
50<#assign personalCards = []> 
51<#assign businessCards = []>  
52<#assign finalList = []>  
53<#assign index = 0> 
54 
55<#list fiCardsData as fib> 	 
56    <#if (fib.offerType?has_content)> 
57        <#if (personalOfferTypes?seq_contains(fib.offerType))> 
58            <#assign personalCards = personalCards + fiCardsData[index..index]> 
59        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
60            <#assign businessCards = businessCards + fiCardsData[index..index]> 
61        </#if>                            
62    </#if>   
63    <#assign index = index + 1>               
64</#list>  
65 
66 
67<#if productTypeValue == "Personal"> 
68	<#list personalCards as personalCard> 
69		<#if product.getSiblings()?has_content> 
70			<#list product.getSiblings() as productItem> 
71				<#if personalCard.offerType == productItem.productOfferType.getData()> 
72				   <#assign finalList = finalList + [personalCard]> 
73				</#if> 
74			</#list> 
75		</#if>   
76	 </#list> 
77<#elseif productTypeValue == "Business"> 
78	<#list businessCards as businessCard> 
79		 <#if product.getSiblings()?has_content> 
80			<#list product.getSiblings() as productItem> 
81				<#if businessCard.offerType == productItem.productOfferType.getData()> 
82				   <#assign finalList = finalList + [businessCard]> 
83				</#if> 
84			</#list> 
85		</#if>  
86	 </#list> 
87</#if> 
88 
89<#macro renderCards finalListMacro> 
90    <#assign count = 0>   
91    <#list finalListMacro as result> 
92        <#if count < 3>   
93            <#if product.getSiblings()?has_content> 
94                <#list product.getSiblings() as productItem> 
95                    <#if result.offerType == productItem.productOfferType.getData()> 
96                         
97                        <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]> 
98                        <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''> 
99                        <div class="card"> 
100                            <div class="card__content"> 
101                                 
102                                <div class="card__content-left"> 
103                                    <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" > 
104                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" > 
105                                    <#assign cardArtImageAltText = partnerName + " " + productOfferType> 
106                                    <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
107                                     
108                                    <#if (productItem.learnMoreURL.getData())??> 
109                                            <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?ecdma-lc=${lc}"  rel="noopener noreferrer"> 
110                                                Learn More <span class="sr-only">about ${productOfferType!''}</span> 
111                                            </a> 
112                                    </#if> 
113 
114                                </div> 
115                                 
116                             
117                                <div class="card__content-right"> 
118                                    <h3 class="product-offer-type"> 
119                                        ${productOfferType?upper_case!''} 
120                                         
121                                        <#if (productItem.cardNameFootnotes.getData())??> 
122                                            <sup>${productItem.cardNameFootnotes.getData()}</sup> 
123                                        </#if> 
124                                    </h3> 
125                                     
126                                    <#if (productItem.offerCopy.getData())??> 
127                                        <div class="offer-copy"> 
128                                            ${productItem.offerCopy.getData()} 
129                                        </div> 
130                                    </#if>                                        
131                                     
132                                </div> 
133                            </div> 
134                        </div> 
135                         
136                    </#if> 
137                </#list> 
138            </#if> 
139            <#assign count = count + 1> 
140        </#if> 
141    </#list> 
142</#macro> 
143 
144<#if (finalList?? && finalList?has_content && finalList?size > 1)> 
145    <#assign count = 0> 
146    <#assign countGlider = 0> 
147    <div class="${productTypeValue}-featured-cards tier3-syn-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}"> 
148        <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2> 
149        <div class="card-container"> 
150            <@renderCards finalListMacro=finalList /> 
151        </div> 
152        <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label"> 
153            <div id="featured-glider-slides" class="featured-glider">    
154                <@renderCards finalListMacro=finalList /> 
155            </div> 
156            <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button> 
157            <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button> 
158            <div role="tablist" class="dots"></div> 
159        </div> 
160    </div> 
161</#if> 
162<style> 
163    #content .tier3-syn-featured-cards-2024 { 
164        max-width: 1336px; 
165        padding: 0 20px; 
166        margin: 0 auto; 
167
168    @media (min-width: 1376px) { 
169        #content .tier3-syn-featured-cards-2024 { 
170            margin-top: 30px; 
171
172
173    #content .tier3-syn-featured-cards-2024 .featured-glider-container { 
174        display: block !important; 
175        position: relative; 
176        margin-bottom: 20px; 
177
178    #content .tier3-syn-featured-cards-2024 .featured-glider-container .card { 
179        flex: 375px; 
180
181    @media (min-width: 1200px) { 
182        #content .tier3-syn-featured-cards-2024 .featured-glider-container { 
183            display: none !important; 
184
185
186    #content .tier3-syn-featured-cards-2024 .featured-glider { 
187        padding-top: 40px; 
188        margin-bottom: 15px; 
189        overflow-x: hidden; 
190
191    #content .tier3-syn-featured-cards-2024 .card-container { 
192        display: flex; 
193        gap: 30px; 
194        flex-wrap: nowrap; 
195        justify-content: space-between; 
196        margin-top: 40px; 
197        margin-bottom: 60px; 
198        display: none !important; 
199        justify-content: center; 
200 
201
202    @media (min-width: 1200px) { 
203        #content .tier3-syn-featured-cards-2024 .card-container { 
204            display: flex !important; 
205
206
207    #content .tier3-syn-featured-cards-2024 .card { 
208        background-color: var(--ecdma-bg-color); 
209        border-radius: 10px; 
210        padding: 0 20px 15px 20px; 
211        margin: 0 20px; 
212        flex: 33%; 
213        flex-grow: 0; 
214
215    @media (min-width: 1200px) { 
216        #content .tier3-syn-featured-cards-2024 .card { 
217            margin: 0; 
218
219
220    #content .tier3-syn-featured-cards-2024 .card__content { 
221        display: flex; 
222        height: 100%; 
223
224    #content .tier3-syn-featured-cards-2024 .card__content-left { 
225        display: flex; 
226        flex-direction: column; 
227        margin-right: 20px; 
228        justify-content: space-between; 
229        height: 100%; 
230
231    #content .tier3-syn-featured-cards-2024 .card__content-right { 
232        flex: 1; 
233        margin-top: 20px; 
234
235    #content .tier3-syn-featured-cards-2024 .card__image { 
236        border-radius: 12px; 
237        width: 100%; 
238        height: auto; 
239        border-radius: 8px; 
240        max-width: 112px !important; 
241        max-height: 112px; 
242        margin-top: -10px; 
243        object-fit: contain; 
244
245    #content .tier3-syn-featured-cards-2024 .card__image--vertical { 
246        margin-top: -20px; 
247
248    #content .tier3-syn-featured-cards-2024 .product-offer-type { 
249        margin-bottom: 6px; 
250        color: white; 
251        letter-spacing: 1px; 
252        font-size: 13px; 
253        font-weight: 400; 
254        line-height: 1.5; 
255
256    #content .tier3-syn-featured-cards-2024 .product-offer-type sup { 
257        font-size: 10px; 
258        line-height: 13px; 
259
260    #content .tier3-syn-featured-cards-2024 .offer-copy { 
261        color: white; 
262
263    #content .tier3-syn-featured-cards-2024 .card__learn-more { 
264        background-color: #fff; 
265        border: 1px solid white; 
266        color: var(--ecdma-text-color); 
267        font-size: 13px; 
268        cursor: pointer; 
269        text-decoration: none; 
270        text-align: center; 
271        text-transform: capitalize; 
272        line-height: 15px; 
273        margin-top: 5px; 
274        min-width: 112px; 
275        height: 35px; 
276        line-height: 35px; 
277
278    #content .tier3-syn-featured-cards-2024 .card__learn-more:hover { 
279        background-color: var(--ecdma-hover-color); 
280        color: #fff; 
281
282    #content .tier3-syn-featured-cards-2024 .card__learn-more:focus { 
283        outline: 1px solid white; 
284        outline-offset: 3px; 
285
286</style> 
287<script> 
288/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */ 
289(() => { 
290    let featuredGlider = null; 
291    if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')) { 
292        featuredGlider = new Glider(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider'), { 
293            slidesToShow: 'auto', 
294            itemWidth: 375, 
295            slidesToScroll: 1, 
296            scrollLockDelay: 100, 
297            draggable: true, 
298            scrollLock: true, 
299            arrows: { 
300                prev: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-prev', 
301                next: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-next' 
302            }, 
303            dots: '#${uniqueID}.tier3-syn-featured-cards-2024 .dots', 
304        });  
305
306    const images = document.querySelectorAll('#${uniqueID}.tier3-syn-featured-cards-2024 .card__image'); 
307        images.forEach(img => { 
308            const width = img.naturalWidth; 
309            const height = img.naturalHeight;   
310            if(height > width) { 
311                img.classList.add('card__image--vertical'); 
312
313        });   
314 
315    AUI().ready(() => { 
316        /* Make the slider the correct size after the theme and everything is loaded*/ 
317        if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')){ 
318            featuredGlider.refresh(false); 
319
320 
321        const productTypeValue = '${productTypeValue}'; 
322        const thisTabSelector =  productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business'; 
323        /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */ 
324        document.querySelectorAll(thisTabSelector).forEach(tab => { 
325            tab.onclick = () => { 
326                setTimeout(() => {featuredGlider.refresh(false);}, 0); 
327            }; 
328        });   
329    }) 
330})(); 
331</script> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#18372542" at line 6, column 14]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#18372542" at line 6, column 1]
----
1<#assign uniqueID = randomNamespace /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign environment = url?replace('/11t3/index.*','','r')> 
5 
6<#assign lc= qstringmap["ecdma-lc"]?first>   
7<#assign lc = htmlUtil.escape(lc)> 
8<#assign lc = htmlUtil.escapeJS(lc)> 
9 
10<#assign prefix = "00000" > 
11<#assign lcWithPrefix = prefix + lc > 
12<#assign withPrefixLength = lcWithPrefix?length > 
13<#assign startHere = withPrefixLength - 5> 
14<#assign lc = lcWithPrefix?substring(startHere)> 
15 
16<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! > 
17<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
18<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
19<#assign clientProfile = clientProfileList?first> 
20<#assign partnerName = clientProfile.getMarketingNameLong()> 
21<#assign pbu = clientProfile.getPbu()> 
22<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
23<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
24 
25 
26<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&'+ pbu + '&'+subbu + '&' + lc)> 
27<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')> 
28 
29<#assign personalOfferTypes = []> 
30<#assign businessOfferTypes = []> 
31 
32<#list personalBusinessOfferTypes as pbOfferType> 
33    <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content> 
34        <#if pbOfferType.groupname == "Personal"> 
35            <#assign personalOfferTypes += [pbOfferType.offertype]> 
36        <#elseif pbOfferType.groupname == "Business"> 
37            <#assign businessOfferTypes += [pbOfferType.offertype]> 
38        </#if> 
39    </#if> 
40</#list> 
41 
42 
43<#assign productTypeValue = ""> 
44<#if productType.getData()?has_content> 
45    <#assign productKey = productType.getData()> 
46	<#assign productTypeValue = productType.optionsMap[productKey]> 
47	   
48</#if> 
49 
50<#assign personalCards = []> 
51<#assign businessCards = []>  
52<#assign finalList = []>  
53<#assign index = 0> 
54 
55<#list fiCardsData as fib> 	 
56    <#if (fib.offerType?has_content)> 
57        <#if (personalOfferTypes?seq_contains(fib.offerType))> 
58            <#assign personalCards = personalCards + fiCardsData[index..index]> 
59        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
60            <#assign businessCards = businessCards + fiCardsData[index..index]> 
61        </#if>                            
62    </#if>   
63    <#assign index = index + 1>               
64</#list>  
65 
66 
67<#if productTypeValue == "Personal"> 
68	<#list personalCards as personalCard> 
69		<#if product.getSiblings()?has_content> 
70			<#list product.getSiblings() as productItem> 
71				<#if personalCard.offerType == productItem.productOfferType.getData()> 
72				   <#assign finalList = finalList + [personalCard]> 
73				</#if> 
74			</#list> 
75		</#if>   
76	 </#list> 
77<#elseif productTypeValue == "Business"> 
78	<#list businessCards as businessCard> 
79		 <#if product.getSiblings()?has_content> 
80			<#list product.getSiblings() as productItem> 
81				<#if businessCard.offerType == productItem.productOfferType.getData()> 
82				   <#assign finalList = finalList + [businessCard]> 
83				</#if> 
84			</#list> 
85		</#if>  
86	 </#list> 
87</#if> 
88 
89<#macro renderCards finalListMacro> 
90    <#assign count = 0>   
91    <#list finalListMacro as result> 
92        <#if count < 3>   
93            <#if product.getSiblings()?has_content> 
94                <#list product.getSiblings() as productItem> 
95                    <#if result.offerType == productItem.productOfferType.getData()> 
96                         
97                        <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]> 
98                        <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''> 
99                        <div class="card"> 
100                            <div class="card__content"> 
101                                 
102                                <div class="card__content-left"> 
103                                    <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" > 
104                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" > 
105                                    <#assign cardArtImageAltText = partnerName + " " + productOfferType> 
106                                    <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
107                                     
108                                    <#if (productItem.learnMoreURL.getData())??> 
109                                            <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?ecdma-lc=${lc}"  rel="noopener noreferrer"> 
110                                                Learn More <span class="sr-only">about ${productOfferType!''}</span> 
111                                            </a> 
112                                    </#if> 
113 
114                                </div> 
115                                 
116                             
117                                <div class="card__content-right"> 
118                                    <h3 class="product-offer-type"> 
119                                        ${productOfferType?upper_case!''} 
120                                         
121                                        <#if (productItem.cardNameFootnotes.getData())??> 
122                                            <sup>${productItem.cardNameFootnotes.getData()}</sup> 
123                                        </#if> 
124                                    </h3> 
125                                     
126                                    <#if (productItem.offerCopy.getData())??> 
127                                        <div class="offer-copy"> 
128                                            ${productItem.offerCopy.getData()} 
129                                        </div> 
130                                    </#if>                                        
131                                     
132                                </div> 
133                            </div> 
134                        </div> 
135                         
136                    </#if> 
137                </#list> 
138            </#if> 
139            <#assign count = count + 1> 
140        </#if> 
141    </#list> 
142</#macro> 
143 
144<#if (finalList?? && finalList?has_content && finalList?size > 1)> 
145    <#assign count = 0> 
146    <#assign countGlider = 0> 
147    <div class="${productTypeValue}-featured-cards tier3-syn-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}"> 
148        <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2> 
149        <div class="card-container"> 
150            <@renderCards finalListMacro=finalList /> 
151        </div> 
152        <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label"> 
153            <div id="featured-glider-slides" class="featured-glider">    
154                <@renderCards finalListMacro=finalList /> 
155            </div> 
156            <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button> 
157            <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button> 
158            <div role="tablist" class="dots"></div> 
159        </div> 
160    </div> 
161</#if> 
162<style> 
163    #content .tier3-syn-featured-cards-2024 { 
164        max-width: 1336px; 
165        padding: 0 20px; 
166        margin: 0 auto; 
167
168    @media (min-width: 1376px) { 
169        #content .tier3-syn-featured-cards-2024 { 
170            margin-top: 30px; 
171
172
173    #content .tier3-syn-featured-cards-2024 .featured-glider-container { 
174        display: block !important; 
175        position: relative; 
176        margin-bottom: 20px; 
177
178    #content .tier3-syn-featured-cards-2024 .featured-glider-container .card { 
179        flex: 375px; 
180
181    @media (min-width: 1200px) { 
182        #content .tier3-syn-featured-cards-2024 .featured-glider-container { 
183            display: none !important; 
184
185
186    #content .tier3-syn-featured-cards-2024 .featured-glider { 
187        padding-top: 40px; 
188        margin-bottom: 15px; 
189        overflow-x: hidden; 
190
191    #content .tier3-syn-featured-cards-2024 .card-container { 
192        display: flex; 
193        gap: 30px; 
194        flex-wrap: nowrap; 
195        justify-content: space-between; 
196        margin-top: 40px; 
197        margin-bottom: 60px; 
198        display: none !important; 
199        justify-content: center; 
200 
201
202    @media (min-width: 1200px) { 
203        #content .tier3-syn-featured-cards-2024 .card-container { 
204            display: flex !important; 
205
206
207    #content .tier3-syn-featured-cards-2024 .card { 
208        background-color: var(--ecdma-bg-color); 
209        border-radius: 10px; 
210        padding: 0 20px 15px 20px; 
211        margin: 0 20px; 
212        flex: 33%; 
213        flex-grow: 0; 
214
215    @media (min-width: 1200px) { 
216        #content .tier3-syn-featured-cards-2024 .card { 
217            margin: 0; 
218
219
220    #content .tier3-syn-featured-cards-2024 .card__content { 
221        display: flex; 
222        height: 100%; 
223
224    #content .tier3-syn-featured-cards-2024 .card__content-left { 
225        display: flex; 
226        flex-direction: column; 
227        margin-right: 20px; 
228        justify-content: space-between; 
229        height: 100%; 
230
231    #content .tier3-syn-featured-cards-2024 .card__content-right { 
232        flex: 1; 
233        margin-top: 20px; 
234
235    #content .tier3-syn-featured-cards-2024 .card__image { 
236        border-radius: 12px; 
237        width: 100%; 
238        height: auto; 
239        border-radius: 8px; 
240        max-width: 112px !important; 
241        max-height: 112px; 
242        margin-top: -10px; 
243        object-fit: contain; 
244
245    #content .tier3-syn-featured-cards-2024 .card__image--vertical { 
246        margin-top: -20px; 
247
248    #content .tier3-syn-featured-cards-2024 .product-offer-type { 
249        margin-bottom: 6px; 
250        color: white; 
251        letter-spacing: 1px; 
252        font-size: 13px; 
253        font-weight: 400; 
254        line-height: 1.5; 
255
256    #content .tier3-syn-featured-cards-2024 .product-offer-type sup { 
257        font-size: 10px; 
258        line-height: 13px; 
259
260    #content .tier3-syn-featured-cards-2024 .offer-copy { 
261        color: white; 
262
263    #content .tier3-syn-featured-cards-2024 .card__learn-more { 
264        background-color: #fff; 
265        border: 1px solid white; 
266        color: var(--ecdma-text-color); 
267        font-size: 13px; 
268        cursor: pointer; 
269        text-decoration: none; 
270        text-align: center; 
271        text-transform: capitalize; 
272        line-height: 15px; 
273        margin-top: 5px; 
274        min-width: 112px; 
275        height: 35px; 
276        line-height: 35px; 
277
278    #content .tier3-syn-featured-cards-2024 .card__learn-more:hover { 
279        background-color: var(--ecdma-hover-color); 
280        color: #fff; 
281
282    #content .tier3-syn-featured-cards-2024 .card__learn-more:focus { 
283        outline: 1px solid white; 
284        outline-offset: 3px; 
285
286</style> 
287<script> 
288/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */ 
289(() => { 
290    let featuredGlider = null; 
291    if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')) { 
292        featuredGlider = new Glider(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider'), { 
293            slidesToShow: 'auto', 
294            itemWidth: 375, 
295            slidesToScroll: 1, 
296            scrollLockDelay: 100, 
297            draggable: true, 
298            scrollLock: true, 
299            arrows: { 
300                prev: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-prev', 
301                next: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-next' 
302            }, 
303            dots: '#${uniqueID}.tier3-syn-featured-cards-2024 .dots', 
304        });  
305
306    const images = document.querySelectorAll('#${uniqueID}.tier3-syn-featured-cards-2024 .card__image'); 
307        images.forEach(img => { 
308            const width = img.naturalWidth; 
309            const height = img.naturalHeight;   
310            if(height > width) { 
311                img.classList.add('card__image--vertical'); 
312
313        });   
314 
315    AUI().ready(() => { 
316        /* Make the slider the correct size after the theme and everything is loaded*/ 
317        if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')){ 
318            featuredGlider.refresh(false); 
319
320 
321        const productTypeValue = '${productTypeValue}'; 
322        const thisTabSelector =  productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business'; 
323        /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */ 
324        document.querySelectorAll(thisTabSelector).forEach(tab => { 
325            tab.onclick = () => { 
326                setTimeout(() => {featuredGlider.refresh(false);}, 0); 
327            }; 
328        });   
329    }) 
330})(); 
331</script> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#460256133" at line 3, column 14]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#460256133" at line 3, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign lc= qstringmap["ecdma-lc"]?first>   
4<#assign lc = htmlUtil.escape(lc)> 
5<#assign lc = htmlUtil.escapeJS(lc)> 
6 
7<#assign prefix = "00000" > 
8<#assign lcWithPrefix = prefix + lc > 
9<#assign withPrefixLength = lcWithPrefix?length > 
10<#assign startHere = withPrefixLength - 5> 
11<#assign lc = lcWithPrefix?substring(startHere)> 
12 
13<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! > 
14<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
15<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
16<#assign clientProfile = clientProfileList?first> 
17<#assign pbu = clientProfile.getPbu()> 
18<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
19<#assign fiCardsDataWT = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)> 
20<#assign personalBusinessWT = utilServ.makeCall('SAA_PillGrouping', '0')> 
21<#assign personalWT = []> 
22<#assign businessWT = []> 
23 
24<#list personalBusinessWT as pbWT> 
25    <#if pbWT.groupName?has_content && pbWT.offerType?has_content && pbWT.pillName?has_content>		<#if pbWT.groupName == "Personal"> 
26            <#assign personalWT += [pbWT]> 
27			 
28        <#elseif pbWT.groupName == "Business"> 
29            <#assign businessWT += [pbWT]> 
30			 
31        </#if> 
32    </#if> 
33</#list> 
34 
35 
36<#assign fiPersonalRaw = personalWT?filter(personalPill -> fiCardsDataWT?filter(fib -> personalPill.offerType == fib.offerType)?size > 0)> 
37<#assign fiBusinessRaw = businessWT?filter(businessPill -> fiCardsDataWT?filter(fib -> businessPill.offerType == fib.offerType)?size > 0)> 
38 
39<#assign fiPersonalWT = []> 
40<#list fiPersonalRaw as item> 
41    <#if !(fiPersonalWT?map(it -> it.offerType)?seq_contains(item.offerType))> 
42        <#assign fiPersonalWT += [item]> 
43    </#if> 
44</#list> 
45 
46<#assign fiBusinessWT = []> 
47<#list fiBusinessRaw as item> 
48    <#if !(fiBusinessWT?map(it -> it.offerType)?seq_contains(item.offerType))> 
49        <#assign fiBusinessWT += [item]> 
50    </#if> 
51</#list> 
52 
53<#assign fiPersonalSizeWT = fiPersonalWT?size /> 
54<#assign fiBusinessSizeWT = fiBusinessWT?size /> 
55 
56<#assign hasTabs = entries?has_content> 
57<#assign PersonalTab = "Personal"> 
58<#assign BusinessTab = "Business"> 
59 
60<#if hasTabs> 
61    <div class="Tier3-Syn-Tabs-2024-Feature"> 
62		<#if (fiPersonalSizeWT > 0 && fiBusinessSizeWT >0 ) > 
63			<div role="tablist" class="card-type-tabs" aria-label="Choose a credit card type to explore details">	 
64				<button  
65					id="tab-Personal"  
66					role="tab"  
67					class="card-type-tabs__button"  
68					aria-selected="true"  
69					aria-controls="content-Personal"  
70					data-tab="content-Personal"> 
71					${PersonalTab} 
72				</button>		 
73				<button  
74					id="tab-Business"  
75					role="tab"  
76					class="card-type-tabs__button"  
77					aria-selected="false"  
78					aria-controls="content-Business"  
79					data-tab="content-Business"> 
80					${BusinessTab} 
81				</button> 
82			</div> 
83		</#if> 
84		<div class="all-card-types-content"> 
85			<#if (fiPersonalSizeWT > 0)> 
86				<div  
87					id="content-Personal"  
88					class="card-type-content"  
89					role="tabpanel"  
90					aria-labelledby="tab-Personal"  
91					style="display: block;"> 
92					 
93					<#list entries as entry> 
94						<#if entry_index == 0>  
95							<#assign assetRenderer = entry.getAssetRenderer() /> 
96							<@liferay_journal["journal-article"] 
97								articleId=assetRenderer.getAssetObject().articleId 
98								ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey 
99								groupId=assetRenderer.getAssetObject().groupId /> 
100						</#if> 
101					</#list> 
102				</div> 
103			</#if> 
104			<#if (fiBusinessSizeWT > 0)> 
105				<div  
106					id="content-Business"  
107					class="card-type-content"  
108					role="tabpanel"  
109					aria-labelledby="tab-Business"  
110					style="display: none;"> 
111					 
112					<#list entries as entry> 
113						<#if entry_index == 1>  
114							<#assign assetRenderer = entry.getAssetRenderer() /> 
115							<@liferay_journal["journal-article"] 
116								articleId=assetRenderer.getAssetObject().articleId 
117								ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey 
118								groupId=assetRenderer.getAssetObject().groupId /> 
119						</#if> 
120					</#list> 
121				</div> 
122			</#if> 
123		</div> 
124	</div> 
125</#if> 
126 
127<script> 
128	AUI().ready(() => { 
129		if(${fiPersonalSizeWT} > 0) { 
130			hideOrShowDisclaimers("Personal"); 
131		} else { 
132			hideOrShowDisclaimers("Business"); 
133
134		if (window.location.hash === '#business') { 
135			const businessTab = document.getElementById('tab-Business'); 
136			if (businessTab) { 
137				businessTab.click(); 
138
139
140	}); 
141	function setPillAndSelectToDefault() { 
142		const buttons = document.querySelectorAll('.Tier3-Syn-Tabs-2024 .card-feature-pills__button'); 
143		buttons.forEach(button => { 
144			button.classList.remove('active'); 
145			button.setAttribute('aria-selected', 'false'); 
146		}); 
147 
148		buttons.forEach(button => { 
149			if (button.getAttribute('data-pill') === 'All Cards') { 
150				button.classList.add('active'); 
151				button.setAttribute('aria-selected', 'true'); 
152
153		}); 
154 
155		const cardFeatureSelect = document.querySelectorAll('.Tier3-Syn-Tabs-2024 .card-feature-select' ); 
156		cardFeatureSelect.forEach(select=> { 
157			if(select.value) { 
158				select.value = 'All Cards'; 
159
160		}); 
161
162	document.addEventListener("DOMContentLoaded", function () { 
163		const tabs = document.querySelectorAll(".card-type-tabs__button"); 
164		const tabContents = document.querySelectorAll(".card-type-content");		 
165 
166		tabs.forEach((tab) => { 
167			tab.addEventListener("click", () => { 
168			 
169				tabs.forEach((t) => t.setAttribute("aria-selected", "false")); 
170 
171				tabContents.forEach((content) => { 
172					content.style.display = "none"; 
173				}); 
174 
175				tab.setAttribute("aria-selected", "true"); 
176 
177				const targetContent = document.getElementById(tab.dataset.tab); 
178				targetContent.style.display = "block"; 
179				 
180				const productType = tab.textContent.trim(); // Get the tab label as the product type 
181				widgetButtonSlection(productType);			 
182			}); 
183		}); 
184	}); 
185 
186	function widgetButtonSlection( productType) { 
187		hideOrShowFeaturedCards(productType); 
188		hideOrShowDisclaimers(productType); 
189		hideAllPillSections(); 
190		document.getElementById("allcards-container-"+productType).style.display = "block";	 
191		setPillAndSelectToDefault(); 
192
193	 
194	function hideAllPillSections() { 
195		document.getElementById("allcards-container-Personal").style.display = "none"; 
196		document.getElementById("cashback-container-Personal").style.display = "none"; 
197		document.getElementById("points-container-Personal").style.display = "none"; 
198		document.getElementById("travel-container-Personal").style.display = "none"; 
199		document.getElementById("noannualfee-container-Personal").style.display = "none"; 
200		document.getElementById("buildcredit-container-Personal").style.display = "none"; 
201		document.getElementById("lowintrorate-container-Personal").style.display = "none"; 
202 
203		document.getElementById("allcards-container-Business").style.display = "none"; 
204		document.getElementById("cashback-container-Business").style.display = "none"; 
205		document.getElementById("points-container-Business").style.display = "none"; 
206		document.getElementById("travel-container-Business").style.display = "none"; 
207		document.getElementById("noannualfee-container-Business").style.display = "none"; 
208		document.getElementById("buildcredit-container-Business").style.display = "none"; 
209		document.getElementById("lowintrorate-container-Business").style.display = "none"; 
210
211	 
212	function hideOrShowFeaturedCards(type) { 
213		const personalFeaturedCards = document.querySelector('.Personal-featured-cards'); 
214		const businessFeaturedCards = document.querySelector('.Business-featured-cards'); 
215 
216		if (type === "Personal") { 
217			if (personalFeaturedCards) { 
218				personalFeaturedCards.classList.remove('hide'); 
219
220			if (businessFeaturedCards) { 
221				businessFeaturedCards.classList.add('hide'); 
222
223		} else if (type === "Business") { 
224			if (businessFeaturedCards) { 
225				businessFeaturedCards.classList.remove('hide'); 
226
227			if (personalFeaturedCards) { 
228				personalFeaturedCards.classList.add('hide'); 
229
230
231
232 
233	function hideOrShowDisclaimers(type) { 
234		const personalDisclaimers = document.querySelector('.tier3-disclaimer-landing-consumer'); 
235		const businessDisclaimers = document.querySelector('.tier3-disclaimer-landing-business'); 
236		if (type === "Personal") { 
237			if (personalDisclaimers) { 
238				personalDisclaimers.classList.remove('hide'); 
239
240			if (businessDisclaimers) { 
241				businessDisclaimers.classList.add('hide'); 
242
243		} else if (type === "Business") { 
244			if (businessDisclaimers) { 
245				businessDisclaimers.classList.remove('hide'); 
246
247			if (personalDisclaimers) { 
248				personalDisclaimers.classList.add('hide'); 
249
250
251
252</script> 
253 
254<style> 
255	.Tier3-Syn-Tabs-2024-Feature { 
256		/*@include page-width-container;*/ 
257		max-width: 1336px; 
258		margin: 0 20px; 
259
260	@media (min-width: 1376px) { 
261		.Tier3-Syn-Tabs-2024-Feature { 
262			margin: 0 auto; 
263
264
265	.card-type-tabs { 
266		display: flex; 
267		justify-content: flex-start; 
268		border-bottom: 1px solid #cccccc; 
269
270 
271	.card-type-tabs__button { 
272		align-items: center; 
273		background-color: transparent; 
274		border: none; 
275		border-bottom: 4px solid transparent; 
276		color: #333; 
277		display: flex; 
278		flex-direction: column; 
279		justify-content: center; 
280		padding: 10px 30px; 
281		text-align: center; 
282		font-size: 20px; 
283		font-weight: 700; 
284		line-height: 25px;  
285		margin-bottom: -1px; 
286		flex: 1; 
287
288	@media (min-width: 992px) { 
289		.card-type-tabs__button { 
290			flex: 0; 
291
292
293	.card-type-tabs__button:focus { 
294		outline: 1px solid #173989;  
295
296	.card-type-tabs__button[aria-selected="true"] { 
297		color: var(--ecdma-text-color); 
298		border-bottom: 4px solid  var(--ecdma-text-color); 
299
300	.card-type-tabs__button:hover { 
301		color: var(--ecdma-hover-color); 
302		border-bottom: 4px solid  var(--ecdma-hover-color); 
303
304 
305	.all-card-types-content { 
306
307 
308	.card-type-content { 
309		display: none; 
310
311 
312	.card-type-content[style="display: block;"] { 
313		display: block !important; 
314
315 
316</style> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#18387094" at line 5, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#18387094" at line 5, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4 
5<#assign lc = qstringmap["ecdma-lc"]?first>   
6<#assign lc = htmlUtil.escape(lc)> 
7<#assign lc = htmlUtil.escapeJS(lc)> 
8 
9<#assign prefix = "00000" > 
10<#assign lcWithPrefix = prefix + lc > 
11<#assign withPrefixLength = lcWithPrefix?length > 
12<#assign startHere = withPrefixLength - 5> 
13<#assign lc = lcWithPrefix?substring(startHere)> 
14<#if lc?has_content> 
15 
16    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
17    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
18    <#assign clientProfile = clientProfileList?first> 
19    <#assign partnerName = clientProfile.getMarketingNameLong()> 
20 
21    <#assign pbu = clientProfile.getPbu()> 
22    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
23	 
24	<#assign fultonBankpbu = "0727491"> 
25	<#if pbu == fultonBankpbu> 
26		<style> 
27			#hideFultonInfo { 
28				display: none; 
29
30		</style> 
31	</#if> 
32	 
33    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
34    <#if (fiCardsData?size > 0) > 
35        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
36 
37        <#if (cardProvider?size > 0)> 
38            <#-- This will be V for visa or M for mastercard. --> 
39            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
40        <#else> 
41            <script> 
42                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
43            </script> 
44        </#if> 
45 
46        <div class="page-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer"> 
47            <div class="page-disclaimer__content"> 
48				<#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerBank.getData()?has_content> 
49						${disclaimerBank.getData()} 
50				<#else> 
51                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
52                    ${disclaimersVisa.getData()} 
53                </#if> 
54                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
55                    ${disclaimersMasterCard.getData()} 
56                </#if> 
57			</#if> 
58            </div> 
59        </div> 
60    <#else> 
61        <script> 
62            console.log("card data empty"); 
63        </script> 
64    </#if> 
65<#else> 
66    <script> 
67        console.log("No lc for disclaimer"); 
68    </script> 
69</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#18387094" at line 5, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#18387094" at line 5, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4 
5<#assign lc = qstringmap["ecdma-lc"]?first>   
6<#assign lc = htmlUtil.escape(lc)> 
7<#assign lc = htmlUtil.escapeJS(lc)> 
8 
9<#assign prefix = "00000" > 
10<#assign lcWithPrefix = prefix + lc > 
11<#assign withPrefixLength = lcWithPrefix?length > 
12<#assign startHere = withPrefixLength - 5> 
13<#assign lc = lcWithPrefix?substring(startHere)> 
14<#if lc?has_content> 
15 
16    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
17    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
18    <#assign clientProfile = clientProfileList?first> 
19    <#assign partnerName = clientProfile.getMarketingNameLong()> 
20 
21    <#assign pbu = clientProfile.getPbu()> 
22    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
23	 
24	<#assign fultonBankpbu = "0727491"> 
25	<#if pbu == fultonBankpbu> 
26		<style> 
27			#hideFultonInfo { 
28				display: none; 
29
30		</style> 
31	</#if> 
32	 
33    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
34    <#if (fiCardsData?size > 0) > 
35        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
36 
37        <#if (cardProvider?size > 0)> 
38            <#-- This will be V for visa or M for mastercard. --> 
39            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
40        <#else> 
41            <script> 
42                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
43            </script> 
44        </#if> 
45 
46        <div class="page-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer"> 
47            <div class="page-disclaimer__content"> 
48				<#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerBank.getData()?has_content> 
49						${disclaimerBank.getData()} 
50				<#else> 
51                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
52                    ${disclaimersVisa.getData()} 
53                </#if> 
54                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
55                    ${disclaimersMasterCard.getData()} 
56                </#if> 
57			</#if> 
58            </div> 
59        </div> 
60    <#else> 
61        <script> 
62            console.log("card data empty"); 
63        </script> 
64    </#if> 
65<#else> 
66    <script> 
67        console.log("No lc for disclaimer"); 
68    </script> 
69</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#18387099" at line 3, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#18387099" at line 3, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>  
3<#assign lc = qstringmap["ecdma-lc"]?first> 
4<#assign lc = htmlUtil.escape(lc)> 
5<#assign lc = htmlUtil.escapeJS(lc)> 
6 
7<#if (lc?has_content && lc?length gt 5)> 
8    <#assign lc = lc[0..4] > 
9</#if> 
10<#assign lc = lc?web_safe> 
11<#assign aDateTime = .now> 
12<#assign currentYear = aDateTime?string.yyyy> 
13 
14 
15<footer class="page-footer" id="footerIdAdPlatinum"> 
16    <div class="page-footer__content"> 
17        ${footerContent.getData()} 
18    </div> 
19</footer> 
20 
21<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
22<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
23<style> 
24    #opt-out-button, 
25    .modal__btn.learn-more { 
26        background: #0C2074; 
27        border: 1px solid #0C2074; 
28        color: white; 
29        text-transform: uppercase; 
30        text-decoration: none; 
31        font-size: 16px; 
32        padding: 0.5rem 2rem; 
33        display: inline-block; 
34        border-radius: 0; 
35
36    #opt-out-button:hover, 
37    .modal__btn.learn-more:hover { 
38        color: white !important; 
39        border-color: #2C76AF !important; 
40        background-color: #2C76AF !important; 
41
42    .modal .modal__btn.learn-more { 
43        background: white; 
44        border: 1px solid #0C2074; 
45        color: #0C2074; 
46        text-decoration: none; 
47
48    #opt-out-button[disabled="true"] { 
49        background-color: rgba(0,0,0,.15); 
50        color: rgba(0,0,0,.45); 
51        border-color: rgba(0,0,0,.25); 
52
53    #opt-out-button:hover[disabled="true"] { 
54        background-color: rgba(0,0,0,.15) !important; 
55        color: rgba(0,0,0,.45) !important; 
56        border-color: rgba(0,0,0,.25) !important; 
57
58    #opt-out-button:focus { 
59        outline-style: solid; 
60        outline-color: white; 
61        outline-offset: -3px; 
62        outline-width: 1px; 
63
64    .opt-out-link svg { 
65        width: 30px; 
66        height: 14px; 
67        width: auto; 
68        vertical-align: middle; 
69
70    .modal__overlay { 
71        position: fixed; 
72        top: 0; 
73        left: 0; 
74        right: 0; 
75        bottom: 0; 
76        background: rgba(0,0,0,0.6); 
77        display: flex; 
78        justify-content: center; 
79        align-items: center; 
80
81 
82    .modal__container { 
83        background-color: #fff; 
84        padding: 30px; 
85        max-width: 500px; 
86        max-height: 100vh; 
87        border-radius: 4px; 
88        overflow-y: auto; 
89        box-sizing: border-box; 
90
91 
92    .modal__header { 
93        display: flex; 
94        justify-content: space-between; 
95        align-items: center; 
96
97 
98    .modal .modal__container .modal__title { 
99        margin-top: 0; 
100        margin-bottom: 0; 
101        font-weight: 600; 
102        font-size: 20px; 
103        line-height: 1.25; 
104        color: #00449e; 
105        box-sizing: border-box; 
106
107 
108    .modal__close { 
109        background: transparent; 
110        border: 1px solid white; 
111        padding: 4px 8px; 
112
113    .modal__close:hover { 
114        border: 1px solid black; 
115
116 
117    .modal__header .modal__close:before { content: "\2715"; } 
118 
119    .modal__content { 
120        margin-top: 2rem; 
121        margin-bottom: 2rem; 
122        line-height: 1.5; 
123
124 
125    @keyframes mmfadeIn { 
126        from { opacity: 0; } 
127        to { opacity: 1; } 
128
129 
130    @keyframes mmfadeOut { 
131        from { opacity: 1; } 
132        to { opacity: 0; } 
133
134 
135    @keyframes mmslideIn { 
136        from { transform: translateY(15%); } 
137        to { transform: translateY(0); } 
138
139 
140    @keyframes mmslideOut { 
141        from { transform: translateY(0); } 
142        to { transform: translateY(-10%); } 
143
144 
145    .micromodal-slide { 
146        display: none; 
147
148 
149    .micromodal-slide.is-open { 
150        display: block; 
151
152 
153    .micromodal-slide[aria-hidden="false"] .modal__overlay { 
154        animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
155
156 
157    .micromodal-slide[aria-hidden="false"] .modal__container { 
158        animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
159
160 
161    .micromodal-slide[aria-hidden="true"] .modal__overlay { 
162        animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
163
164 
165    .micromodal-slide[aria-hidden="true"] .modal__container { 
166        animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
167
168 
169    .micromodal-slide .modal__container, 
170    .micromodal-slide .modal__overlay { 
171        will-change: transform; 
172
173</style> 
174 
175<div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
176<div class="modal__overlay" tabindex="-1" data-micromodal-close> 
177    <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
178    <header class="modal__header"> 
179        <h2 class="modal__title" id="modal-1-title"> 
180        Your California privacy choices 
181        </h2> 
182        <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
183    </header> 
184    <div class="modal__content" id="modal-1-content"> 
185        <div id="message-no-cookie"> 
186            <p> 
187            We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p> 
188             
189<p>&nbsp;</p> 
190 
191<p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p> 
192    </div> 
193    <div id="message-with-cookie"> 
194        <p>You have successfully opted-out.</p> 
195    </div> 
196    </div> 
197    <div class="modal__footer"> 
198        <a href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a> 
199        <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
200    </div> 
201    </div> 
202</div> 
203</div> 
204<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
205<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
206<script> 
207AUI().ready(function() { 
208        //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading. 
209        const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright'); 
210        const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic'); 
211        const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement'); 
212        agreementNode.innerHTML= '<a class="text-color-white" href="https://onboarding.elancreditcard.com/usl/generic/credit-card/application/card-member-agreements?locationCode=${lc!''}" target="_blank">Cardmember Agreements</a>'; 
213        copyrightNode.innerHTML= '© Elan Financial Services ' + ${currentYear}; 
214        copyrightNode.classList.add('ecdma-footer-client-name-copyright'); 
215        fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
216        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
217        fdicNode.insertAdjacentHTML('afterend', '<div class="opt-out-container" ><a href="javascript:void(0);" class="opt-out-link" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>'); 
218        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
219 
220        window.getCookieDomain = function() { 
221            var hostname = window.location.hostname.split("."); 
222            return hostname && hostname.slice(hostname.length - 2).join("."); 
223
224        window.setToOptOut = function() { 
225            if (window.getCookie('privacy_optout')) { 
226                    document.getElementById('message-no-cookie').style.display = 'none'; 
227                    document.getElementById('message-with-cookie').style.display = 'block'; 
228                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
229                } else { 
230                    document.getElementById('message-no-cookie').style.display = 'block'; 
231                    document.getElementById('message-with-cookie').style.display = 'none'; 
232
233
234        window.getCookie = function(name) { 
235            var value = '; ' + document.cookie; 
236            var parts = value.split('; ' + name + '='); 
237            if (parts.length === 2) return parts.pop().split(';').shift(); 
238
239        window.californiaOptOut = function() { 
240            if (!window.getCookie('privacy_optout')) { 
241                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
242                try { 
243                if (window.CustomEvent) { 
244                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
245                } else { 
246                    var privacyOptoutEvent = document.createEvent('Event'); 
247                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
248                    window.dispatchEvent(privacyOptoutEvent); 
249
250                window.setToOptOut(); 
251                } catch (err) { 
252                console.error(err); 
253
254
255
256        MicroModal.init({ 
257            onShow: window.setToOptOut 
258        }); 
259     
260        // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
261        const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
262        if(isBrowserGpcOptOut === true) { 
263        window.californiaOptOut(); 
264
265    }); 
266</script> 
267<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->