An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417670" 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#153417670" 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 
45 
46<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
47<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
48<#assign clientProfile = clientProfileList?first> 
49<#assign partnerName = clientProfile.getMarketingNameLong()> 
50<#assign pbu = clientProfile.getPbu()> 
51<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
52 
53<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
54<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
55<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)> 
56 
57 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
58<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
59<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
60<script> 
61//console.log('Partner URL', ${partnerUrl}); 
62</script> 
63<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>     
64    <#assign partnerUrl = 'https://' + partnerUrl> 
65</#if> 
66<script> 
67//console.log('Partner URL', ${partnerUrl}); 
68 
69</script> 
70<#-- Begin: filter duplicated cards--> 
71<#assign temp = []> 
72<#assign offerTypeList = []>   
73<#if (fiCardsData?size > 0)>      
74    <#assign index = 0> 
75    <#list fiCardsData as fib> 
76        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>  
77            <#assign offerTypeList = offerTypeList + [fib.offerType]>                   
78            <#assign temp = temp + fiCardsData[index..index]>  
79        </#if>   
80        <#assign index = index + 1>               
81    </#list>  
82    <#assign fiCardsData = temp> 
83    <#if (fiCardsData?size > 0)> 
84        <div class="content-container content-container-main" title="${partnerName!''}"> 
85            <#if url?contains("index")> 
86                <#assign product="All Cards"> 
87                <header class="jn-header"> 
88                    <div class="header-logo">  
89 
90                        <#if partnerUrl?has_content> 
91                            <a href="${partnerUrl!''}" title="${partnerName!''}"> 
92                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
93                            </a> 
94                        <#else> 
95                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
96                        </#if> 
97                    </div>  
98                </header>         
99            <#else> 
100                <header class="jn-header"> 
101                    <div class="back-overview hide-desktop">  
102                        <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
103                    </div>  
104 
105                    <div class="header-main-logo" title="${partnerName!''}"> 
106                        <#if partnerUrl?has_content> 
107                            <a href="${partnerUrl!''}" title="${partnerName!''}"> 
108                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
109                            </a> 
110                        <#else>                            
111                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">                             
112                        </#if> 
113                    </div> 
114                    <div class="styled-select slate"> 
115                        <nav class="styled-select__dropdown"> 
116                            <div class="back-overview hide-mobile">  
117                                <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
118                            </div>   
119                            <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false"> 
120                                <span class="selected-option"></span>  
121                                <div class="jn-arrow arrow arrow-right"></div> 
122                            </a> 
123                            <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false"> 
124                                <div class="first-line transform transformed1"></div> 
125                                <div></div> 
126                                <div class="transform transformed2"></div> 
127                                <div></div> 
128                            </a> 
129                            <ul> 
130                                <#list fiCardsData as fib> 
131                                    <#switch fib.offerType> 
132                                        <#case "101"> 
133                                            <#assign productURL = "202302/consumer-edr"> 
134                                            <#assign productName = "Everyday Rewards+"> 
135                                            <#break> 
136                                        <#case "103"> 
137                                            <#assign productURL = "202302/consumer-edr"> 
138                                            <#assign productName = "Everyday Rewards+"> 
139                                            <#break> 
140                                        <#case "104"> 
141                                            <#assign productURL = "max-cash"> 
142                                            <#assign productName = "Max Cash Preferred Card">       
143                                            <#break> 
144                                        <#case "108"> 
145                                            <#assign productURL="202308/consumer-platinum"> 
146                                            <#assign productName="Platinum Card"> 
147                                            <#break> 
148                                        <#case "109"> 
149                                            <#assign productURL="202308/consumer-platinum"> 
150                                            <#assign productName="Platinum Card"> 
151                                            <#break> 
152                                        <#case "115"> 
153                                            <#assign productURL = "secured"> 
154                                            <#assign productName = "Secured Card" > 
155                                            <#break> 
156                                        <#case "138"> 
157                                            <#assign productURL = "202305/travel-rewards-plus"> 
158                                            <#assign productName = "Travel Rewards+" > 
159                                            <#break> 
160                                        <#case "141"> 
161                                            <#assign productURL = "college-real-rewards"> 
162                                            <#assign productName = "College Real Rewards" >     
163                                            <#break> 
164                                        <#case "147"> 
165                                            <#assign productURL = "max-cash-secured"> 
166                                            <#assign productName = "Max Cash Secured Card" >     
167                                            <#break> 
168                                        <#case "154"> 
169                                            <#assign productURL = "202305/reserve-rewards-plus"> 
170                                            <#assign productName = "Reserve Rewards+" > 
171                                            <#break> 
172                                        <#case "121"> 
173                                            <#assign productURL = "202208/business-platinum"> 
174                                            <#assign productName = "Business Card" > 
175                                            <#break> 
176                                        <#case "128"> 
177                                            <#assign productURL = "business-cash-preferred"> 
178                                            <#assign productName = "Business Cash Preferred" > 
179                                            <#break> 
180                                        <#case "143"> 
181                                            <#assign productURL = "business-real-rewards"> 
182                                            <#assign productName = "Business Real Rewards Card" > 
183                                            <#break> 
184                                        <#case "144"> 
185                                            <#assign productURL = "smart-business-rewards"> 
186                                            <#assign productName = "Smart Business Rewards Card" >     
187                                            <#break> 
188                                        <#default>                                                         
189                                    </#switch> 
190                                    <#if url?matches(".*/${productURL}\\?.*")> 
191                                        <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li> 
192                                    <#else>                                 
193                                        <li class="dropdown-item" data-value="${productName}"> 
194                                            <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}"> 
195                                            ${productName}  
196                                            </a> 
197                                        </li>                                    
198                                    </#if> 
199                                </#list> 
200                            </ul> 
201                        </nav> 
202                         
203                    </div> 
204                </header> 
205                <script> 
206                    function toggleFlyOutMenu() { 
207                        $('.styled-select').toggleClass('show-select'); 
208                        var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded'); 
209                        if(ariaExpanded !== null) { 
210                            var isAriaExpanded; 
211                            if(ariaExpanded === "true") { 
212                                isAriaExpanded = true; 
213                            } else {  
214                                isAriaExpanded = false  
215
216                            $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded); 
217                            $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded); 
218
219
220                    AUI().ready(function () { 
221                        var pageSelected = $('.selected').attr('data-value'); 
222                        $('.jn-hamburger, .dropdown-select').click(function () { 
223                            toggleFlyOutMenu(); 
224                        }); 
225                        $('.styled-select__dropdown').keydown(function(event) { 
226                            var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first(); 
227                            var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last(); 
228 
229                            if(event.keyCode === 9 ) { 
230                                // if they tab outside of the nav close the navigation 
231                                //shift + tab pressed 
232                                if(event.shiftKey && firstNavigationLink.is(document.activeElement)) { 
233                                    toggleFlyOutMenu(); 
234                                } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) { 
235                                    toggleFlyOutMenu(); 
236                                }                             
237
238                        }); 
239                        $('.selected-option').text(pageSelected); 
240                    }); 
241                </script>            
242            </#if> 
243        </div> 
244        <script> 
245                var reportingData = {}; 
246                                                             
247                //document.addEventListener('DOMContentLoaded', function() { 
248                AUI().ready(function () { 
249                    //console.log('inside ready'); 
250                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
251                    var hostName = location.hostname;                                 
252                    function getDomainFromHostname(hostname) { 
253                        var parts = hostname.split('.'); 
254                        return parts.length === 3 ? parts[1] : parts[0]; 
255
256                    var domain = getDomainFromHostname(hostName); 
257                    var partnerName = "${partnerName!''}"; 
258                    var product = "All Cards"; 
259                    var title = ""; 
260                    var metaDesc = ""; 
261                    var m = document.createElement('meta');  
262                    switch(page) { 
263                        case "max-cash-secured": 
264                            product="Max Cash Secured Card"; 
265                            title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card"; 
266                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
267                            break;  
268                        case "max-cash": 
269                            product="Max Cash Preferred Card"; 
270                            title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card"; 
271                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select"; 
272                            break;                         
273                        case "consumer-platinum": 
274                            product="Platinum Card"; 
275                            title = "The purchasing power of Zero | "+partnerName+" Platinum Card"; 
276                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card."; 
277                            break; 
278                        case "consumer-edr": 
279                            product="Everyday Rewards+"; 
280                            title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+"; 
281                            break; 
282                        case "secured": 
283                            product="Secured Card"; 
284                            title = "Strengthen your finances | "+partnerName+" 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 "college-real-rewards": 
288                            product="College Real Rewards"; 
289                            title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards"; 
290                            break; 
291                        case "smart-business-rewards": 
292                            product="Smart Business Rewards Card"; 
293                            title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card"; 
294                            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."; 
295                            break;                             
296                        case "business-cash-preferred": 
297                            product="Business Cash Preferred"; 
298                            title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred"; 
299                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
300                            break; 
301                        case "business-real-rewards": 
302                            product="Business Real Rewards Card"; 
303                            title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card"; 
304                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ; 
305                            break; 
306                        case "business-platinum": 
307                            product="Business Card"; 
308                            title = "Pay down your other credit card balances faster | "+partnerName+" Business Card"; 
309                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
310                            break; 
311                        case "travel-rewards-plus": 
312                            product="Travel Rewards+" 
313                            title = partnerName + " | Travel Rewards+ Card"; 
314                            metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories." 
315                            break; 
316                        case "reserve-rewards-plus": 
317                            product="Reserve Rewards+" 
318                            title = partnerName + " | Reserve Rewards+ Card"; 
319                            metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card."; 
320                            break; 
321                        default:   
322                            product = "All Cards";    
323                            title = partnerName + " Credit Card Index Page";                        
324
325                    document.title = title; 
326                    m.name = 'description';  
327                    m.content = metaDesc;  
328                    document.head.appendChild(m); 
329 
330                    var lc = "${lc!'0'}"; 
331 
332                    /* update SiteCatalyst data object */ 
333                        reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
334                        reportingData.page_type = 'product';  
335                        reportingData.site_section = 'credit cards'; 
336                        reportingData.platform = 'microsite'; 
337                        reportingData.campaign_id = '${campaignId}'; 
338                        reportingData.location_code = lc; 
339                        reportingData.partner_name = partnerName; 
340                        reportingData.product = product; 
341                        reportingData.text_to_apply_source = '${text_to_apply_source}'; 
342                        reportingData.visitor_type = 'prospect';         
343                        reportingData.Banker_id = '0'; 
344                        reportingData.Banker_code = '0';        
345 
346 
347                    /* SiteCatalyst  pageView tracking */ 
348                        AUI().ready(function() { 
349                            if (window.publisherFW) { 
350                                //console.log("pageView"); 
351                                window.publisherFW.publishEvent("pageView", reportingData); 
352                            }  
353                        }); 
354 
355                    jQuery('.jn-button, .applyNowLink').on('click', function(e){ 
356                        var buttonName = $(this).data('button-name'); 
357                        var productName = $(this).data('product-name'); 
358                        /* SiteCatalyst  onClick tracking */ 
359                        reportingData.applyButton = buttonName; 
360                        reportingData.product = productName; 
361 
362                            if (window.publisherFW) { 
363                                //console.log('clicked', reportingData); 
364                                window.publisherFW.publishEvent("onClick", reportingData); 
365                            }   
366 
367                    }); 
368 
369                    jQuery('.applyNowLink').on('click', function(e){ 
370                        ga("send", { 
371                            hitType: "event", 
372                            eventAction: "ApplyNow", 
373                            eventCategory: "click", 
374                            eventLabel: "BottomButton" 
375                        }); 
376                    }); 
377             
378                }); 
379        </script>    
380    <#else> 
381        <script> 
382            console.log("Empty card list"); 
383            location.href = '${url404}'; 
384        </script> 
385    </#if>    
386<#else> 
387    <script> 
388        console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}"); 
389        location.href = '${url404}'; 
390    </script> 
391</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417688" at line 9, 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#153417688" at line 9, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html'> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign currentEnvironment = 'prod' > 
8 
9<#assign lc= qstringmap["ecdma-lc"]?first>   
10<#assign lc = htmlUtil.escape(lc)> 
11<#assign lc = htmlUtil.escapeJS(lc)> 
12 
13<#assign prefix = "00000" > 
14<#assign lcWithPrefix = prefix + lc > 
15<#assign withPrefixLength = lcWithPrefix?length > 
16<#assign startHere = withPrefixLength - 5> 
17<#assign lc = lcWithPrefix?substring(startHere)> 
18 
19 
20<#if qstringmap["ecid"]?has_content> 
21    <#assign ecidExt = qstringmap["ecid"]?first> 
22    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
23    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
24    <#assign ecidExt = "&ecid=" + ecidExt> 
25<#else> 
26    <#assign ecidExt=""> 
27</#if> 
28<#if oadURL?contains("uat-")> 
29    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
30    <#assign currentEnvironment = 'uat' > 
31<#else> 
32    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
33</#if> 
34    <script> 
35        //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}'); 
36    </script> 
37<#assign campaignId = "" > 
38<#assign ecidExt=""> 
39<#if qstringmap["ecid"]?has_content> 
40    <#assign campaignId = qstringmap["ecid"]?first > 
41    <#assign campaignId = htmlUtil.escape(campaignId)> 
42    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
43     
44    <#assign ecidExt = qstringmap["ecid"]?first> 
45    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
46    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
47    <#assign ecidExt = "&ecid=" + ecidExt> 
48</#if> 
49 
50<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
51<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52<#assign clientProfile = clientProfileList?first> 
53<#assign partnerName = clientProfile.getMarketingNameLong()> 
54<#assign pbu = clientProfile.getPbu()> 
55<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
56<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
57 
58<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)> 
59<#assign temp = []> 
60<#assign consumerCards = []> 
61<#assign businessCards = []>  
62<#assign offerTypeList = []>       
63<#assign index = 0> 
64<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]> 
65<#assign businessOfferTypes = ["128", "121", "143", "144"]> 
66<#list fiCardsData as fib>  
67    <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
68        <#assign offerTypeList = offerTypeList + [fib.offerType]>  
69        <#if (consumerOfferTypes?seq_contains(fib.offerType))> 
70            <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
71        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
72            <#assign businessCards = businessCards + fiCardsData[index..index]> 
73        </#if>                            
74        <#assign temp = temp + fiCardsData[index..index]>  
75    </#if>   
76    <#assign index = index + 1>               
77</#list>  
78 
79<#assign fiCardsData = temp> 
80 <script> 
81    //console.log("fi card data count", ${fiCardsData?size}) 
82</script> 
83 
84<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
85<#if (clientdata?size > 0)> 
86    <#assign backgroundColor = clientdata[0].backgroundHexColor>               
87</#if> 
88 
89<#if (fiCardsData?size > 0)>    
90    <style> 
91        .excludeModal__overlay { 
92            position: fixed; 
93            top: 0; 
94            left: 0; 
95            right: 0; 
96            bottom: 0; 
97            background: rgba(0,0,0,0.6); 
98            display: flex; 
99            justify-content: center; 
100            align-items: center; 
101
102 
103        .excludeModal__container { 
104            background-color: #fff; 
105            padding: 30px; 
106            min-width: 500px; 
107            max-width: 500px; 
108            max-height: 100vh; 
109            border-radius: 4px; 
110            overflow-y: auto; 
111            box-sizing: border-box; 
112
113 
114        .excludeModal__header { 
115            display: flex; 
116            justify-content: space-between; 
117            align-items: center; 
118
119 
120        .modal .excludeModal__container .excludeModal__title { 
121            margin-top: 0; 
122            margin-bottom: 0; 
123            font-weight: 600; 
124            font-size: 20px; 
125            line-height: 1.25; 
126            color: #00449e; 
127            box-sizing: border-box; 
128
129         
130        .excludeModal__close { 
131            background: transparent; 
132            border: 1px solid white; 
133            padding: 4px 8px; 
134            float: right; 
135
136 
137        .excludeModal__close:hover { 
138            border: 1px solid black; 
139
140 
141        .excludeModal__close:before { content: "\2715"; } 
142 
143        @keyframes mmfadeIn { 
144            from { opacity: 0; } 
145            to { opacity: 1; } 
146
147 
148        @keyframes mmfadeOut { 
149            from { opacity: 1; } 
150            to { opacity: 0; } 
151
152 
153        @keyframes mmslideIn { 
154            from { transform: translateY(15%); } 
155            to { transform: translateY(0); } 
156
157 
158        @keyframes mmslideOut { 
159            from { transform: translateY(0); } 
160            to { transform: translateY(-10%); } 
161
162 
163        .micromodal-slide { 
164            display: none; 
165
166 
167        .micromodal-slide.is-open { 
168            display: block; 
169
170 
171        .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
172            animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
173
174 
175        .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
176            animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
177
178 
179        .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
180            animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
181
182 
183        .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
184            animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
185
186 
187        .micromodal-slide .excludeModal__container, 
188        .micromodal-slide .excludeModal__overlay { 
189            will-change: transform; 
190
191    </style> 
192    <#if url?contains("index")>   
193        <#assign isExcluded = 0>                
194        <#assign offerId = ""> 
195        <#assign sourceCode = ""> 
196        <#assign cardArtImage = ""> 
197        <#assign productUrlHero = ""> 
198        <#assign product = ""> 
199        <#assign cardIndex = 0> 
200        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
201            <#if (offerTypeList?seq_contains("108")) ||  (offerTypeList?seq_contains("109"))> 
202                <#list consumerCards as card> 
203                    <#if (card.offerType=="108") || (card.offerType=="109")> 
204                        <#assign isExcluded = 0> 
205                        <#if card.dmaexclude??> 
206                            <#assign isExcluded = card.dmaexclude?number!0> 
207                        </#if>  
208                        <#assign offerId = card.offerId> 
209                        <#assign sourceCode = card.sourceCode> 
210                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
211                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
212 
213                        <#assign productUrlHero="consumer-platinum2103"> 
214                        <#assign product="Platinum"> 
215                        <#assign cardIndex = 1> 
216                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)> 
217                        <#if (scrapedData?size > 0)> 
218                            <#list scrapedData as sItem> 
219                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
220                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
221                                    <#break> 
222                                </#if> 
223                            </#list> 
224                            <script> 
225                                $(document).ready(function () { 
226                                    var aprText = "${apr}"; 
227                                    //console.log('aprText: ${aprText!''}'); 
228                                    if (aprText) { 
229                                        $(".apr-full-text").html(aprText); 
230                                        try { 
231                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
232                                            var billing_cycle = matches[1]; 
233                                            var apr_min = apr_min = matches[2]; 
234                                            var apr_max = apr_max = matches[3]; 
235                                            //console.log('billing_cycle', billing_cycle); 
236                                            //console.log('apr_min', apr_min); 
237                                            //console.log('apr_max', apr_max); 
238                                            if (billing_cycle) { 
239                                                //console.log($(".scraped-billing-cycle")); 
240                                                $(".scraped-billing-cycle").html(billing_cycle); 
241
242                                            if (apr_min) { 
243                                                $(".scraped-apr-min").html(apr_min); 
244
245                                            if (apr_max) { 
246                                                $('.scraped-apr-max').html(apr_max); 
247
248 
249                                        } catch (e) { 
250                                            console.log(e); 
251
252
253                                }); 
254                            </script> 
255                        </#if> 
256                        <script> 
257                            $(document).ready(function () { 
258                                $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${card.offerId}&locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions</a>'); 
259                            }); 
260                        </script> 
261                    </#if>                   
262                </#list> 
263            <#else> 
264                <#assign isExcluded = 0> 
265                <#if consumerCards[0].dmaexclude??> 
266                    <#assign isExcluded = consumerCards[0].dmaexclude?number!0> 
267                </#if>    
268                <#assign displayedCard = consumerCards[0]> 
269                <#assign offerId = displayedCard.offerId> 
270                <#assign sourceCode = displayedCard.sourceCode> 
271                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
272                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
273                <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")> 
274                    <#assign productUrlHero="consumer-platinum"> 
275                    <#assign product="Platinum"> 
276                    <#assign cardIndex = 1> 
277                <#elseif (displayedCard.offerType=="104")> 
278                    <#assign productUrlHero = "max-cash"> 
279                    <#assign product="Max Cash Preferred"> 
280                    <#assign cardIndex = 0> 
281                <#elseif (displayedCard.offerType=="115")> 
282                    <#assign productUrlHero = "secured"> 
283                    <#assign product="Secured"> 
284                    <#assign cardIndex = 2> 
285                </#if> 
286            </#if> 
287            <#if product?has_content && product != ""> 
288                <#assign card_text = product + " Card"> 
289            </#if>  
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign isExcluded = 0> 
296                        <#if card.dmaexclude??> 
297                            <#assign isExcluded = card.dmaexclude?number!0>  
298                        </#if> 
299                        <#assign offerId = card.offerId> 
300                        <#assign sourceCode = card.sourceCode> 
301                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
302                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
303 
304                        <#assign productUrlHero="business-cash-preferred"> 
305                        <#assign product="Business Cash Preferred"> 
306                        <#assign cardIndex = 1> 
307                    </#if> 
308                </#list> 
309            <#else> 
310                <#assign isExcluded = 0> 
311                <#if businessCards[0].dmaexclude??> 
312                    <#assign isExcluded = businessCards[0].dmaexclude?number!0> 
313                </#if>  
314                <#assign displayedCard = businessCards[0]> 
315                <#assign offerId = displayedCard.offerId> 
316                <#assign sourceCode = displayedCard.sourceCode> 
317                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
318                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
319                <#if (displayedCard.offerType=="143")> 
320                    <#assign productUrlHero="business-real-rewards"> 
321                    <#assign product="Business Real Rewards"> 
322                    <#assign cardIndex = 2> 
323                <#elseif (displayedCard.offerType=="144")> 
324                    <#assign productUrlHero="smart-business-rewards"> 
325                    <#assign product="Smart Business Rewards"> 
326                    <#assign cardIndex = 0> 
327                <#elseif (displayedCard.offerType=="121")> 
328                    <#assign productUrlHero = "business-platinum"> 
329                    <#assign product="Business"> 
330                    <#assign cardIndex = 3>                     
331                </#if> 
332            </#if> 
333            <#if product?has_content && product != ""> 
334                <#assign card_text = product + " Card"> 
335            </#if>  
336        </#if>		 
337            <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}"> 
338                <div class="hero-main"> 
339                    <div class="hero-main-container"> 
340                        <div class="hero-main-offer"> 
341                            <div class="offer-detail"> 
342                                <div class="offer-detail-cardArt cardArtImg"> 
343                                    <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
344                                    class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">  
345                                    <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }" 
346                                     class="jn-img-responsive">--> 
347                                    <p>${card_text!''}</p> 
348                                </div> 
349                                <div class="offer-detail-text text-color-default hide-desktop"> 
350                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                 
351                                </div>                                                                        
352                                <#if isExcluded == 0>                                                                                  
353                                    <a  
354                                        class="jn-button hide-desktop btn"  
355                                        data-button-name="cta-button-top"  
356                                        data-product-name="${productUrlHero!''}"  
357                                        href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"                                    
358
359                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
360                                    </a> 
361                                <#else> 
362                                    <a  
363                                        class="jn-button hide-desktop btn"  
364                                        data-button-name="cta-button-top"  
365                                        data-product-name="${productUrlHero!''}"  
366                                        data-micromodal-trigger="modal-index-hero" 
367                                        href="javascript:void(0);" 
368
369                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
370                                    </a> 
371                                </#if> 
372                            </div> 
373                            <div class="offer-header"> 
374                                <div class="offer-text-top"> 
375                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
376                                </div> 
377                                <div class="offer-text-bottom hide-mobile"> 
378                                    <div class="offer-detail-text text-color-default "> 
379                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                        
380                                    </div> 
381                                     
382                                    <#if isExcluded == 0>                                                                                  
383                                        <a  
384                                            class="jn-button"  
385                                            data-button-name="cta-button-top"  
386                                            data-product-name="${productUrlHero!''}" 
387                                            href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"  
388
389                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
390                                        </a> 
391                                    <#else> 
392                                        <a  
393                                            class="jn-button"  
394                                            data-button-name="cta-button-top"  
395                                            data-product-name="${productUrlHero!''}" 
396                                            data-micromodal-trigger="modal-index-hero" 
397                                            href="javascript:void(0);" 
398
399                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
400                                        </a> 
401                                    </#if> 
402                                </div> 
403                            </div>                           
404                        </div> 
405                    </div> 
406                </div> 
407            </div> 
408 
409            <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" > 
410                <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
411                    <div  
412                        aria-modal="true"  
413                        aria-labelledby="modal-index-hero-title"  
414                        class="excludeModal__container"  
415                        role="dialog" 
416
417                        <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
418                        <header class="excludeModal__header"> 
419                            <h2 class="excludeModal__title" id="modal-index-hero-title"> 
420                                <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
421                                    ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
422                                </#if> 
423                            </h2> 
424                        </header> 
425                    </div> 
426                </div> 
427            </div> 
428    <#else>      
429        <#assign hasBalanceTransferCalculator = false> 
430        <#list fiCardsData as fib>     
431            <#switch fib.offerType>     
432                <#case "101"> 
433                    <#assign cardIndex = 3 > 
434                    <#assign productUrlHero = "consumer-edr"> 
435                    <#assign product="Everyday Rewards+">                     
436                    <#assign hasBalanceTransferCalculator = false>                   
437                    <#break>  
438                <#case "103">              
439                    <#assign cardIndex = 3 > 
440                    <#assign productUrlHero = "consumer-edr"> 
441                    <#assign product="Everyday Rewards+">                     
442                     <#assign hasBalanceTransferCalculator = false>                   
443                   <#break>          
444                <#case "104"> 
445                    <#assign cardIndex = 0 > 
446                    <#assign productUrlHero="max-cash"> 
447                    <#assign product="Max Cash Preferred">                       
448                    <#assign hasBalanceTransferCalculator = false>                   
449                    <#break> 
450                <#case "108"> 
451                    <#assign cardIndex = 1 > 
452                    <#assign productUrlHero = "consumer-platinum"> 
453                    <#assign product="Platinum">     
454                    <#assign hasBalanceTransferCalculator = true>                   
455                    <#break> 
456                <#case "109"> 
457                    <#assign cardIndex = 1 > 
458                    <#assign productUrlHero = "consumer-platinum"> 
459                    <#assign product="Platinum">    
460                    <#assign hasBalanceTransferCalculator = true>                                                          
461                    <#break>                                         
462                 <#case "141">                  
463                    <#assign cardIndex = 4 > 
464                    <#assign productUrlHero = "college-real-rewards"> 
465                    <#assign product = "College Real Rewards" >  
466                     <#assign hasBalanceTransferCalculator = false>                   
467                   <#break>  
468                <#case "147"> 
469                    <#assign cardIndex = 5 > 
470                    <#assign productUrlHero = "max-cash-secured"> 
471                    <#assign product = "Max Cash Secured" >  
472                    <#assign hasBalanceTransferCalculator = false>                   
473                    <#break>   
474                <#case "115"> 
475                    <#assign cardIndex = 2 > 
476                    <#assign productUrlHero = "secured"> 
477                    <#assign product="Secured">                     
478                    <#assign hasBalanceTransferCalculator = false>                   
479                    <#break>  
480                <#case "138"> 
481                    <#assign cardIndex = 6 > 
482                    <#assign productUrlHero = "travel-rewards-plus"> 
483                    <#assign product="Travel Rewards+">                     
484                    <#assign hasBalanceTransferCalculator = false>                   
485                    <#break>  
486                <#case "154"> 
487                    <#assign cardIndex = 7 > 
488                    <#assign productUrlHero = "reserve-rewards-plus"> 
489                    <#assign product="Reserve Rewards+">                     
490                    <#assign hasBalanceTransferCalculator = false>                   
491                    <#break>  
492                <#case "128"> 
493                    <#assign cardIndex = 1 > 
494                    <#assign productUrlHero = "business-cash-preferred"> 
495                    <#assign product="Business Cash Preferred">                     
496                    <#assign hasBalanceTransferCalculator = false>                   
497                    <#break>     
498                <#case "143"> 
499                    <#assign cardIndex = 2 > 
500                    <#assign productUrlHero = "business-real-rewards"> 
501                    <#assign product="Business Real Rewards">                     
502                    <#assign hasBalanceTransferCalculator = false>                   
503                    <#break>     
504                <#case "144"> 
505                    <#assign cardIndex = 0 > 
506                    <#assign productUrlHero = "smart-business-rewards"> 
507                    <#assign product="Smart Business Rewards">                                          
508                    <#assign hasBalanceTransferCalculator = false>                   
509                    <#break>                                   
510                <#case "121"> 
511                    <#assign cardIndex = 3 > 
512                    <#assign productUrlHero = "business-platinum"> 
513                    <#assign product="Business">                      
514                    <#assign hasBalanceTransferCalculator = false>                   
515                    <#break>                                      
516                <#default> 
517            </#switch>                          
518            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">  
519            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">   
520             
521            <script> 
522               console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")                         
523            </script> 
524                                                                         
525            <#if url?matches(".*/${productUrlHero}\\?.*")>  
526                <#assign isExcluded = 0> 
527                <#if fib.dmaexclude??> 
528                    <#assign isExcluded = fib.dmaexclude?number!0> 
529                </#if>    
530                <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")> 
531 
532                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')> 
533                    <#if (scrapedData?size > 0)> 
534                            <#list scrapedData as sItem> 
535                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
536                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
537                                    <#break> 
538                                </#if> 
539 
540                            </#list> 
541                            <script> 
542                                $(document).ready(function () { 
543                                    var aprText = "${apr}"; 
544                                    //console.log('aprText',aprText); 
545                                    if (aprText) { 
546                                      $(".apr-full-text").html(aprText); 
547                                        try { 
548                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
549                                            var billing_cycle = matches[1]; 
550                                            var apr_min = apr_min = matches[2]; 
551                                            var apr_max = apr_max = matches[3]; 
552                                            //console.log('billing_cycle', billing_cycle); 
553                                            //console.log('apr_min', apr_min); 
554                                            //console.log('apr_max', apr_max); 
555                                            if (billing_cycle) { 
556                                                //console.log($(".scraped-billing-cycle")); 
557                                                $(".scraped-billing-cycle").html(billing_cycle); 
558
559                                            if (apr_min) { 
560                                                $(".scraped-apr-min").html(apr_min); 
561
562                                            if (apr_max) { 
563                                                $('.scraped-apr-max').html(apr_max); 
564
565 
566                                        } catch (e) { 
567                                            console.log(e); 
568
569
570                                }); 
571                            </script> 
572                    </#if>   
573                </#if>      
574                <#if product?has_content && product != ""> 
575                    <#assign card_text = product + " Card"> 
576                </#if>    
577                <#assign tc_offerTypes = ['108', '109', '121', '144']> 
578                <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']> 
579                <div class="hero-container ${class.getData()}"> 
580                    <div class="hero-main"> 
581                        <div class="hero-main-container"> 
582                            <div class="hero-main-offer"> 
583                                <div class="offer-detail"> 
584                                    <div class="offer-detail-cardArt cardArtImg"> 
585                                        <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
586                                        onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive"> 
587                                        <p>${card_text!''}</p> 
588                                        <#if (hasBalanceTransferCalculator)> 
589                                            <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a> 
590                                        </#if> 
591                                    </div> 
592                                    <div class="offer-detail-text text-color-default hide-desktop"> 
593                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
594 
595                                        <#if (tc_offerTypes?seq_contains(fib.offerType))> 
596                                            <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
597                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
598                                            </a> 
599                                        </#if> 
600                                        <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
601                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
602                                        </#if> 
603                                    </div> 
604                                     
605                                    <#if isExcluded == 0>   
606                                        <a  
607                                            class="jn-button hide-desktop btn"  
608                                            data-button-name="cta-button-top"  
609                                            data-product-name="${productUrlHero!''}"   
610                                            href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"                               
611
612                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
613                                        </a>    
614                                    <#else> 
615                                        <a                                              
616                                            class="jn-button hide-desktop btn"  
617                                            data-button-name="cta-button-top"  
618                                            data-product-name="${productUrlHero!''}"    
619                                            data-micromodal-trigger="modal-product-hero" 
620                                            href="javascript:void(0);"                             
621
622                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
623                                        </a> 
624                                    </#if> 
625                                </div> 
626                                <div class="offer-header"> 
627                                    <div class="offer-text-top"> 
628                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
629                                    </div> 
630                                    <div class="offer-text-bottom hide-mobile"> 
631                                        <div class="offer-detail-text text-color-default "> 
632                                            ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
633                                            <#if (tc_offerTypes?seq_contains(fib.offerType))> 
634                                                <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
635                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
636                                                </a> 
637                                            </#if> 
638                                        </div> 
639                                         
640                                         <#if isExcluded == 0>   
641                                            <a  
642                                                class="jn-button"  
643                                                data-button-name="cta-button-top"  
644                                                data-product-name="${productUrlHero!''}"  
645                                                href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"  
646
647                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
648                                            </a> 
649                                         <#else> 
650                                            <a  
651                                                class="jn-button"  
652                                                data-button-name="cta-button-top"  
653                                                data-product-name="${productUrlHero!''}"  
654                                                data-micromodal-trigger="modal-product-hero" 
655                                                href="javascript:void(0);"  
656
657                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
658                                            </a> 
659                                         </#if> 
660                                         <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
661                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
662                                        </#if> 
663                                    </div> 
664                                </div> 
665                                 
666                            </div> 
667                        </div> 
668                    </div> 
669                </div> 
670 
671                <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" > 
672                    <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
673                        <div  
674                            aria-modal="true"  
675                            aria-labelledby="modal-prodcut-hero-title"  
676                            class="excludeModal__container"  
677                            role="dialog" 
678
679                            <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
680                            <header class="excludeModal__header"> 
681                                <h2 class="excludeModal__title" id="modal-prodcut-hero-title"> 
682                                    <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
683                                        ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
684                                    </#if> 
685                                </h2> 
686                            </header> 
687                        </div> 
688                    </div> 
689                </div> 
690                <#break /> 
691            </#if> 
692        </#list>    
693 
694    </#if> 
695</#if> 
696<!-- https://micromodal.vercel.app/ --> 
697<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
698 
699<script> 
700    AUI().ready(function(){ 
701        //The below script is there to add vertical card art in UAT only so that QA has an easier time auditing. Note that the script only applies to FI SouthState (location code 20419) which is currently the only bank with vertical card art at the moment  
702        var locationCodeParam = '${lc}'; 
703        var currentEnvironmentParam = '${currentEnvironment}'; 
704        if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){ 
705            Array.prototype.slice.call(document.querySelectorAll('.cardArtImg')).map(function(e){e.firstElementChild.src = "https://39f6f821fa03de239594-9f1c16ccc3b26ce57656bb4af99947b6.ssl.cf2.rackcdn.com/f20cf80a-6aea-46ec-84fc-c2a6583773d9.png"}) 
706        }    
707 
708        MicroModal.init();      
709    }); 
710</script> 
711<script> 
712    if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};} 
713    setHeaderBackground = () => { 
714        // Makes the Header subtitle work if there is two lines of text  
715        //product page header 
716        var consumerHeader = document.getElementsByClassName("landing-consumer")[0]; 
717        if(!consumerHeader) { 
718            //index page header 
719            consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0]; 
720
721         
722        if(consumerHeader) { 
723            var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0]; 
724            var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0]; 
725            const offerTextTop = consumerHeader.querySelector(".offer-text-top"); 
726             
727            if (consumerOfferHeader.innerText.length >= 76){ 
728                const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px"; 
729                //two lines 
730                //offerTextTop.style.marginTop = '0px'; 
731                //document.querySelector('.offer-text-bottom').style.marginTop = '25px'; 
732                //prevent button and text going into blue section 
733                //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px"; 
734                consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")"; 
735
736
737        //product page header 
738        var buisnessHeader = document.getElementsByClassName("landing-business")[0]; 
739        if(!buisnessHeader) { 
740            //index page header 
741            buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0]; 
742
743 
744        if(buisnessHeader) { 
745            var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0]; 
746            var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0]; 
747 
748            if (buisnessOfferHeader.innerText.length >= 48){ 
749                //two lines 
750                buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)"; 
751
752
753    }; 
754    /* 
755        sometimes this runs before the text height it is refercning is loaded. Resulting in incorect background styles. If only in aui.ready then it flashes incorect styles then goes to correct styles everytime. 
756        With the aui.ready and imediate call it normal loads correctly but if it loads before header text it will still flash incorect styles and then be fixed. 
757    */ 
758    setHeaderBackground(); 
759    AUI().ready(function(){setHeaderBackground();}); 
760 
761</script> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417688" at line 9, 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#153417688" at line 9, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html'> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign currentEnvironment = 'prod' > 
8 
9<#assign lc= qstringmap["ecdma-lc"]?first>   
10<#assign lc = htmlUtil.escape(lc)> 
11<#assign lc = htmlUtil.escapeJS(lc)> 
12 
13<#assign prefix = "00000" > 
14<#assign lcWithPrefix = prefix + lc > 
15<#assign withPrefixLength = lcWithPrefix?length > 
16<#assign startHere = withPrefixLength - 5> 
17<#assign lc = lcWithPrefix?substring(startHere)> 
18 
19 
20<#if qstringmap["ecid"]?has_content> 
21    <#assign ecidExt = qstringmap["ecid"]?first> 
22    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
23    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
24    <#assign ecidExt = "&ecid=" + ecidExt> 
25<#else> 
26    <#assign ecidExt=""> 
27</#if> 
28<#if oadURL?contains("uat-")> 
29    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
30    <#assign currentEnvironment = 'uat' > 
31<#else> 
32    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
33</#if> 
34    <script> 
35        //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}'); 
36    </script> 
37<#assign campaignId = "" > 
38<#assign ecidExt=""> 
39<#if qstringmap["ecid"]?has_content> 
40    <#assign campaignId = qstringmap["ecid"]?first > 
41    <#assign campaignId = htmlUtil.escape(campaignId)> 
42    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
43     
44    <#assign ecidExt = qstringmap["ecid"]?first> 
45    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
46    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
47    <#assign ecidExt = "&ecid=" + ecidExt> 
48</#if> 
49 
50<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
51<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52<#assign clientProfile = clientProfileList?first> 
53<#assign partnerName = clientProfile.getMarketingNameLong()> 
54<#assign pbu = clientProfile.getPbu()> 
55<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
56<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
57 
58<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)> 
59<#assign temp = []> 
60<#assign consumerCards = []> 
61<#assign businessCards = []>  
62<#assign offerTypeList = []>       
63<#assign index = 0> 
64<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]> 
65<#assign businessOfferTypes = ["128", "121", "143", "144"]> 
66<#list fiCardsData as fib>  
67    <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
68        <#assign offerTypeList = offerTypeList + [fib.offerType]>  
69        <#if (consumerOfferTypes?seq_contains(fib.offerType))> 
70            <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
71        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
72            <#assign businessCards = businessCards + fiCardsData[index..index]> 
73        </#if>                            
74        <#assign temp = temp + fiCardsData[index..index]>  
75    </#if>   
76    <#assign index = index + 1>               
77</#list>  
78 
79<#assign fiCardsData = temp> 
80 <script> 
81    //console.log("fi card data count", ${fiCardsData?size}) 
82</script> 
83 
84<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
85<#if (clientdata?size > 0)> 
86    <#assign backgroundColor = clientdata[0].backgroundHexColor>               
87</#if> 
88 
89<#if (fiCardsData?size > 0)>    
90    <style> 
91        .excludeModal__overlay { 
92            position: fixed; 
93            top: 0; 
94            left: 0; 
95            right: 0; 
96            bottom: 0; 
97            background: rgba(0,0,0,0.6); 
98            display: flex; 
99            justify-content: center; 
100            align-items: center; 
101
102 
103        .excludeModal__container { 
104            background-color: #fff; 
105            padding: 30px; 
106            min-width: 500px; 
107            max-width: 500px; 
108            max-height: 100vh; 
109            border-radius: 4px; 
110            overflow-y: auto; 
111            box-sizing: border-box; 
112
113 
114        .excludeModal__header { 
115            display: flex; 
116            justify-content: space-between; 
117            align-items: center; 
118
119 
120        .modal .excludeModal__container .excludeModal__title { 
121            margin-top: 0; 
122            margin-bottom: 0; 
123            font-weight: 600; 
124            font-size: 20px; 
125            line-height: 1.25; 
126            color: #00449e; 
127            box-sizing: border-box; 
128
129         
130        .excludeModal__close { 
131            background: transparent; 
132            border: 1px solid white; 
133            padding: 4px 8px; 
134            float: right; 
135
136 
137        .excludeModal__close:hover { 
138            border: 1px solid black; 
139
140 
141        .excludeModal__close:before { content: "\2715"; } 
142 
143        @keyframes mmfadeIn { 
144            from { opacity: 0; } 
145            to { opacity: 1; } 
146
147 
148        @keyframes mmfadeOut { 
149            from { opacity: 1; } 
150            to { opacity: 0; } 
151
152 
153        @keyframes mmslideIn { 
154            from { transform: translateY(15%); } 
155            to { transform: translateY(0); } 
156
157 
158        @keyframes mmslideOut { 
159            from { transform: translateY(0); } 
160            to { transform: translateY(-10%); } 
161
162 
163        .micromodal-slide { 
164            display: none; 
165
166 
167        .micromodal-slide.is-open { 
168            display: block; 
169
170 
171        .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
172            animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
173
174 
175        .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
176            animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
177
178 
179        .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
180            animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
181
182 
183        .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
184            animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
185
186 
187        .micromodal-slide .excludeModal__container, 
188        .micromodal-slide .excludeModal__overlay { 
189            will-change: transform; 
190
191    </style> 
192    <#if url?contains("index")>   
193        <#assign isExcluded = 0>                
194        <#assign offerId = ""> 
195        <#assign sourceCode = ""> 
196        <#assign cardArtImage = ""> 
197        <#assign productUrlHero = ""> 
198        <#assign product = ""> 
199        <#assign cardIndex = 0> 
200        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
201            <#if (offerTypeList?seq_contains("108")) ||  (offerTypeList?seq_contains("109"))> 
202                <#list consumerCards as card> 
203                    <#if (card.offerType=="108") || (card.offerType=="109")> 
204                        <#assign isExcluded = 0> 
205                        <#if card.dmaexclude??> 
206                            <#assign isExcluded = card.dmaexclude?number!0> 
207                        </#if>  
208                        <#assign offerId = card.offerId> 
209                        <#assign sourceCode = card.sourceCode> 
210                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
211                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
212 
213                        <#assign productUrlHero="consumer-platinum2103"> 
214                        <#assign product="Platinum"> 
215                        <#assign cardIndex = 1> 
216                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)> 
217                        <#if (scrapedData?size > 0)> 
218                            <#list scrapedData as sItem> 
219                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
220                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
221                                    <#break> 
222                                </#if> 
223                            </#list> 
224                            <script> 
225                                $(document).ready(function () { 
226                                    var aprText = "${apr}"; 
227                                    //console.log('aprText: ${aprText!''}'); 
228                                    if (aprText) { 
229                                        $(".apr-full-text").html(aprText); 
230                                        try { 
231                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
232                                            var billing_cycle = matches[1]; 
233                                            var apr_min = apr_min = matches[2]; 
234                                            var apr_max = apr_max = matches[3]; 
235                                            //console.log('billing_cycle', billing_cycle); 
236                                            //console.log('apr_min', apr_min); 
237                                            //console.log('apr_max', apr_max); 
238                                            if (billing_cycle) { 
239                                                //console.log($(".scraped-billing-cycle")); 
240                                                $(".scraped-billing-cycle").html(billing_cycle); 
241
242                                            if (apr_min) { 
243                                                $(".scraped-apr-min").html(apr_min); 
244
245                                            if (apr_max) { 
246                                                $('.scraped-apr-max').html(apr_max); 
247
248 
249                                        } catch (e) { 
250                                            console.log(e); 
251
252
253                                }); 
254                            </script> 
255                        </#if> 
256                        <script> 
257                            $(document).ready(function () { 
258                                $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${card.offerId}&locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions</a>'); 
259                            }); 
260                        </script> 
261                    </#if>                   
262                </#list> 
263            <#else> 
264                <#assign isExcluded = 0> 
265                <#if consumerCards[0].dmaexclude??> 
266                    <#assign isExcluded = consumerCards[0].dmaexclude?number!0> 
267                </#if>    
268                <#assign displayedCard = consumerCards[0]> 
269                <#assign offerId = displayedCard.offerId> 
270                <#assign sourceCode = displayedCard.sourceCode> 
271                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
272                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
273                <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")> 
274                    <#assign productUrlHero="consumer-platinum"> 
275                    <#assign product="Platinum"> 
276                    <#assign cardIndex = 1> 
277                <#elseif (displayedCard.offerType=="104")> 
278                    <#assign productUrlHero = "max-cash"> 
279                    <#assign product="Max Cash Preferred"> 
280                    <#assign cardIndex = 0> 
281                <#elseif (displayedCard.offerType=="115")> 
282                    <#assign productUrlHero = "secured"> 
283                    <#assign product="Secured"> 
284                    <#assign cardIndex = 2> 
285                </#if> 
286            </#if> 
287            <#if product?has_content && product != ""> 
288                <#assign card_text = product + " Card"> 
289            </#if>  
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign isExcluded = 0> 
296                        <#if card.dmaexclude??> 
297                            <#assign isExcluded = card.dmaexclude?number!0>  
298                        </#if> 
299                        <#assign offerId = card.offerId> 
300                        <#assign sourceCode = card.sourceCode> 
301                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
302                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
303 
304                        <#assign productUrlHero="business-cash-preferred"> 
305                        <#assign product="Business Cash Preferred"> 
306                        <#assign cardIndex = 1> 
307                    </#if> 
308                </#list> 
309            <#else> 
310                <#assign isExcluded = 0> 
311                <#if businessCards[0].dmaexclude??> 
312                    <#assign isExcluded = businessCards[0].dmaexclude?number!0> 
313                </#if>  
314                <#assign displayedCard = businessCards[0]> 
315                <#assign offerId = displayedCard.offerId> 
316                <#assign sourceCode = displayedCard.sourceCode> 
317                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
318                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
319                <#if (displayedCard.offerType=="143")> 
320                    <#assign productUrlHero="business-real-rewards"> 
321                    <#assign product="Business Real Rewards"> 
322                    <#assign cardIndex = 2> 
323                <#elseif (displayedCard.offerType=="144")> 
324                    <#assign productUrlHero="smart-business-rewards"> 
325                    <#assign product="Smart Business Rewards"> 
326                    <#assign cardIndex = 0> 
327                <#elseif (displayedCard.offerType=="121")> 
328                    <#assign productUrlHero = "business-platinum"> 
329                    <#assign product="Business"> 
330                    <#assign cardIndex = 3>                     
331                </#if> 
332            </#if> 
333            <#if product?has_content && product != ""> 
334                <#assign card_text = product + " Card"> 
335            </#if>  
336        </#if>		 
337            <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}"> 
338                <div class="hero-main"> 
339                    <div class="hero-main-container"> 
340                        <div class="hero-main-offer"> 
341                            <div class="offer-detail"> 
342                                <div class="offer-detail-cardArt cardArtImg"> 
343                                    <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
344                                    class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">  
345                                    <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }" 
346                                     class="jn-img-responsive">--> 
347                                    <p>${card_text!''}</p> 
348                                </div> 
349                                <div class="offer-detail-text text-color-default hide-desktop"> 
350                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                 
351                                </div>                                                                        
352                                <#if isExcluded == 0>                                                                                  
353                                    <a  
354                                        class="jn-button hide-desktop btn"  
355                                        data-button-name="cta-button-top"  
356                                        data-product-name="${productUrlHero!''}"  
357                                        href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"                                    
358
359                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
360                                    </a> 
361                                <#else> 
362                                    <a  
363                                        class="jn-button hide-desktop btn"  
364                                        data-button-name="cta-button-top"  
365                                        data-product-name="${productUrlHero!''}"  
366                                        data-micromodal-trigger="modal-index-hero" 
367                                        href="javascript:void(0);" 
368
369                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
370                                    </a> 
371                                </#if> 
372                            </div> 
373                            <div class="offer-header"> 
374                                <div class="offer-text-top"> 
375                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
376                                </div> 
377                                <div class="offer-text-bottom hide-mobile"> 
378                                    <div class="offer-detail-text text-color-default "> 
379                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                        
380                                    </div> 
381                                     
382                                    <#if isExcluded == 0>                                                                                  
383                                        <a  
384                                            class="jn-button"  
385                                            data-button-name="cta-button-top"  
386                                            data-product-name="${productUrlHero!''}" 
387                                            href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"  
388
389                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
390                                        </a> 
391                                    <#else> 
392                                        <a  
393                                            class="jn-button"  
394                                            data-button-name="cta-button-top"  
395                                            data-product-name="${productUrlHero!''}" 
396                                            data-micromodal-trigger="modal-index-hero" 
397                                            href="javascript:void(0);" 
398
399                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
400                                        </a> 
401                                    </#if> 
402                                </div> 
403                            </div>                           
404                        </div> 
405                    </div> 
406                </div> 
407            </div> 
408 
409            <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" > 
410                <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
411                    <div  
412                        aria-modal="true"  
413                        aria-labelledby="modal-index-hero-title"  
414                        class="excludeModal__container"  
415                        role="dialog" 
416
417                        <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
418                        <header class="excludeModal__header"> 
419                            <h2 class="excludeModal__title" id="modal-index-hero-title"> 
420                                <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
421                                    ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
422                                </#if> 
423                            </h2> 
424                        </header> 
425                    </div> 
426                </div> 
427            </div> 
428    <#else>      
429        <#assign hasBalanceTransferCalculator = false> 
430        <#list fiCardsData as fib>     
431            <#switch fib.offerType>     
432                <#case "101"> 
433                    <#assign cardIndex = 3 > 
434                    <#assign productUrlHero = "consumer-edr"> 
435                    <#assign product="Everyday Rewards+">                     
436                    <#assign hasBalanceTransferCalculator = false>                   
437                    <#break>  
438                <#case "103">              
439                    <#assign cardIndex = 3 > 
440                    <#assign productUrlHero = "consumer-edr"> 
441                    <#assign product="Everyday Rewards+">                     
442                     <#assign hasBalanceTransferCalculator = false>                   
443                   <#break>          
444                <#case "104"> 
445                    <#assign cardIndex = 0 > 
446                    <#assign productUrlHero="max-cash"> 
447                    <#assign product="Max Cash Preferred">                       
448                    <#assign hasBalanceTransferCalculator = false>                   
449                    <#break> 
450                <#case "108"> 
451                    <#assign cardIndex = 1 > 
452                    <#assign productUrlHero = "consumer-platinum"> 
453                    <#assign product="Platinum">     
454                    <#assign hasBalanceTransferCalculator = true>                   
455                    <#break> 
456                <#case "109"> 
457                    <#assign cardIndex = 1 > 
458                    <#assign productUrlHero = "consumer-platinum"> 
459                    <#assign product="Platinum">    
460                    <#assign hasBalanceTransferCalculator = true>                                                          
461                    <#break>                                         
462                 <#case "141">                  
463                    <#assign cardIndex = 4 > 
464                    <#assign productUrlHero = "college-real-rewards"> 
465                    <#assign product = "College Real Rewards" >  
466                     <#assign hasBalanceTransferCalculator = false>                   
467                   <#break>  
468                <#case "147"> 
469                    <#assign cardIndex = 5 > 
470                    <#assign productUrlHero = "max-cash-secured"> 
471                    <#assign product = "Max Cash Secured" >  
472                    <#assign hasBalanceTransferCalculator = false>                   
473                    <#break>   
474                <#case "115"> 
475                    <#assign cardIndex = 2 > 
476                    <#assign productUrlHero = "secured"> 
477                    <#assign product="Secured">                     
478                    <#assign hasBalanceTransferCalculator = false>                   
479                    <#break>  
480                <#case "138"> 
481                    <#assign cardIndex = 6 > 
482                    <#assign productUrlHero = "travel-rewards-plus"> 
483                    <#assign product="Travel Rewards+">                     
484                    <#assign hasBalanceTransferCalculator = false>                   
485                    <#break>  
486                <#case "154"> 
487                    <#assign cardIndex = 7 > 
488                    <#assign productUrlHero = "reserve-rewards-plus"> 
489                    <#assign product="Reserve Rewards+">                     
490                    <#assign hasBalanceTransferCalculator = false>                   
491                    <#break>  
492                <#case "128"> 
493                    <#assign cardIndex = 1 > 
494                    <#assign productUrlHero = "business-cash-preferred"> 
495                    <#assign product="Business Cash Preferred">                     
496                    <#assign hasBalanceTransferCalculator = false>                   
497                    <#break>     
498                <#case "143"> 
499                    <#assign cardIndex = 2 > 
500                    <#assign productUrlHero = "business-real-rewards"> 
501                    <#assign product="Business Real Rewards">                     
502                    <#assign hasBalanceTransferCalculator = false>                   
503                    <#break>     
504                <#case "144"> 
505                    <#assign cardIndex = 0 > 
506                    <#assign productUrlHero = "smart-business-rewards"> 
507                    <#assign product="Smart Business Rewards">                                          
508                    <#assign hasBalanceTransferCalculator = false>                   
509                    <#break>                                   
510                <#case "121"> 
511                    <#assign cardIndex = 3 > 
512                    <#assign productUrlHero = "business-platinum"> 
513                    <#assign product="Business">                      
514                    <#assign hasBalanceTransferCalculator = false>                   
515                    <#break>                                      
516                <#default> 
517            </#switch>                          
518            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">  
519            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">   
520             
521            <script> 
522               console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")                         
523            </script> 
524                                                                         
525            <#if url?matches(".*/${productUrlHero}\\?.*")>  
526                <#assign isExcluded = 0> 
527                <#if fib.dmaexclude??> 
528                    <#assign isExcluded = fib.dmaexclude?number!0> 
529                </#if>    
530                <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")> 
531 
532                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')> 
533                    <#if (scrapedData?size > 0)> 
534                            <#list scrapedData as sItem> 
535                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
536                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
537                                    <#break> 
538                                </#if> 
539 
540                            </#list> 
541                            <script> 
542                                $(document).ready(function () { 
543                                    var aprText = "${apr}"; 
544                                    //console.log('aprText',aprText); 
545                                    if (aprText) { 
546                                      $(".apr-full-text").html(aprText); 
547                                        try { 
548                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
549                                            var billing_cycle = matches[1]; 
550                                            var apr_min = apr_min = matches[2]; 
551                                            var apr_max = apr_max = matches[3]; 
552                                            //console.log('billing_cycle', billing_cycle); 
553                                            //console.log('apr_min', apr_min); 
554                                            //console.log('apr_max', apr_max); 
555                                            if (billing_cycle) { 
556                                                //console.log($(".scraped-billing-cycle")); 
557                                                $(".scraped-billing-cycle").html(billing_cycle); 
558
559                                            if (apr_min) { 
560                                                $(".scraped-apr-min").html(apr_min); 
561
562                                            if (apr_max) { 
563                                                $('.scraped-apr-max').html(apr_max); 
564
565 
566                                        } catch (e) { 
567                                            console.log(e); 
568
569
570                                }); 
571                            </script> 
572                    </#if>   
573                </#if>      
574                <#if product?has_content && product != ""> 
575                    <#assign card_text = product + " Card"> 
576                </#if>    
577                <#assign tc_offerTypes = ['108', '109', '121', '144']> 
578                <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']> 
579                <div class="hero-container ${class.getData()}"> 
580                    <div class="hero-main"> 
581                        <div class="hero-main-container"> 
582                            <div class="hero-main-offer"> 
583                                <div class="offer-detail"> 
584                                    <div class="offer-detail-cardArt cardArtImg"> 
585                                        <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
586                                        onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive"> 
587                                        <p>${card_text!''}</p> 
588                                        <#if (hasBalanceTransferCalculator)> 
589                                            <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a> 
590                                        </#if> 
591                                    </div> 
592                                    <div class="offer-detail-text text-color-default hide-desktop"> 
593                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
594 
595                                        <#if (tc_offerTypes?seq_contains(fib.offerType))> 
596                                            <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
597                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
598                                            </a> 
599                                        </#if> 
600                                        <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
601                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
602                                        </#if> 
603                                    </div> 
604                                     
605                                    <#if isExcluded == 0>   
606                                        <a  
607                                            class="jn-button hide-desktop btn"  
608                                            data-button-name="cta-button-top"  
609                                            data-product-name="${productUrlHero!''}"   
610                                            href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"                               
611
612                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
613                                        </a>    
614                                    <#else> 
615                                        <a                                              
616                                            class="jn-button hide-desktop btn"  
617                                            data-button-name="cta-button-top"  
618                                            data-product-name="${productUrlHero!''}"    
619                                            data-micromodal-trigger="modal-product-hero" 
620                                            href="javascript:void(0);"                             
621
622                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
623                                        </a> 
624                                    </#if> 
625                                </div> 
626                                <div class="offer-header"> 
627                                    <div class="offer-text-top"> 
628                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
629                                    </div> 
630                                    <div class="offer-text-bottom hide-mobile"> 
631                                        <div class="offer-detail-text text-color-default "> 
632                                            ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
633                                            <#if (tc_offerTypes?seq_contains(fib.offerType))> 
634                                                <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
635                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
636                                                </a> 
637                                            </#if> 
638                                        </div> 
639                                         
640                                         <#if isExcluded == 0>   
641                                            <a  
642                                                class="jn-button"  
643                                                data-button-name="cta-button-top"  
644                                                data-product-name="${productUrlHero!''}"  
645                                                href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"  
646
647                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
648                                            </a> 
649                                         <#else> 
650                                            <a  
651                                                class="jn-button"  
652                                                data-button-name="cta-button-top"  
653                                                data-product-name="${productUrlHero!''}"  
654                                                data-micromodal-trigger="modal-product-hero" 
655                                                href="javascript:void(0);"  
656
657                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
658                                            </a> 
659                                         </#if> 
660                                         <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
661                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
662                                        </#if> 
663                                    </div> 
664                                </div> 
665                                 
666                            </div> 
667                        </div> 
668                    </div> 
669                </div> 
670 
671                <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" > 
672                    <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
673                        <div  
674                            aria-modal="true"  
675                            aria-labelledby="modal-prodcut-hero-title"  
676                            class="excludeModal__container"  
677                            role="dialog" 
678
679                            <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
680                            <header class="excludeModal__header"> 
681                                <h2 class="excludeModal__title" id="modal-prodcut-hero-title"> 
682                                    <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
683                                        ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
684                                    </#if> 
685                                </h2> 
686                            </header> 
687                        </div> 
688                    </div> 
689                </div> 
690                <#break /> 
691            </#if> 
692        </#list>    
693 
694    </#if> 
695</#if> 
696<!-- https://micromodal.vercel.app/ --> 
697<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
698 
699<script> 
700    AUI().ready(function(){ 
701        //The below script is there to add vertical card art in UAT only so that QA has an easier time auditing. Note that the script only applies to FI SouthState (location code 20419) which is currently the only bank with vertical card art at the moment  
702        var locationCodeParam = '${lc}'; 
703        var currentEnvironmentParam = '${currentEnvironment}'; 
704        if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){ 
705            Array.prototype.slice.call(document.querySelectorAll('.cardArtImg')).map(function(e){e.firstElementChild.src = "https://39f6f821fa03de239594-9f1c16ccc3b26ce57656bb4af99947b6.ssl.cf2.rackcdn.com/f20cf80a-6aea-46ec-84fc-c2a6583773d9.png"}) 
706        }    
707 
708        MicroModal.init();      
709    }); 
710</script> 
711<script> 
712    if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};} 
713    setHeaderBackground = () => { 
714        // Makes the Header subtitle work if there is two lines of text  
715        //product page header 
716        var consumerHeader = document.getElementsByClassName("landing-consumer")[0]; 
717        if(!consumerHeader) { 
718            //index page header 
719            consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0]; 
720
721         
722        if(consumerHeader) { 
723            var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0]; 
724            var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0]; 
725            const offerTextTop = consumerHeader.querySelector(".offer-text-top"); 
726             
727            if (consumerOfferHeader.innerText.length >= 76){ 
728                const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px"; 
729                //two lines 
730                //offerTextTop.style.marginTop = '0px'; 
731                //document.querySelector('.offer-text-bottom').style.marginTop = '25px'; 
732                //prevent button and text going into blue section 
733                //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px"; 
734                consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")"; 
735
736
737        //product page header 
738        var buisnessHeader = document.getElementsByClassName("landing-business")[0]; 
739        if(!buisnessHeader) { 
740            //index page header 
741            buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0]; 
742
743 
744        if(buisnessHeader) { 
745            var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0]; 
746            var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0]; 
747 
748            if (buisnessOfferHeader.innerText.length >= 48){ 
749                //two lines 
750                buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)"; 
751
752
753    }; 
754    /* 
755        sometimes this runs before the text height it is refercning is loaded. Resulting in incorect background styles. If only in aui.ready then it flashes incorect styles then goes to correct styles everytime. 
756        With the aui.ready and imediate call it normal loads correctly but if it loads before header text it will still flash incorect styles and then be fixed. 
757    */ 
758    setHeaderBackground(); 
759    AUI().ready(function(){setHeaderBackground();}); 
760 
761</script> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#155407401" at line 13, 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#155407401" at line 13, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
5<#assign environment = url?replace('/index.*','','r')> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7 
8<script> 
9var currentUrl = '${url}'; 
10 
11</script> 
12 
13<#assign lc = qstringmap["ecdma-lc"]?first>  
14<#assign lc = htmlUtil.escape(lc)> 
15<#assign lc = htmlUtil.escapeJS(lc)> 
16 
17<#assign prefix = "00000" > 
18<#assign lcWithPrefix = prefix + lc > 
19<#assign withPrefixLength = lcWithPrefix?length > 
20<#assign startHere = withPrefixLength - 5> 
21<#assign lc = lcWithPrefix?substring(startHere)> 
22 
23 
24<#if qstringmap["ecid"]?has_content> 
25    <#assign ecidExt = qstringmap["ecid"]?first> 
26    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
27    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
28    <#assign ecidExt = "&ecid=" + ecidExt> 
29<#else> 
30    <#assign ecidExt=""> 
31</#if> 
32 
33<#if oadURL?contains("uat-")> 
34    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
35<#else> 
36    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
37</#if> 
38 
39 
40<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
41<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
42<#assign clientProfile = clientProfileList?first> 
43<#assign partnerName = clientProfile.getMarketingNameLong()> 
44<#assign pbu = clientProfile.getPbu()> 
45<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
46<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
47 
48<#if qstringmap["ecid"]?has_content> 
49    <#assign ecidExt = qstringmap["ecid"]?first> 
50    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
51    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
52    <#assign ecidExt = "&ecid=" + ecidExt> 
53 
54    <#assign campaignId = qstringmap["ecid"]?first > 
55    <#assign campaignId = htmlUtil.escape(campaignId)> 
56    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
57<#else> 
58    <#assign ecidExt=""> 
59    <#assign campaignId = "" > 
60</#if> 
61 
62<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu + '&' + lc)>  
63<#-- filter duplicated cards--> 
64<#assign consumerCards = []> 
65<#assign businessCards = []>  
66<#assign offerTypeList = []>  
67<#assign consumerOfferTypes =['101', '104', '108', '109', '115', '141','147', '138', '154']> 
68<#assign businessOfferTypes =['144', '128', '143', '121']>      
69<#assign index = 0> 
70<#list fiCardsData as fib> 
71    <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
72        <#assign offerTypeList = offerTypeList + [fib.offerType]>     
73        <#if consumerOfferTypes?seq_contains(fib.offerType)> 
74            <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
75        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
76            <#assign businessCards = businessCards + fiCardsData[index..index]> 
77        </#if>                  
78    </#if>  
79    <#assign index = index + 1>                
80</#list>  
81 
82<style> 
83    .excludeModal__overlay { 
84        position: fixed; 
85        top: 0; 
86        left: 0; 
87        right: 0; 
88        bottom: 0; 
89        background: rgba(0,0,0,0.6); 
90        display: flex; 
91        justify-content: center; 
92        align-items: center; 
93
94 
95    .excludeModal__container { 
96        background-color: #fff; 
97        padding: 30px; 
98        min-width: 500px; 
99        max-width: 500px; 
100        max-height: 100vh; 
101        border-radius: 4px; 
102        overflow-y: auto; 
103        box-sizing: border-box; 
104
105 
106    .excludeModal__header { 
107        display: flex; 
108        justify-content: space-between; 
109        align-items: center; 
110
111 
112    .modal .excludeModal__container .excludeModal__title { 
113        margin-top: 0; 
114        margin-bottom: 0; 
115        font-weight: 600; 
116        font-size: 20px; 
117        line-height: 1.25; 
118        color: #00449e; 
119        box-sizing: border-box; 
120
121     
122    .excludeModal__close { 
123        background: transparent; 
124        border: 1px solid white; 
125        padding: 4px 8px; 
126        float: right; 
127
128 
129    .excludeModal__close:hover { 
130        border: 1px solid black; 
131
132 
133    .excludeModal__close:before { content: "\2715"; } 
134 
135    @keyframes mmfadeIn { 
136        from { opacity: 0; } 
137        to { opacity: 1; } 
138
139 
140    @keyframes mmfadeOut { 
141        from { opacity: 1; } 
142        to { opacity: 0; } 
143
144 
145    @keyframes mmslideIn { 
146        from { transform: translateY(15%); } 
147        to { transform: translateY(0); } 
148
149 
150    @keyframes mmslideOut { 
151        from { transform: translateY(0); } 
152        to { transform: translateY(-10%); } 
153
154 
155    .micromodal-slide { 
156        display: none; 
157
158 
159    .micromodal-slide.is-open { 
160        display: block; 
161
162 
163    .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
164        animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
165
166 
167    .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
168        animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
169
170 
171    .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
172        animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
173
174 
175    .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
176        animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
177
178 
179    .micromodal-slide .excludeModal__container, 
180    .micromodal-slide .excludeModal__overlay { 
181        will-change: transform; 
182
183</style> 
184 
185<#if ((consumerCards?size > 0) || (businessCards?size > 0))> 
186    <div class="content-container content-container-main jn-consumer-content"> 
187        <#if ((consumerCards?size > 0) && (businessCards?size > 0))> 
188            <nav class="jn-primary-nav two-tabs"> 
189                <ul> 
190                    <li title="${partnerName!''} - Personal products"> 
191                        <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a> 
192                    </li> 
193                    <li title="${partnerName!''} - Business products"> 
194                        <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a> 
195                    </li> 
196                </ul> 
197            </nav> 
198        <#else> 
199            <#if (consumerCards?size > 0)> 
200                <nav class="jn-primary-nav" title="${partnerName!''} - Personal products"> 
201                    <ul> 
202                        <li> 
203                            <p class="tab-nav" id="consumerTab"><span>Personal</span></p> 
204                        </li> 
205                    </ul> 
206                </nav> 
207            </#if> 
208            <#if (businessCards?size > 0)> 
209                <nav class="jn-primary-nav" title="${partnerName!''} - Business products"> 
210                    <ul> 
211                        <li> 
212                            <p class="tab-nav" id="businessTab"><span>Business</span></p> 
213                        </li> 
214                    </ul> 
215                </nav> 
216            </#if> 
217        </#if> 
218        <#if (consumerCards?size > 0)> 
219            <div class="tab-more-wrapper">   
220                <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products"> 
221                     
222                    <#list consumerCards as fib>    
223                            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" > 
224                            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg" > 
225                            <#assign hasBalanceTransferCalculator = false> 
226                            <#switch fib.offerType> 
227                                <#case "101"> 
228                                    <#assign productName = "consumer-edr"> 
229                                    <#assign productUrl = "202302/consumer-edr"> 
230                                    <#assign product="Everyday Rewards+"> 
231                                    <#assign cardIndex = 0> 
232                                    <#break> 
233                                <#case "108"> 
234                                    <#assign productName = "consumer-platinum"> 
235                                    <#assign productUrl = "202308/consumer-platinum"> 
236                                    <#assign product="Platinum"> 
237                                    <#assign cardIndex = 2> 
238                                    <#assign hasBalanceTransferCalculator = true> 
239                                    <#break> 
240                                <#case "109"> 
241                                    <#assign productName = "consumer-platinum"> 
242                                    <#assign productUrl = "202308/consumer-platinum"> 
243                                    <#assign product="Platinum"> 
244                                    <#assign cardIndex = 2> 
245                                    <#assign hasBalanceTransferCalculator = true> 
246                                    <#break>                                            
247                                <#case "115"> 
248                                    <#assign productName = "secured"> 
249                                    <#assign productUrl = "secured"> 
250                                    <#assign product="Secured"> 
251                                    <#assign cardIndex = 5> 
252                                    <#break> 
253                                <#case "104"> 
254                                    <#assign productName = "max-cash"> 
255                                    <#assign productUrl = "max-cash"> 
256                                    <#assign product="Max Cash Preferred"> 
257                                    <#assign cardIndex = 1> 
258                                    <#break> 
259                                <#case "147"> 
260                                    <#assign productName = "max-cash-secured"> 
261                                    <#assign productUrl = "max-cash-secured"> 
262                                    <#assign product="Max Cash Secured"> 
263                                    <#assign cardIndex = 4> 
264                                    <#break> 
265                                <#case "141"> 
266                                    <#assign productName = "college-real-rewards"> 
267                                    <#assign productUrl = "college-real-rewards"> 
268                                    <#assign product="College Real Rewards"> 
269                                    <#assign cardIndex = 3> 
270                                    <#break> 
271                                <#case "138"> 
272                                    <#assign productName = "travel-rewards-plus"> 
273                                    <#assign productUrl = "202305/travel-rewards-plus"> 
274                                    <#assign product="Travel Rewards+"> 
275                                    <#assign cardIndex = 10> 
276                                    <#break> 
277                                <#case "154"> 
278                                    <#assign productName = "reserve-rewards-plus"> 
279                                    <#assign productUrl = "202305/reserve-rewards-plus"> 
280                                    <#assign product="Reserve Rewards+"> 
281                                    <#assign cardIndex = 11> 
282                                    <#break> 
283                                <#default> 
284                            </#switch> 
285                            <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
286                            <#assign titleText = titleText?replace('<[^>]+>','','r')> 
287                            <#assign newTag = ""> 
288                            <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
289                                <#assign newTag = "with-new-tag"> 
290                            </#if> 
291                            <#assign APR=""> 
292                            <#assign AMF=""> 
293                            <#assign BAL=""> 
294                            <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)> 
295                            <#if (scrapedData?size > 0)> 
296                                <#list scrapedData as sItem> 
297                                    <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
298                                        <#assign APR = sItem.scrapedValue>                                    
299                                    <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
300                                        <#assign AMF = sItem.scrapedValue> 
301                                    <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
302                                        <#assign BAL = sItem.scrapedValue> 
303                                    </#if> 
304                                    <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
305                                        <#break> 
306                                    </#if> 
307                                </#list> 
308                            </#if>                                      
309                            <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card"> 
310                                <div class="tag-container"> 
311                                    <div class="tag-corner"> 
312                                        <div class="tag-label">NEW</div> 
313                                    </div> 
314                                </div> 
315                                <div class="consumer-card-heading hide-desktop"> 
316                                    <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
317                                    ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
318                                </div> 
319                                <div class="jn-consumer-card-image"> 
320                                    <img src="${cardArtImage!''}" alt="${partnerName!''} ${product!''} Card" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
321                                    <#assign calculatorConsumerOfferTypes = ["101", "103", "104", "138", "154"] > 
322                                    <#if (calculatorConsumerOfferTypes?seq_contains(fib.offerType))> 
323                                        <a class="reward-calculator-link" target="_blank" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' class="whiteLink" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
324                                    </#if> 
325                                    <#if consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content> 
326                                        <p class="tier3-tabs-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
327                                    </#if> 
328                                    <#if (hasBalanceTransferCalculator)> 
329                                        <a style="display: block; text-align: center; max-width: 285px; margin: auto;" href="javascript:void(0);" data-micromodal-trigger="modal-2">See how much you could save with a balance transfer</a> 
330                                    </#if> 
331                                </div> 
332                                 
333                                <div class="jn-consumer-card-info"> 
334                                    <div class="consumer-card-heading hide-mobile"> 
335                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
336                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
337                                    </div> 
338                                    <div class="jn-additional"> 
339                                            <ul class="${fib.offerType}">    
340                                                <li> 
341                                                    <p> 
342                                                        <#if (fib.offerType == "104")> 
343                                                          <strong>APR for Purchases: </strong> 
344                                                        <#elseif (fib.offerType == "101" || 
345                                                            fib.offerType == "108" || 
346                                                            fib.offerType == "109" || 
347                                                            fib.offerType == "141"  
348                                                        )> 
349                                                            <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
350                                                        <#else> 
351                                                            <strong>APR for Purchases and Balance Transfers: </strong> 
352                                                        </#if> 
353                                                        ${APR!''}  
354                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank" class="t_c_link"> 
355                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions. 
356                                                        </a> 
357                                                    </p> 
358                                                </li> 
359                                                <#if (fib.offerType == "104")> 
360                                                    <li class="${fib.offerType}"> 
361                                                        <p> 
362                                                            <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong> 
363                                                            ${BAL!''}  
364                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank" class="t_c_link"> 
365                                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions. 
366                                                            </a> 
367                                                        </p> 
368                                                    </li> 
369                                                </#if>          
370         
371                                                <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
372                                                    <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
373                                                        <li>${marketingInfo.getData()}</li> 
374                                                    </#list> 
375                                                </#if> 
376                                                <li> 
377                                                    <p>Annual Fee: ${AMF!''}  
378                                                        <a  href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}"  target="_blank" class="t_c_link"> 
379                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions. 
380                                                        </a> 
381                                                    </p> 
382                                                </li> 
383                                            </ul> 
384                                    </div> 
385                                    <ul class="actions"> 
386                                        <li> 
387                                            <#assign isExcluded = 0> 
388                                            <#if fib.dmaexclude??> 
389                                                <#assign isExcluded = fib.dmaexclude?number!0> 
390                                            </#if>                                           
391                                            <#if isExcluded == 0>                                                                                  
392                                                <a  
393                                                    class="applyNowLink"  
394                                                    data-button-name="apply-now-link"  
395                                                    data-product-name="${productName!''}" 
396                                                    href="${oadURL}?locationCode=${lc}&amp;offerId=${fib.offerId}&amp;preparerType=customer"  
397
398                                                    ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span> 
399                                                </a> 
400                                            <#else> 
401                                                <a  
402                                                    class="applyNowLink"  
403                                                    data-button-name="apply-now-link"  
404                                                    data-product-name="${productName!''}" 
405                                                    data-micromodal-trigger="modal-consumer-tabs-${fib.offerType}" 
406                                                    href="javascript:void(0);" 
407
408                                                    ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span> 
409                                                </a> 
410 
411                                            </#if> 
412                                        </li> 
413                                        <li><a href="${environment}/${productUrl}?ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span></a> 
414                                        </li> 
415                                    </ul> 
416                                </div> 
417                            </div> 
418                    </#list> 
419                </div> 
420            </div> 
421        </#if> 
422        <#if (businessCards?size > 0)>   
423        <div class="tab-more-wrapper">      
424            <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products"> 
425                 
426                <#list businessCards as fib> 
427                        <#assign cardArtImage = cdnCardArtUrl + "/"+fib.filename+".png"> 
428                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg"> 
429                        <#switch fib.offerType> 
430                            <#case "128"> 
431                                <#assign productName = "business-cash-preferred"> 
432                                <#assign productUrl = "business-cash-preferred"> 
433                                <#assign product="Business Cash Preferred"> 
434                                <#assign cardIndex = 6> 
435                                <#break> 
436                            <#case "121"> 
437                                <#assign productName = "business-platinum"> 
438                                <#assign productUrl = "202208/business-platinum"> 
439                                <#assign product="Business Card"> 
440                                <#assign cardIndex = 7> 
441                                <#break> 
442                            <#case "144"> 
443                                <#assign productName = "smart-business-rewards"> 
444                                <#assign productUrl = "smart-business-rewards"> 
445                                <#assign product="Smart Business Rewards"> 
446                                <#assign cardIndex = 8> 
447                                <#break>                             
448                            <#case "143"> 
449                                <#assign productName = "business-real-rewards"> 
450                                <#assign productUrl = "business-real-rewards"> 
451                                <#assign product="Business Real Rewards"> 
452                                <#assign cardIndex = 9> 
453                                <#break> 
454                             
455                            <#default> 
456                        </#switch> 
457                        <#assign newTag = ""> 
458                        <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
459                            <#assign newTag = "with-new-tag"> 
460                        </#if> 
461                         
462                        <#assign APR=""> 
463                        <#assign AMF="">                                           
464                            <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)> 
465                            <#if (scrapedData?size > 0)> 
466                                <#list scrapedData as sItem> 
467                                    <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
468                                        <#assign APR = sItem.scrapedValue> 
469                                    <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
470                                        <#assign AMF = sItem.scrapedValue> 
471                                    </#if> 
472                                    <#if (APR?has_content && AMF?has_content)> 
473                                        <#break> 
474                                    </#if> 
475                                </#list> 
476                            </#if> 
477 
478                        <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card"> 
479                            <div class="tag-container"> 
480                                <div class="tag-corner"> 
481                                    <div class="tag-label">NEW</div> 
482                                </div> 
483                            </div> 
484                            <div class="consumer-card-heading hide-desktop"> 
485                                <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
486                                ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
487                            </div> 
488                            <div class="jn-consumer-card-image"> 
489 
490                                <img  
491                                    src="${cardArtImage!''}"  
492                                    alt="${partnerName!''} ${product!''} Card"  
493                                    class="jn-img-responsive"  
494                                    onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" 
495
496                                <#assign calculatorBizOfferTypes = ["144", "143", "128"] > 
497                                <#if (calculatorBizOfferTypes?seq_contains(fib.offerType))> 
498                                 <a class="reward-calculator-link" target="_blank" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' class="whiteLink" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
499                                </#if> 
500                                <#if consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content> 
501                                    <p class="tier3-tabs-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
502                                </#if> 
503                            </div> 
504                            <div class="jn-consumer-card-info"> 
505                                <div class="consumer-card-heading hide-mobile"> 
506                                    <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
507                                    ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
508                                </div> 
509                                <div class="jn-additional"> 
510                                    <ul class="${fib.offerType}"> 
511                                        <li> 
512                                            <p> 
513                                            <#if (fib.offerType == "144")> 
514                                                <strong>APR for Purchases and Balance Transfers: </strong> 
515                                            <#else> 
516                                                <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
517                                            </#if> 
518                                                ${APR!''} 
519                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank" class="t_c_link"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.</a> 
520                                            </p> 
521                                        </li> 
522                                         
523                                        <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
524                                            <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
525                                                <li>${marketingInfo.getData()}</li> 
526                                            </#list> 
527                                        </#if> 
528                                        <li><p>Annual Fee: ${AMF!''} <a 
529                                            href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank" class="t_c_link"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.</a></p> 
530                                        </li> 
531                                    </ul> 
532                                </div> 
533                                <ul class="actions"> 
534                                    <li> 
535                                        <#assign isExcluded = 0> 
536                                        <#if fib.dmaexclude??> 
537                                            <#assign isExcluded = fib.dmaexclude?number!0> 
538                                        </#if>                                                                                    
539                                        <#if isExcluded == 0>                                        
540                                            <a  
541                                                href="${oadURL}?locationCode=${lc}&amp;offerId=${fib.offerId}&amp;preparerType=customer"  
542                                                class="applyNowLink"  
543                                                data-button-name="apply-now-link"  
544                                                data-product-name="${productName!''}" 
545
546                                                ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span> 
547                                            </a> 
548                                        <#else> 
549                                            <a  
550                                                class="applyNowLink"  
551                                                data-button-name="apply-now-link"  
552                                                data-product-name="${productName!''}" 
553                                                data-micromodal-trigger="modal-business-tabs-${fib.offerType}" 
554                                                href="javascript:void(0);" 
555
556                                                ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span> 
557                                            </a> 
558 
559                                        </#if> 
560                                    </li> 
561                                    <li><a href="${environment}/${productUrl}?ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span></a></li> 
562                                </ul> 
563                            </div> 
564                        </div> 
565                         
566                </#list> 
567            </div> 
568            </div> 
569        </#if>  
570    </div> 
571 
572    <#if (consumerCards?size > 0)> 
573        <#list consumerCards as fib>  
574            <#assign isExcluded = 0> 
575            <#if fib.dmaexclude??> 
576                <#assign isExcluded = fib.dmaexclude?number!0> 
577            </#if>                                                        
578            <#if isExcluded == 1>     
579                <div aria-hidden="true" class="modal micromodal-slide" id="modal-consumer-tabs-${fib.offerType}" > 
580                    <div class="excludeModal__overlay" data-micromodal-close tabindex="-1" > 
581                        <div   
582                            aria-modal="true"  
583                            aria-labelledby="modal-consumer-tabs-title-${fib.offerType}"  
584                            class="excludeModal__container"  
585                            role="dialog" 
586
587                            <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
588                            <header class="excludeModal__header"> 
589                                <h2 class="excludeModal__title" id="modal-consumer-tabs-title-${fib.offerType}"> 
590                                    <#if consumerTitle.getSiblings()[cardIndex].excludedMessage?? > 
591                                        ${consumerTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
592                                    </#if> 
593                                </h2> 
594                            </header> 
595                        </div> 
596                    </div> 
597                </div> 
598            </#if> 
599        </#list> 
600    </#if> 
601 
602    <#if (businessCards?size > 0)>  
603        <#list businessCards as fib> 
604            <#assign isExcluded = 0> 
605            <#if fib.dmaexclude??>   
606                <#assign isExcluded = fib.dmaexclude?number!0> 
607            </#if>                                                    
608            <#if isExcluded == 1>    
609                <div aria-hidden="true" class="modal micromodal-slide" id="modal-business-tabs-${fib.offerType}" > 
610                    <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
611                        <div  
612                            aria-modal="true"  
613                            aria-labelledby="modal-business-tabs-title-${fib.offerType}"  
614                            class="excludeModal__container"  
615                            role="dialog" 
616
617                            <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
618                            <header class="excludeModal__header"> 
619                                <h2 class="excludeModal__title" id="modal-business-tabs-title-${fib.offerType}"> 
620                                    <#if consumerTitle.getSiblings()[cardIndex].excludedMessage?? > 
621                                        ${consumerTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
622                                    </#if> 
623                                </h2> 
624                            </header> 
625                        </div> 
626                    </div> 
627                </div> 
628            </#if> 
629        </#list> 
630    </#if> 
631 
632    <!-- https://micromodal.vercel.app/ --> 
633    <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
634 
635    <script> 
636        AUI().ready(function() {                      
637            var tabs=$('.tab-nav'); 
638            var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]'; 
639            var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]'; 
640            var screenWidthMobile = 768; 
641            var screenWidth = window.innerWidth; 
642            var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img'); 
643            for (var index = 0; index < heroCardImgs.length; index++) { 
644                var heroCardImg = heroCardImgs[index]; 
645                var heroCardSrc = heroCardImg.getAttribute("src"); 
646                if(heroCardSrc != "") { 
647                    resizeImg(heroCardImg); 
648
649
650             
651            if (tabs.length == 1) { 
652                $(tabs).parent().css('margin', '0'); 
653                if ($(consumerSelector).length > 0) { 
654                    hideHeroAndDisclaimer('business'); 
655                    showHeroAndDisclaimer('consumer'); 
656                    changeCardLayout(consumerSelector); 
657                    renumberFootnote("consumer"); 
658                    createMetaTag("consumer"); 
659                }  
660                if ($(businessSelector).length > 0) { 
661                    $(businessSelector).addClass('active'); 
662                    hideHeroAndDisclaimer('consumer'); 
663                    showHeroAndDisclaimer('business'); 
664                    changeCardLayout(businessSelector); 
665                    renumberFootnote("business"); 
666                    createMetaTag("business"); 
667
668            }  
669            if (tabs.length == 2) { 
670                renumberFootnote("consumer"); 
671                renumberFootnote("business"); 
672                createMetaTag("consumer"); 
673                 
674                if ($(consumerSelector + ' .jn-consumer-item').length < 3) { 
675                    changeCardLayout(consumerSelector); 
676
677                if ($(businessSelector + ' .jn-consumer-item').length < 3) { 
678                    changeCardLayout(businessSelector); 
679
680                 
681                var tabsNav = document.querySelectorAll('.tab-nav'); 
682                togglePrimaryNav(tabsNav); 
683                 
684                if(window.location.href.indexOf('#business') > -1 ) { 
685                    $(consumerSelector).removeClass('active'); 
686                    $(businessSelector).addClass('active'); 
687                    $('#consumerTab').removeClass('active'); 
688                    $('#businessTab').addClass('active'); 
689                    hideHeroAndDisclaimer('consumer'); 
690                    showHeroAndDisclaimer('business'); 
691                    changeCardLayout(businessSelector); 
692                    renumberFootnote("business"); 
693                    createMetaTag("business"); 
694 
695                    $(tabs).click(function(){ 
696                        if ($(this).attr('id') === "consumerTab") { 
697                            var newUrl = window.location.toString(); 
698                            window.location = newUrl.replace(/#business/, '#consumer'); 
699
700                        if ($(this).attr('id') === "businessTab") { 
701                            var url = window.location.toString(); 
702                            window.location = url.replace(/#consumer/, '#business'); 
703
704                    }); 
705
706                 
707
708        }); 
709 
710        // Primary Nav function      
711        function togglePrimaryNav(elem) { 
712            for (var i = 0; i < elem.length; i++) { 
713                elem[i].addEventListener("click", function(e) { 
714 
715                    var current = this, 
716                        allSections = document.querySelectorAll('[data-id]'), 
717                        section = document.querySelector("[data-id='"+ current.id +"']"); 
718 
719                    for (var a = 0; a < allSections.length; a++) { 
720                        allSections[a].classList.remove('active'); 
721
722                    for (var c = 0; c < elem.length; c++) { 
723                        if (current != elem[c]) { 
724                            elem[c].classList.remove('active'); 
725                        } else { 
726                            current.classList.add('active'); 
727                            section.classList.add('active'); 
728                            hideHeroAndDisclaimer('consumer'); 
729                            hideHeroAndDisclaimer('business'); 
730                            if(current.getAttribute('id') === "consumerTab"){ 
731                                showHeroAndDisclaimer('consumer'); 
732                            } else if(current.getAttribute('id') === "businessTab"){ 
733                                showHeroAndDisclaimer('business'); 
734
735
736
737                    e.preventDefault(); 
738                }); 
739
740
741         
742        function renumberFootnote(type) { 
743            var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]'; 
744            var disclaimerSelector = '.tier3-disclaimer-landing-' + type; 
745            var heroSelector = '.tier3-hero-landing-' + type; 
746            var numOfFootnote = $(disclaimerSelector + ' sup').length; 
747            var showList = []; 
748            var hideList=[]; 
749            for (var i = 1; i <= numOfFootnote; i++) { 
750                var cssClass="tag-" + i; 
751                if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) { 
752                    showList.push(i);      
753                } else { 
754                    hideList.push(i); 
755
756            }  
757            /* 
758            for (var i = 1; i < showList.length + 1; i++) { 
759                if(showList[i-1] != i) { 
760                    var className="tag-" + showList[i-1]; 
761                     
762                    //$(heroSelector).find("." +  className).html(i); 
763                    // $(discriptionSelector).find("." +  className).html(i); 
764                    //$(disclaimerSelector).find("." +  className).html(i); 
765
766
767            */ 
768            for (var i = 0; i <hideList.length; i++) { 
769                var cname="tag-" + hideList[i]; 
770                $(disclaimerSelector).find("." + cname).parent().hide(); 
771            }    
772
773         
774        function changeCardLayout(cssSelector) { 
775            var numOfCards = $(cssSelector + ' .jn-consumer-item').length; 
776            if(numOfCards == 1) { 
777                $(cssSelector).addClass('one-card'); 
778            } else if (numOfCards == 2) { 
779                $(cssSelector).addClass('two-card'); 
780            }   
781
782 
783        function hideHeroAndDisclaimer(type) { 
784            try { 
785                document.querySelector('.tier3-hero-landing-'+ type).classList.remove('show'); 
786                document.querySelector('.tier3-hero-landing-'+ type).classList.add('hide'); 
787            } catch (e) { 
788                console.log(e); 
789
790 
791            try { 
792                document.querySelector('.tier3-disclaimer-landing-'+ type).classList.remove('show'); 
793                document.querySelector('.tier3-disclaimer-landing-'+ type).classList.add('hide');  
794            } catch (e) { 
795                console.log(e); 
796
797 
798
799 
800        function showHeroAndDisclaimer(type) { 
801            try { 
802                document.querySelector('.tier3-hero-landing-'+ type).classList.add('show'); 
803                document.querySelector('.tier3-hero-landing-'+ type).classList.remove('hide'); 
804            } catch (e) { 
805                console.log(e); 
806
807             
808            try { 
809                document.querySelector('.tier3-disclaimer-landing-'+ type).classList.add('show'); 
810                document.querySelector('.tier3-disclaimer-landing-'+ type).classList.remove('hide');  
811            } catch (e) { 
812                console.log(e); 
813
814 
815
816 
817        function createMetaTag(type) { 
818            var partnerName = "${partnerName!0}"; 
819            var product_name = $('.jn-hero-container .jn-button').data('product-name'); 
820            var metaDesc =""; 
821            if (type == "consumer") {             
822                if(product_name ==  "consumer-platinum") { 
823                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card."; 
824                } else if(product_name ==  "real-rewards") { 
825                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase."; 
826                } else if(product_name ==  "secured") { 
827                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
828                } else if(product_name ==  "max-cash") { 
829                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus."; 
830                } else if(product_name ==  "max-cash-secured") { 
831                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn more on the categories you pick."; 
832                } else if(product_name ==  "travel-rewards-plus") { 
833                    metaDesc = "Apply Today for a "+partnerName+" Credit Card."; 
834                } else if(product_name ==  "reserve-rewards-plus") { 
835                    metaDesc = "Apply Today for a "+partnerName+" Credit Card."; 
836
837 
838            } else if (type == "business") { 
839                if(product_name ==  "business-cashback") {               
840                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
841                } else if(product_name ==  "business-real-rewards") { 
842                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on."; 
843                } else if(product_name ==  "business-platinum") { 
844                    metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
845                } else if(product_name ==  "smart-business-rewards") { 
846                    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."; 
847
848
849            var m = document.createElement('meta');  
850            m.name = 'description';  
851            m.content = metaDesc;  
852            document.head.appendChild(m); 
853
854         
855        function resizeImg(img) { 
856            img.addEventListener("load", function() { 
857                var cardImgWidth = img.width; 
858                var cardImgHeight = img.height; 
859                if(cardImgWidth > cardImgHeight) { 
860                    img.style.width = "285px"; 
861                } else { 
862                    img.style.width = "150px"; 
863
864            }); 
865
866 
867        AUI().ready(function() { 
868            MicroModal.init(); 
869        }); 
870    </script>                 
871</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417682" 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#153417682" 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 fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
25    <#if (fiCardsData?size > 0) > 
26        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
27 
28        <#if (cardProvider?size > 0)> 
29            <#-- This will be V for visa or M for mastercard. --> 
30            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
31        <#else> 
32            <script> 
33                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
34            </script> 
35        </#if> 
36 
37        <div class="jn-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer"> 
38            <div class="disclaimer"> 
39                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
40                    ${disclaimersVisa.getData()} 
41                </#if> 
42                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
43                    ${disclaimersMasterCard.getData()} 
44                </#if> 
45            </div> 
46        </div> 
47    <#else> 
48        <script> 
49            console.log("card data empty"); 
50        </script> 
51    </#if> 
52<#else> 
53    <script> 
54        console.log("No lc for disclaimer"); 
55    </script> 
56</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417682" 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#153417682" 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 fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
25    <#if (fiCardsData?size > 0) > 
26        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
27 
28        <#if (cardProvider?size > 0)> 
29            <#-- This will be V for visa or M for mastercard. --> 
30            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
31        <#else> 
32            <script> 
33                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
34            </script> 
35        </#if> 
36 
37        <div class="jn-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer"> 
38            <div class="disclaimer"> 
39                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
40                    ${disclaimersVisa.getData()} 
41                </#if> 
42                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
43                    ${disclaimersMasterCard.getData()} 
44                </#if> 
45            </div> 
46        </div> 
47    <#else> 
48        <script> 
49            console.log("card data empty"); 
50        </script> 
51    </#if> 
52<#else> 
53    <script> 
54        console.log("No lc for disclaimer"); 
55    </script> 
56</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417685" 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#153417685" 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<div id="footerIdAdPlatinum"> 
16  ${footerContent.getData()} 
17</div> 
18 
19<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
20<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
21<style> 
22    #opt-out-button, 
23    .modal__btn.learn-more { 
24        background: #0C2074; 
25        border: 1px solid #0C2074; 
26        color: white; 
27        text-transform: uppercase; 
28        text-decoration: none; 
29        font-size: 16px; 
30        padding: 0.5rem 2rem; 
31        display: inline-block; 
32        border-radius: 0; 
33
34    #opt-out-button:hover, 
35    .modal__btn.learn-more:hover { 
36        color: white !important; 
37        border-color: #2C76AF !important; 
38        background-color: #2C76AF !important; 
39
40    .modal .modal__btn.learn-more { 
41        background: white; 
42        border: 1px solid #0C2074; 
43        color: #0C2074; 
44        text-decoration: none; 
45
46    #opt-out-button[disabled="true"] { 
47        background-color: rgba(0,0,0,.15); 
48        color: rgba(0,0,0,.45); 
49        border-color: rgba(0,0,0,.25); 
50
51    #opt-out-button:hover[disabled="true"] { 
52        background-color: rgba(0,0,0,.15) !important; 
53        color: rgba(0,0,0,.45) !important; 
54        border-color: rgba(0,0,0,.25) !important; 
55
56    #opt-out-button:focus { 
57        outline-style: solid; 
58        outline-color: white; 
59        outline-offset: -3px; 
60        outline-width: 1px; 
61
62    .opt-out-link svg { 
63        width: 30px; 
64        height: 14px; 
65        width: auto; 
66        vertical-align: middle; 
67
68    .modal__overlay { 
69        position: fixed; 
70        top: 0; 
71        left: 0; 
72        right: 0; 
73        bottom: 0; 
74        background: rgba(0,0,0,0.6); 
75        display: flex; 
76        justify-content: center; 
77        align-items: center; 
78
79 
80    .modal__container { 
81        background-color: #fff; 
82        padding: 30px; 
83        max-width: 500px; 
84        max-height: 100vh; 
85        border-radius: 4px; 
86        overflow-y: auto; 
87        box-sizing: border-box; 
88
89 
90    .modal__header { 
91        display: flex; 
92        justify-content: space-between; 
93        align-items: center; 
94
95 
96    .modal .modal__container .modal__title { 
97        margin-top: 0; 
98        margin-bottom: 0; 
99        font-weight: 600; 
100        font-size: 20px; 
101        line-height: 1.25; 
102        color: #00449e; 
103        box-sizing: border-box; 
104
105 
106    .modal__close { 
107        background: transparent; 
108        border: 1px solid white; 
109        padding: 4px 8px; 
110
111    .modal__close:hover { 
112        border: 1px solid black; 
113
114 
115    .modal__header .modal__close:before { content: "\2715"; } 
116 
117    .modal__content { 
118        margin-top: 2rem; 
119        margin-bottom: 2rem; 
120        line-height: 1.5; 
121
122 
123    @keyframes mmfadeIn { 
124        from { opacity: 0; } 
125        to { opacity: 1; } 
126
127 
128    @keyframes mmfadeOut { 
129        from { opacity: 1; } 
130        to { opacity: 0; } 
131
132 
133    @keyframes mmslideIn { 
134        from { transform: translateY(15%); } 
135        to { transform: translateY(0); } 
136
137 
138    @keyframes mmslideOut { 
139        from { transform: translateY(0); } 
140        to { transform: translateY(-10%); } 
141
142 
143    .micromodal-slide { 
144        display: none; 
145
146 
147    .micromodal-slide.is-open { 
148        display: block; 
149
150 
151    .micromodal-slide[aria-hidden="false"] .modal__overlay { 
152        animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
153
154 
155    .micromodal-slide[aria-hidden="false"] .modal__container { 
156        animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
157
158 
159    .micromodal-slide[aria-hidden="true"] .modal__overlay { 
160        animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
161
162 
163    .micromodal-slide[aria-hidden="true"] .modal__container { 
164        animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
165
166 
167    .micromodal-slide .modal__container, 
168    .micromodal-slide .modal__overlay { 
169        will-change: transform; 
170
171</style> 
172 
173<div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
174<div class="modal__overlay" tabindex="-1" data-micromodal-close> 
175    <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
176    <header class="modal__header"> 
177        <h2 class="modal__title" id="modal-1-title"> 
178        Your California privacy choices 
179        </h2> 
180        <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
181    </header> 
182    <div class="modal__content" id="modal-1-content"> 
183        <div id="message-no-cookie"> 
184            <p> 
185            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> 
186             
187<p>&nbsp;</p> 
188 
189<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> 
190    </div> 
191    <div id="message-with-cookie"> 
192        <p>You have successfully opted-out.</p> 
193    </div> 
194    </div> 
195    <div class="modal__footer"> 
196        <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> 
197        <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
198    </div> 
199    </div> 
200</div> 
201</div> 
202<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
203<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
204<script> 
205AUI().ready(function() { 
206        //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading. 
207        const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright'); 
208        const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic'); 
209        const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement'); 
210        agreementNode.innerHTML= '<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!''}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>'; 
211        copyrightNode.innerHTML= '<sup>©</sup> Elan Financial Services ' + ${currentYear}; 
212        copyrightNode.classList.add('ecdma-footer-client-name-copyright'); 
213        fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
214        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
215        fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><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>'); 
216        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
217 
218        window.getCookieDomain = function() { 
219            var hostname = window.location.hostname.split("."); 
220            return hostname && hostname.slice(hostname.length - 2).join("."); 
221
222        window.setToOptOut = function() { 
223            if (window.getCookie('privacy_optout')) { 
224                    document.getElementById('message-no-cookie').style.display = 'none'; 
225                    document.getElementById('message-with-cookie').style.display = 'block'; 
226                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
227                } else { 
228                    document.getElementById('message-no-cookie').style.display = 'block'; 
229                    document.getElementById('message-with-cookie').style.display = 'none'; 
230
231
232        window.getCookie = function(name) { 
233            var value = '; ' + document.cookie; 
234            var parts = value.split('; ' + name + '='); 
235            if (parts.length === 2) return parts.pop().split(';').shift(); 
236
237        window.californiaOptOut = function() { 
238            if (!window.getCookie('privacy_optout')) { 
239                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
240                try { 
241                if (window.CustomEvent) { 
242                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
243                } else { 
244                    var privacyOptoutEvent = document.createEvent('Event'); 
245                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
246                    window.dispatchEvent(privacyOptoutEvent); 
247
248                window.setToOptOut(); 
249                } catch (err) { 
250                console.error(err); 
251
252
253
254        MicroModal.init({ 
255            onShow: window.setToOptOut 
256        }); 
257     
258        // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
259        const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
260        if(isBrowserGpcOptOut === true) { 
261        window.californiaOptOut(); 
262
263    }); 
264</script> 
265<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->