حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411750" at line 10, column 17]

----
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 bCode = qstringmap["bankercod...  [in template "10154#10192#153411750" at line 10, column 1]
----
1<#assign url = 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 applicationType = "saa" > 
8<#assign useprcaValue = "" > 
9<#assign prcaURL = propsUtil.get('elan.prca.url')> 
10<#assign bCode= qstringmap["bankercode"]?first> 
11<#assign bCode = htmlUtil.escape(bCode)> 
12<#assign bCode = htmlUtil.escapeJS(bCode)> 
13 
14<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
15<#list bData as b>      
16    <#assign lc = b.locationcode > 
17    <#assign rLC = b.reallocationcode > 
18    <#assign mappedLC = b.mappedLocationCode > 
19    
20</#list>  
21   
22<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
23    <#assign ameriprise = true> 
24<#else> 
25    <#assign ameriprise = false> 
26</#if> 
27 
28<#if mappedLC?has_content && !ameriprise> 
29    <#assign lc = mappedLC > 
30</#if> 
31<#assign isEmployee = false> 
32 
33<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
34<#if fiData?first?has_content> 
35    <#assign fi = fiData?first> 
36    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
37        <#assign subbu_special = fi.offerId> 
38    </#if> 
39    <#if fi.projectType == "emp"> 
40        <#assign isEmployee = true> 
41    </#if> 
42</#if>  
43 
44<#if lc?has_content> 
45    <#assign prefix = "00000" > 
46    <#assign lcWithPrefix = prefix + lc> 
47    <#assign withPrefixLength = lcWithPrefix?length > 
48    <#assign startHere = withPrefixLength - 5> 
49    <#assign lc = lcWithPrefix?substring(startHere)>     
50    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
51    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52 
53    <#assign clientProfile = clientProfileList?first> 
54    <#assign partnerName = clientProfile.getMarketingNameLong()> 
55    <#assign pbu = clientProfile.getPbu()> 
56    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>     
57    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
58    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
59    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
60    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")>             
61        <#assign partnerUrl = 'https://' + partnerUrl> 
62    </#if> 
63 
64    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
65    <#if clientdataList?has_content > 
66        <#assign clientdata = clientdataList?first > 
67    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
68		<#assign backgroundImage = clientdata["backgroundImage"] > 
69		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
70		<#assign AprMin = clientdata["AprMin"] > 
71		<#assign AprMax = clientdata["AprMax"] > 
72		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
73		<#assign BillingCycles = clientdata["BillingCycles"] > 
74		<#assign textHexColor = clientdata["textHexColor"] > 
75		<#assign linkHexColor = clientdata["linkHexColor"] > 
76		<#assign hoverColor = clientdata["hoverColor"] > 
77		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
78		<#assign transparency = clientdata["transparency"] > 
79		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
80		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
81		<#assign businessTransparency = clientdata["businessTransparency"] > 
82		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
83		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
84	</#if> --> 
85	 
86    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
87    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
88    <#if pbu == "0864054"> 
89        <#assign override = "berkshire"> 
90    <#else> 
91        <#assign override = " "> 
92    </#if> 
93    <#--  this one should be delete for prod  --> 
94                 
95    <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">   
96    <#assign logoFileName = pbu + "-" + subbu + ".png">--> 
97 
98    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
99    <#if (subbu_special?has_content)> 
100        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
101    <#else> 
102        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
103    </#if> 
104    <#assign temp = []> 
105    <#assign consumerCards = []> 
106    <#assign businessCards = []>  
107    <#assign offerTypeList = []>       
108    <#assign index = 0> 
109    <#assign ameriprise_cards= []> 
110    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
111    <#assign businessOfferTypes =['128', '121', '144', '143']> 
112    <#list fiCardsData as fib> 
113		 
114        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
115            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
116            <#assign temp = temp + fiCardsData[index..index]>    
117            <#if ameriprise> 
118                <#if (fib.offerType == "101" || fib.offerType == "103")> 
119                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
120                </#if>                      
121            <#else> 
122                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
123                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
124                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
125                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
126                </#if>             
127            </#if>                 
128        </#if>  
129        <#assign index = index + 1>   
130                     
131    </#list>        
132    <#assign fiCardsData = temp> 
133    <#if ameriprise> 
134        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
135    </#if> 
136 
137    <#if (fiCardsData?size > 0)>   
138        <#if (subbu_special?has_content)> 
139            <#assign lc_used = fiCardsData?first.WebLocationCode>   
140        <#else> 
141            <#if ameriprise> 
142                <#assign lc_used = mappedLC>  
143            <#else> 
144                <#assign lc_used = lc>  
145            </#if> 
146        </#if>               
147        <#assign offerId = ""> 
148        <#assign sourceCode = ""> 
149        <#assign cardArtImage = ""> 
150        <#assign productUrl = ""> 
151        <#assign product = ""> 
152        <#assign preparerType = "customer"> 
153        <#assign apr = ""> 
154        <#assign cardIndex = 0>  
155        <#assign empOfferId = "">  
156        <#if consumerCards[0]?has_content> 
157            <#assign empOfferId = consumerCards[0].empofferId!""> 
158        </#if> 
159        <#assign marketingChannel = 'SAT2A'> 
160        <#if isEmployee> 
161            <#assign marketingChannel = 'EMPL'> 
162            <#assign offerId = empOfferId>       
163        </#if> 
164 
165        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
166            <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))> 
167                <#list consumerCards as card> 
168					<#assign useprcaValue = card.useprca!""> 
169                    <#if (card.offerType=="108" || card.offerType=="109") > 
170                        <#assign offerId = card.saaofferId> 
171                        <#if isEmployee> 
172                            <#assign offerId = card.empofferId!""> 
173                        </#if> 
174                        <#assign sourceCode = card.sourceCode> 
175                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
176                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
177 
178                        <#assign productUrl="consumer-platinum2103"> 
179                        <#assign product="Platinum"> 
180                        <#assign cardIndex = 4> 
181 
182                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
183                        <#if (scrapedData?size > 0)> 
184                            <#list scrapedData as sItem> 
185                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
186                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
187                                    <#break> 
188                                </#if> 
189                            </#list> 
190                            <script> 
191                                $(document).ready(function () { 
192                                    var aprText = "${apr}"; 
193                                    if (aprText) { 
194                                        try { 
195                                            $(".apr-full-text").html(aprText); 
196                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
197                                            var billing_cycle = matches[1]; 
198                                            var apr_min = apr_min = matches[2]; 
199                                            var apr_max = apr_max = matches[3]; 
200                                            if (billing_cycle) { 
201                                                $(".scraped-billing-cycle").html(billing_cycle); 
202
203                                            if (apr_min) { 
204                                                $(".scraped-apr-min").html(apr_min); 
205
206                                            if (apr_max) { 
207                                                $('.scraped-apr-max').html(apr_max); 
208
209 
210                                        } catch (e) { 
211                                            console.log(e); 
212
213                                    } else { 
214                                      $(".apr-full-text").html(''); 
215
216                                }); 
217                            </script> 
218                        </#if> 
219                        <script> 
220                        var product = "${product}"; 
221                        var partnerName = "${partnerName}"; 
222                          $(document).ready(function () { 
223                            $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms &amp; conditions</a>'); 
224                          }); 
225                        </script> 
226                    </#if> 
227                </#list> 
228            <#else> 
229                <#assign displayedCard = consumerCards[0]> 
230                <#assign offerId = displayedCard.saaofferId> 
231                <#if isEmployee> 
232                    <#assign offerId = displayedCard.empofferId!""> 
233                </#if> 
234                <#assign sourceCode = displayedCard.sourceCode> 
235                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
236                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
237                <#if ameriprise> 
238                    <#if (displayedCard.offerType == "101")> 
239                        <#assign productUrl="ameriprise-premier-visa-signature"> 
240                        <#assign product="Premier Visa Signature"> 
241                        <#assign cardIndex = 0> 
242                    <#elseif (displayedCard.offerType == "103")> 
243                        <#assign productUrl = "ameriprise-visa-signature"> 
244                        <#assign product="Visa Signature"> 
245                        <#assign cardIndex = 1> 
246                    </#if> 
247                <#else>                   
248                        <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
249                            <#assign productUrl = "consumer-platinum2103"> 
250                            <#assign product="Platinum">    
251                            <#assign cardIndex = 4>    
252                            <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
253                            <#if (scrapedData?size > 0)> 
254                                <#list scrapedData as sItem> 
255                                    <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
256                                        <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
257                                        <#break> 
258                                    </#if> 
259                                </#list> 
260                                <script> 
261                                    $(document).ready(function () { 
262                                        var aprText = "${apr}"; 
263                                        if (aprText) { 
264                                            try { 
265                                                $(".apr-full-text").html(aprText); 
266                                                var matches= aprText.match(/\d+(\.\d+)?%?/g); 
267                                                var billing_cycle = matches[1]; 
268                                                var apr_min = apr_min = matches[2]; 
269                                                var apr_max = apr_max = matches[3]; 
270                                                if (billing_cycle) { 
271                                                    $(".scraped-billing-cycle").html(billing_cycle); 
272
273                                                if (apr_min) { 
274                                                    $(".scraped-apr-min").html(apr_min); 
275
276                                                if (apr_max) { 
277                                                    $('.scraped-apr-max').html(apr_max); 
278
279 
280                                            } catch (e) { 
281                                                console.log(e); 
282
283                                        } else { 
284                                          $(".apr-full-text").html(''); 
285
286                                    }); 
287                                </script> 
288                            </#if>     
289                        <#elseif (displayedCard.offerType == "104")> 
290                            <#assign productUrl = "max-cash"> 
291                            <#assign product="Max Cash Preferred"> 
292                            <#assign cardIndex = 0>    
293                        <#elseif (displayedCard.offerType == "141")> 
294                            <#assign productUrl = "college-real-rewards"> 
295                            <#assign product="College Real Rewards"> 
296                            <#assign cardIndex = 2>                                                
297                        <#elseif (displayedCard.offerType == "115")> 
298                            <#assign productUrl = "secured"> 
299                            <#assign product="Secured"> 
300                            <#assign cardIndex = 3> 
301                        </#if> 
302                </#if> 
303            </#if> 
304        </#if> 
305        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
306             
307            <#if (offerTypeList?seq_contains("128")) > 
308                <#list businessCards as card> 
309					<#assign useprcaValue = card.useprca!""> 
310                    <#if (card.offerType=="128")> 
311                        <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
312                        <#assign offerId = card.saaofferId> 
313                        <#assign sourceCode = card.sourceCode> 
314                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
315                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
316                        <#assign productUrl = "business-cash-preferred"> 
317                        <#assign product="Business Cash Preferred">                 
318                        <#assign cardIndex = 0> 
319                    </#if> 
320                </#list> 
321            <#else> 
322                <#assign displayedCard = businessCards[0]> 
323                <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
324                <#assign offerId = displayedCard.saaofferId> 
325                <#assign sourceCode = displayedCard.sourceCode> 
326                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
327                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
328 
329                <#if (displayedCard.offerType=="143")> 
330                    <#assign productUrl="business-real-rewards"> 
331                    <#assign product="Business Real Rewards"> 
332                    <#assign cardIndex = 2>    
333                <#elseif (displayedCard.offerType=="144")> 
334                    <#assign productUrl = "smart-business-rewards"> 
335                    <#assign product="Smart Business Rewards"> 
336                    <#assign cardIndex = 1>                     
337                <#elseif (displayedCard.offerType=="121")> 
338                    <#assign productUrl = "business-platinum2103"> 
339                    <#assign product="Business Card"> 
340                    <#assign cardIndex = 3> 
341                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
342                    <#if (scrapedData?size > 0)> 
343                        <#list scrapedData as sItem> 
344                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
345                                <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
346                                <#break> 
347                            </#if> 
348                        </#list> 
349                        <script> 
350                            $(document).ready(function () { 
351                                var aprText = "${apr}"; 
352                                if (aprText) { 
353                                    try { 
354                                        $(".apr-full-text").html(aprText); 
355                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
356                                        var billing_cycle = matches[1]; 
357                                        var apr_min = apr_min = matches[2]; 
358                                        var apr_max = apr_max = matches[3]; 
359                                        if (billing_cycle) { 
360                                            $(".scraped-billing-cycle").html(billing_cycle); 
361
362                                        if (apr_min) { 
363                                            $(".scraped-apr-min").html(apr_min); 
364
365                                        if (apr_max) { 
366                                            $('.scraped-apr-max').html(apr_max); 
367
368 
369                                    } catch (e) { 
370                                        console.log(e); 
371
372                                } else { 
373                                  $(".apr-full-text").html(''); 
374
375                            }); 
376                        </script> 
377                    </#if>                       
378                </#if> 
379            </#if> 
380        </#if>    
381        <#if product != ""> 
382            <#if ameriprise> 
383                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
384                <#assign rollover_text =  partnerName + " " + product + " Card"> 
385            <#else> 
386                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
387                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
388                <#assign card_text = product + " Card"> 
389            </#if>  
390        </#if>  
391        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
392            <div class="hero-main"> 
393                <div class="hero-main-logo"> 
394                    <#if partnerUrl?has_content> 
395                        <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
396                    <#else> 
397                        <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
398                    </#if> 
399                </div> 
400                <div class="hero-main-container"> 
401                    <div class="hero-main-offer bg-color-white"> 
402                    <div class="offer-detail"> 
403 
404                            <div class="offer-detail-cardArt cardArtImg">                                                  
405                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
406                                <p>${card_text!''}</p> 
407                            </div> 
408                            <div class="offer-detail-text text-color-default hide-desktop"> 
409                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
410                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
411                            </div> 
412 
413                            <#if ameriprise> 
414                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
415                            <#else>  
416								<#if (useprcaValue == "1")> 
417                                <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm hide-desktop"> 
418                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
419                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
420                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
421                                    <button  
422                                        type="submit"  
423                                        data-button-name="cta-button-top"   
424                                        data-product-name="${productUrl!''}"                                        
425                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
426                                        disabled  
427
428                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
429                                    </button> 
430                                </form> 
431								<#else> 
432								<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop"> 
433                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
434                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
435                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
436                                    <button  
437                                        type="submit"  
438                                        data-button-name="cta-button-top"   
439                                        data-product-name="${productUrl!''}"                                        
440                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
441                                        disabled  
442
443                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
444                                    </button> 
445                                </form> 
446								</#if> 
447                            </#if> 
448                        </div> 
449 
450                        <div class="offer-header"> 
451                             <div class="offer-text-top"> 
452                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
453                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
454                            </div> 
455                            <div class="offer-text-bottom hide-mobile"> 
456                                <div class="offer-detail-text text-color-default"> 
457                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
458                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
459                                </div> 
460 
461                                <#if ameriprise> 
462                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
463                                <#else>  
464									<#if (useprcaValue == "1")> 
465                                    <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm"> 
466                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
467                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
468                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
469                                        <button  
470                                            type="submit"  
471                                            data-button-name="cta-button-top"   
472                                            data-product-name="${productUrl!''}"  
473                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
474                                            disabled 
475
476                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
477                                        </button> 
478                                    </form> 
479									<#else>  
480									<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm"> 
481                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
482                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
483                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
484                                        <button  
485                                            type="submit"  
486                                            data-button-name="cta-button-top"   
487                                            data-product-name="${productUrl!''}"  
488                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
489                                            disabled 
490
491                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
492                                        </button> 
493                                    </form> 
494									</#if> 
495                                </#if> 
496                            </div> 
497                        </div>                        
498                    </div> 
499                </div> 
500            </div> 
501        </div>   
502 
503    </#if> 
504</#if> 
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411750" at line 10, column 17]

----
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 bCode = qstringmap["bankercod...  [in template "10154#10192#153411750" at line 10, column 1]
----
1<#assign url = 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 applicationType = "saa" > 
8<#assign useprcaValue = "" > 
9<#assign prcaURL = propsUtil.get('elan.prca.url')> 
10<#assign bCode= qstringmap["bankercode"]?first> 
11<#assign bCode = htmlUtil.escape(bCode)> 
12<#assign bCode = htmlUtil.escapeJS(bCode)> 
13 
14<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
15<#list bData as b>      
16    <#assign lc = b.locationcode > 
17    <#assign rLC = b.reallocationcode > 
18    <#assign mappedLC = b.mappedLocationCode > 
19    
20</#list>  
21   
22<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
23    <#assign ameriprise = true> 
24<#else> 
25    <#assign ameriprise = false> 
26</#if> 
27 
28<#if mappedLC?has_content && !ameriprise> 
29    <#assign lc = mappedLC > 
30</#if> 
31<#assign isEmployee = false> 
32 
33<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
34<#if fiData?first?has_content> 
35    <#assign fi = fiData?first> 
36    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
37        <#assign subbu_special = fi.offerId> 
38    </#if> 
39    <#if fi.projectType == "emp"> 
40        <#assign isEmployee = true> 
41    </#if> 
42</#if>  
43 
44<#if lc?has_content> 
45    <#assign prefix = "00000" > 
46    <#assign lcWithPrefix = prefix + lc> 
47    <#assign withPrefixLength = lcWithPrefix?length > 
48    <#assign startHere = withPrefixLength - 5> 
49    <#assign lc = lcWithPrefix?substring(startHere)>     
50    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
51    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52 
53    <#assign clientProfile = clientProfileList?first> 
54    <#assign partnerName = clientProfile.getMarketingNameLong()> 
55    <#assign pbu = clientProfile.getPbu()> 
56    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>     
57    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
58    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
59    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
60    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")>             
61        <#assign partnerUrl = 'https://' + partnerUrl> 
62    </#if> 
63 
64    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
65    <#if clientdataList?has_content > 
66        <#assign clientdata = clientdataList?first > 
67    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
68		<#assign backgroundImage = clientdata["backgroundImage"] > 
69		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
70		<#assign AprMin = clientdata["AprMin"] > 
71		<#assign AprMax = clientdata["AprMax"] > 
72		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
73		<#assign BillingCycles = clientdata["BillingCycles"] > 
74		<#assign textHexColor = clientdata["textHexColor"] > 
75		<#assign linkHexColor = clientdata["linkHexColor"] > 
76		<#assign hoverColor = clientdata["hoverColor"] > 
77		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
78		<#assign transparency = clientdata["transparency"] > 
79		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
80		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
81		<#assign businessTransparency = clientdata["businessTransparency"] > 
82		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
83		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
84	</#if> --> 
85	 
86    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
87    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
88    <#if pbu == "0864054"> 
89        <#assign override = "berkshire"> 
90    <#else> 
91        <#assign override = " "> 
92    </#if> 
93    <#--  this one should be delete for prod  --> 
94                 
95    <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">   
96    <#assign logoFileName = pbu + "-" + subbu + ".png">--> 
97 
98    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
99    <#if (subbu_special?has_content)> 
100        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
101    <#else> 
102        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
103    </#if> 
104    <#assign temp = []> 
105    <#assign consumerCards = []> 
106    <#assign businessCards = []>  
107    <#assign offerTypeList = []>       
108    <#assign index = 0> 
109    <#assign ameriprise_cards= []> 
110    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
111    <#assign businessOfferTypes =['128', '121', '144', '143']> 
112    <#list fiCardsData as fib> 
113		 
114        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
115            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
116            <#assign temp = temp + fiCardsData[index..index]>    
117            <#if ameriprise> 
118                <#if (fib.offerType == "101" || fib.offerType == "103")> 
119                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
120                </#if>                      
121            <#else> 
122                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
123                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
124                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
125                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
126                </#if>             
127            </#if>                 
128        </#if>  
129        <#assign index = index + 1>   
130                     
131    </#list>        
132    <#assign fiCardsData = temp> 
133    <#if ameriprise> 
134        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
135    </#if> 
136 
137    <#if (fiCardsData?size > 0)>   
138        <#if (subbu_special?has_content)> 
139            <#assign lc_used = fiCardsData?first.WebLocationCode>   
140        <#else> 
141            <#if ameriprise> 
142                <#assign lc_used = mappedLC>  
143            <#else> 
144                <#assign lc_used = lc>  
145            </#if> 
146        </#if>               
147        <#assign offerId = ""> 
148        <#assign sourceCode = ""> 
149        <#assign cardArtImage = ""> 
150        <#assign productUrl = ""> 
151        <#assign product = ""> 
152        <#assign preparerType = "customer"> 
153        <#assign apr = ""> 
154        <#assign cardIndex = 0>  
155        <#assign empOfferId = "">  
156        <#if consumerCards[0]?has_content> 
157            <#assign empOfferId = consumerCards[0].empofferId!""> 
158        </#if> 
159        <#assign marketingChannel = 'SAT2A'> 
160        <#if isEmployee> 
161            <#assign marketingChannel = 'EMPL'> 
162            <#assign offerId = empOfferId>       
163        </#if> 
164 
165        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
166            <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))> 
167                <#list consumerCards as card> 
168					<#assign useprcaValue = card.useprca!""> 
169                    <#if (card.offerType=="108" || card.offerType=="109") > 
170                        <#assign offerId = card.saaofferId> 
171                        <#if isEmployee> 
172                            <#assign offerId = card.empofferId!""> 
173                        </#if> 
174                        <#assign sourceCode = card.sourceCode> 
175                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
176                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
177 
178                        <#assign productUrl="consumer-platinum2103"> 
179                        <#assign product="Platinum"> 
180                        <#assign cardIndex = 4> 
181 
182                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
183                        <#if (scrapedData?size > 0)> 
184                            <#list scrapedData as sItem> 
185                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
186                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
187                                    <#break> 
188                                </#if> 
189                            </#list> 
190                            <script> 
191                                $(document).ready(function () { 
192                                    var aprText = "${apr}"; 
193                                    if (aprText) { 
194                                        try { 
195                                            $(".apr-full-text").html(aprText); 
196                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
197                                            var billing_cycle = matches[1]; 
198                                            var apr_min = apr_min = matches[2]; 
199                                            var apr_max = apr_max = matches[3]; 
200                                            if (billing_cycle) { 
201                                                $(".scraped-billing-cycle").html(billing_cycle); 
202
203                                            if (apr_min) { 
204                                                $(".scraped-apr-min").html(apr_min); 
205
206                                            if (apr_max) { 
207                                                $('.scraped-apr-max').html(apr_max); 
208
209 
210                                        } catch (e) { 
211                                            console.log(e); 
212
213                                    } else { 
214                                      $(".apr-full-text").html(''); 
215
216                                }); 
217                            </script> 
218                        </#if> 
219                        <script> 
220                        var product = "${product}"; 
221                        var partnerName = "${partnerName}"; 
222                          $(document).ready(function () { 
223                            $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms &amp; conditions</a>'); 
224                          }); 
225                        </script> 
226                    </#if> 
227                </#list> 
228            <#else> 
229                <#assign displayedCard = consumerCards[0]> 
230                <#assign offerId = displayedCard.saaofferId> 
231                <#if isEmployee> 
232                    <#assign offerId = displayedCard.empofferId!""> 
233                </#if> 
234                <#assign sourceCode = displayedCard.sourceCode> 
235                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
236                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
237                <#if ameriprise> 
238                    <#if (displayedCard.offerType == "101")> 
239                        <#assign productUrl="ameriprise-premier-visa-signature"> 
240                        <#assign product="Premier Visa Signature"> 
241                        <#assign cardIndex = 0> 
242                    <#elseif (displayedCard.offerType == "103")> 
243                        <#assign productUrl = "ameriprise-visa-signature"> 
244                        <#assign product="Visa Signature"> 
245                        <#assign cardIndex = 1> 
246                    </#if> 
247                <#else>                   
248                        <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
249                            <#assign productUrl = "consumer-platinum2103"> 
250                            <#assign product="Platinum">    
251                            <#assign cardIndex = 4>    
252                            <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
253                            <#if (scrapedData?size > 0)> 
254                                <#list scrapedData as sItem> 
255                                    <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
256                                        <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
257                                        <#break> 
258                                    </#if> 
259                                </#list> 
260                                <script> 
261                                    $(document).ready(function () { 
262                                        var aprText = "${apr}"; 
263                                        if (aprText) { 
264                                            try { 
265                                                $(".apr-full-text").html(aprText); 
266                                                var matches= aprText.match(/\d+(\.\d+)?%?/g); 
267                                                var billing_cycle = matches[1]; 
268                                                var apr_min = apr_min = matches[2]; 
269                                                var apr_max = apr_max = matches[3]; 
270                                                if (billing_cycle) { 
271                                                    $(".scraped-billing-cycle").html(billing_cycle); 
272
273                                                if (apr_min) { 
274                                                    $(".scraped-apr-min").html(apr_min); 
275
276                                                if (apr_max) { 
277                                                    $('.scraped-apr-max').html(apr_max); 
278
279 
280                                            } catch (e) { 
281                                                console.log(e); 
282
283                                        } else { 
284                                          $(".apr-full-text").html(''); 
285
286                                    }); 
287                                </script> 
288                            </#if>     
289                        <#elseif (displayedCard.offerType == "104")> 
290                            <#assign productUrl = "max-cash"> 
291                            <#assign product="Max Cash Preferred"> 
292                            <#assign cardIndex = 0>    
293                        <#elseif (displayedCard.offerType == "141")> 
294                            <#assign productUrl = "college-real-rewards"> 
295                            <#assign product="College Real Rewards"> 
296                            <#assign cardIndex = 2>                                                
297                        <#elseif (displayedCard.offerType == "115")> 
298                            <#assign productUrl = "secured"> 
299                            <#assign product="Secured"> 
300                            <#assign cardIndex = 3> 
301                        </#if> 
302                </#if> 
303            </#if> 
304        </#if> 
305        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
306             
307            <#if (offerTypeList?seq_contains("128")) > 
308                <#list businessCards as card> 
309					<#assign useprcaValue = card.useprca!""> 
310                    <#if (card.offerType=="128")> 
311                        <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
312                        <#assign offerId = card.saaofferId> 
313                        <#assign sourceCode = card.sourceCode> 
314                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
315                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
316                        <#assign productUrl = "business-cash-preferred"> 
317                        <#assign product="Business Cash Preferred">                 
318                        <#assign cardIndex = 0> 
319                    </#if> 
320                </#list> 
321            <#else> 
322                <#assign displayedCard = businessCards[0]> 
323                <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
324                <#assign offerId = displayedCard.saaofferId> 
325                <#assign sourceCode = displayedCard.sourceCode> 
326                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
327                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
328 
329                <#if (displayedCard.offerType=="143")> 
330                    <#assign productUrl="business-real-rewards"> 
331                    <#assign product="Business Real Rewards"> 
332                    <#assign cardIndex = 2>    
333                <#elseif (displayedCard.offerType=="144")> 
334                    <#assign productUrl = "smart-business-rewards"> 
335                    <#assign product="Smart Business Rewards"> 
336                    <#assign cardIndex = 1>                     
337                <#elseif (displayedCard.offerType=="121")> 
338                    <#assign productUrl = "business-platinum2103"> 
339                    <#assign product="Business Card"> 
340                    <#assign cardIndex = 3> 
341                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
342                    <#if (scrapedData?size > 0)> 
343                        <#list scrapedData as sItem> 
344                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
345                                <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
346                                <#break> 
347                            </#if> 
348                        </#list> 
349                        <script> 
350                            $(document).ready(function () { 
351                                var aprText = "${apr}"; 
352                                if (aprText) { 
353                                    try { 
354                                        $(".apr-full-text").html(aprText); 
355                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
356                                        var billing_cycle = matches[1]; 
357                                        var apr_min = apr_min = matches[2]; 
358                                        var apr_max = apr_max = matches[3]; 
359                                        if (billing_cycle) { 
360                                            $(".scraped-billing-cycle").html(billing_cycle); 
361
362                                        if (apr_min) { 
363                                            $(".scraped-apr-min").html(apr_min); 
364
365                                        if (apr_max) { 
366                                            $('.scraped-apr-max').html(apr_max); 
367
368 
369                                    } catch (e) { 
370                                        console.log(e); 
371
372                                } else { 
373                                  $(".apr-full-text").html(''); 
374
375                            }); 
376                        </script> 
377                    </#if>                       
378                </#if> 
379            </#if> 
380        </#if>    
381        <#if product != ""> 
382            <#if ameriprise> 
383                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
384                <#assign rollover_text =  partnerName + " " + product + " Card"> 
385            <#else> 
386                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
387                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
388                <#assign card_text = product + " Card"> 
389            </#if>  
390        </#if>  
391        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
392            <div class="hero-main"> 
393                <div class="hero-main-logo"> 
394                    <#if partnerUrl?has_content> 
395                        <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
396                    <#else> 
397                        <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
398                    </#if> 
399                </div> 
400                <div class="hero-main-container"> 
401                    <div class="hero-main-offer bg-color-white"> 
402                    <div class="offer-detail"> 
403 
404                            <div class="offer-detail-cardArt cardArtImg">                                                  
405                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
406                                <p>${card_text!''}</p> 
407                            </div> 
408                            <div class="offer-detail-text text-color-default hide-desktop"> 
409                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
410                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
411                            </div> 
412 
413                            <#if ameriprise> 
414                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
415                            <#else>  
416								<#if (useprcaValue == "1")> 
417                                <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm hide-desktop"> 
418                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
419                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
420                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
421                                    <button  
422                                        type="submit"  
423                                        data-button-name="cta-button-top"   
424                                        data-product-name="${productUrl!''}"                                        
425                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
426                                        disabled  
427
428                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
429                                    </button> 
430                                </form> 
431								<#else> 
432								<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop"> 
433                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
434                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
435                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
436                                    <button  
437                                        type="submit"  
438                                        data-button-name="cta-button-top"   
439                                        data-product-name="${productUrl!''}"                                        
440                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
441                                        disabled  
442
443                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
444                                    </button> 
445                                </form> 
446								</#if> 
447                            </#if> 
448                        </div> 
449 
450                        <div class="offer-header"> 
451                             <div class="offer-text-top"> 
452                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
453                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
454                            </div> 
455                            <div class="offer-text-bottom hide-mobile"> 
456                                <div class="offer-detail-text text-color-default"> 
457                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
458                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
459                                </div> 
460 
461                                <#if ameriprise> 
462                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
463                                <#else>  
464									<#if (useprcaValue == "1")> 
465                                    <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm"> 
466                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
467                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
468                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
469                                        <button  
470                                            type="submit"  
471                                            data-button-name="cta-button-top"   
472                                            data-product-name="${productUrl!''}"  
473                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
474                                            disabled 
475
476                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
477                                        </button> 
478                                    </form> 
479									<#else>  
480									<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm"> 
481                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
482                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
483                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
484                                        <button  
485                                            type="submit"  
486                                            data-button-name="cta-button-top"   
487                                            data-product-name="${productUrl!''}"  
488                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
489                                            disabled 
490
491                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
492                                        </button> 
493                                    </form> 
494									</#if> 
495                                </#if> 
496                            </div> 
497                        </div>                        
498                    </div> 
499                </div> 
500            </div> 
501        </div>   
502 
503    </#if> 
504</#if> 
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> url404  [in template "10154#10192#153411738" at line 81, column 28]

----
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: ${url404}  [in template "10154#10192#153411738" at line 81, column 26]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign url = themeDisplay.getURLCurrent() > 
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
5<#-- <#assign url404 = '/error/404.html'> --> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign environment = url?replace('/index.*','','r')> 
8<#assign prcaURL = propsUtil.get('elan.prca.url')> 
9<#assign useprcaValue = "" > 
10<#assign applicationType = "saa" > 
11<#assign text_to_apply_source = "vanity url" > 
12<#if qstringmap["sms"]?has_content> 
13    <#assign sms = 1 > 
14    <#assign text_to_apply_source = "sms" > 
15</#if> 
16<#if qstringmap["qrCode"]?has_content> 
17    <#assign text_to_apply_source = "qr code" > 
18</#if> 
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    
26    <#assign campaignId = qstringmap["ecid"]?first > 
27    <#assign campaignId  = htmlUtil.escape(campaignId)> 
28    <#assign campaignId  = htmlUtil.escapeJS(campaignId)> 
29<#else> 
30    <#assign ecidExt=""> 
31    <#assign campaignId = "" > 
32</#if> 
33<#--  check bankercode validity  --> 
34<#if oadURL?contains("uat-")> 
35    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
36<#else> 
37    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
38</#if> 
39<#if qstringmap["bankercode"]?has_content> 
40    <#assign bCode= qstringmap["bankercode"]?first> 
41    <#assign bCode= htmlUtil.escapeJS(bCode)> 
42    <#assign bCode= htmlUtil.escape(bCode)> 
43    <#assign isEmployee = false> 
44 
45    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
46    <#if fiData?first?has_content> 
47        <#assign fi = fiData?first> 
48        <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
49            <#assign subbu_special = fi.offerId> 
50        </#if> 
51        <#if fi.projectType == "emp"> 
52            <#assign isEmployee = true> 
53        </#if> 
54    <#else> 
55        <script> 
56            console.log("fiData missing"); 
57            location.href = '${url404}'; 
58        </script> 
59    </#if> 
60 
61    <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
62    <#if !bData?first?has_content> 
63        <script> 
64            console.log("bData missing"); 
65            location.href = '${url404}'; 
66        </script> 
67    </#if> 
68    <#list bData as b>      
69        <#assign lc = b.locationcode > 
70        <#assign bName = b.branch > 
71        <#assign bPhone = b.businessphone > 
72        <#assign boeid = b.oeid?trim> 
73        <#assign fName = b.firstname?trim> 
74        <#assign lName = b.lastname?trim> 
75        <#assign rLC = b.reallocationcode > 
76        <#assign mappedLC = b.mappedLocationCode > 
77    </#list>  
78<#else> 
79    <script> 
80        console.log("MainProductBcode missing"); 
81        location.href = '${url404}'; 
82    </script> 
83</#if> 
84 
85<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
86    <#assign ameriprise = true> 
87<#else> 
88    <#assign ameriprise = false> 
89</#if> 
90<#if mappedLC?has_content && !ameriprise> 
91    <#assign lc = mappedLC > 
92</#if> 
93 
94           
95<#if lc?has_content> 
96    <#assign firstNameLength = fName?length > 
97    <#assign lastNameLength = lName?length > 
98    <#if firstNameLength + lastNameLength &gt; 19 > 
99        <#if lastNameLength &gt; 18 > 
100            <#assign bLName = lName?substring(0,18)> 
101        <#else> 
102            <#assign bLName = lName> 
103        </#if> 
104        <#assign maxFirstName = 19 - bLName?length > 
105        <#if firstNameLength &gt; maxFirstName > 
106            <#assign bFName = fName?substring(0,maxFirstName)> 
107        <#else> 
108            <#assign bFName = fName> 
109        </#if> 
110    <#else> 
111        <#assign bFName = fName> 
112        <#assign bLName = lName> 
113    </#if>  
114 
115    <#assign prefix = "00000" > 
116    <#assign lcWithPrefix = prefix + lc > 
117    <#assign withPrefixLength = lcWithPrefix?length > 
118    <#assign startHere = withPrefixLength - 5> 
119    <#assign lc = lcWithPrefix?substring(startHere)>   
120    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
121    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
122    <#if (clientProfileList?first?has_content)> 
123        <#assign clientProfile = clientProfileList?first> 
124        <#assign partnerName = clientProfile.getMarketingNameLong()> 
125        <#assign pbu = clientProfile.getPbu()> 
126        <#assign subbu = clientProfile.getSUBBRANDBUNBR()>          
127        <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>  
128        <#if (subbu_special?has_content)> 
129            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
130        <#else> 
131            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
132        </#if> 
133		 
134		<#assign fultonBankpbu = "0727491"> 
135		<#if pbu == fultonBankpbu> 
136			<style> 
137				#hideFultonInfo { 
138					display: none; 
139
140			</style> 
141		</#if> 
142 
143        <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards--> 
144        <#assign temp = []> 
145        <#assign consumerCards = []> 
146        <#assign businessCards = []>  
147        <#assign offerTypeList = []>  
148        <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']> 
149        <#assign businessOfferTypes =['144', '128', '143', '121']>     
150        <#assign index = 0> 
151        <#list fiCardsData as fib> 
152            <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
153                <#assign offerTypeList = offerTypeList + [fib.offerType]> 
154                <#assign temp = temp + fiCardsData[index..index]>   
155                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
156                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
157                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
158                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
159                </#if>                 
160            </#if>  
161            <#assign index = index + 1>                
162        </#list>  
163 
164        <#assign fiCardsData = temp> 
165 
166        <#if (fiCardsData?size > 0)>   
167            <#if (subbu_special?has_content)> 
168                <#assign lc_used = fiCardsData?first.WebLocationCode>   
169            <#else> 
170                <#if ameriprise> 
171                    <#assign lc_used = mappedLC>  
172                <#else> 
173                    <#assign lc_used = lc>  
174                </#if> 
175            </#if>  
176        </#if>  
177 
178        <#assign offerId = ""> 
179        <#assign empOfferId = "">  
180        <#if consumerCards[0]?has_content> 
181            <#assign empOfferId = consumerCards[0].empofferId!""> 
182        </#if> 
183        <#assign marketingChannel = 'SAT2A'> 
184        <#if isEmployee> 
185				<#assign marketingChannel = 'EMPL'> 
186				<#assign offerId = empOfferId> 
187				<#assign consumerCardsEmployee = []> 
188				<#list consumerCards as card> 
189					<#if card.empofferId?has_content> 
190						<#assign consumerCardsEmployee = consumerCardsEmployee + [card]> 
191					</#if> 
192				</#list> 
193				<#assign consumerCards = consumerCardsEmployee /> 
194			</#if> 
195        
196        <#if (consumerCards?size > 0 || businessCards?size > 0)>  
197         
198            <div class="content-container content-container-main jn-consumer-content" id="product-display"> 
199                <#if ((consumerCards?size > 0) && (businessCards?size > 0) && (isEmployee == false))> 
200                    <nav class="jn-primary-nav two-tabs"> 
201                        <ul> 
202                            <li title="${partnerName!''} - Personal products"> 
203                                <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a> 
204                            </li> 
205                            <li title="${partnerName!''} - Business products"> 
206                                <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a> 
207                            </li> 
208                        </ul> 
209                    </nav> 
210                <#else> 
211                    <#if (consumerCards?size > 0)> 
212                        <nav class="jn-primary-nav" title="${partnerName!''} - Personal products"> 
213                            <ul> 
214                                <li> 
215                                    <p class="tab-nav" id="consumerTab"><span>Personal</span></p> 
216                                </li> 
217                            </ul> 
218                        </nav> 
219                    </#if> 
220                    <#if (businessCards?size > 0 && (isEmployee == false))> 
221                        <nav class="jn-primary-nav" title="${partnerName!''} - Business products"> 
222                            <ul> 
223                                <li> 
224                                    <p class="tab-nav" id="businessTab"><span>Business</span></p> 
225                                </li> 
226                            </ul> 
227                        </nav> 
228                    </#if> 
229                </#if> 
230                <#if (consumerCards?size > 0)> 
231                    <div class="tab-more-wrapper"> 
232                        <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products"> 
233                            <#list consumerCards as fib> 
234							    <#assign useprcaValue = fib.useprca!"">  
235                                <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" > 
236                                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">      
237                                <#assign hasBalanceTransferCalculator = false>    
238                                <#assign offerId = fib.saaofferId> 
239                                <#if isEmployee> 
240                                    <#assign offerId = fib.empofferId!""> 
241                                </#if> 
242 
243                                <#if ameriprise>                                
244                                    <#if (fib.offerType == "101")> 
245                                            <#assign productName = "premier-visa-signature"> 
246                                            <#assign product="Premier Visa Signature"> 
247                                            <#assign cardIndex = 0> 
248                                    <#elseif (fib.offerType == "103")> 
249                                            <#assign productName = "visa-signature"> 
250                                            <#assign product="Visa Signature"> 
251                                            <#assign cardIndex = 1> 
252                                    </#if> 
253                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
254                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
255                                <#else> 
256                                    <#switch fib.offerType> 
257                                        <#case "101"> 
258                                            <#assign productName = "consumer-edr2112"> 
259                                            <#assign product="Everyday Rewards+"> 
260                                            <#assign cardIndex = 0> 
261                                            <#break> 
262                                        <#case "108"> 
263                                            <#assign productName = "consumer-platinum2103"> 
264                                            <#assign product="Platinum"> 
265                                            <#assign cardIndex = 2> 
266                                            <#assign hasBalanceTransferCalculator = true>  
267                                            <#break> 
268                                        <#case "109"> 
269                                            <#assign productName = "consumer-platinum2103"> 
270                                            <#assign product="Platinum"> 
271                                            <#assign cardIndex = 2> 
272                                            <#assign hasBalanceTransferCalculator = true>  
273                                            <#break>                                            
274                                        <#case "115"> 
275                                            <#assign productName = "secured"> 
276                                            <#assign product="Secured"> 
277                                            <#assign cardIndex = 5> 
278                                            <#break> 
279                                        <#case "104"> 
280                                            <#assign productName = "max-cash"> 
281                                            <#assign product="Max Cash Preferred"> 
282                                            <#assign cardIndex = 1> 
283                                            <#break> 
284                                        <#case "147"> 
285                                            <#assign productName = "max-cash-secured"> 
286                                            <#assign product="Max Cash Secured"> 
287                                            <#assign cardIndex = 4> 
288                                            <#break> 
289                                        <#case "141"> 
290                                            <#assign productName = "college-real-rewards"> 
291                                            <#assign product="College Real Rewards"> 
292                                            <#assign cardIndex = 3> 
293                                            <#break> 
294                                        <#case "138"> 
295                                            <#assign productName = "travel-rewards-plus"> 
296                                            <#assign product="Travel Rewards+"> 
297                                            <#assign cardIndex = 10> 
298                                            <#break> 
299                                        <#case "154"> 
300                                            <#assign productName = "reserve-rewards-plus"> 
301                                            <#assign product="Reserve Rewards+"> 
302                                            <#assign cardIndex = 11> 
303                                            <#break> 
304                                        <#default> 
305                                    </#switch> 
306 
307                                    <#assign newTag = ""> 
308                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
309                                        <#assign newTag = "with-new-tag"> 
310                                    </#if> 
311                                     
312                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
313                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
314                                     
315 
316                                    <#assign APR=""> 
317                                    <#assign AMF=""> 
318                                    <#assign BAL=""> 
319                                     
320 
321                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)> 
322                                    <#if (scrapedData?size > 0)> 
323                                        <#list scrapedData as sItem> 
324                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
325                                                <#assign APR = sItem.scrapedValue> 
326                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
327                                                <#assign AMF = sItem.scrapedValue> 
328                                            <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
329                                                <#assign BAL = sItem.scrapedValue> 
330                                            </#if> 
331                                            <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
332                                                <#break> 
333                                            </#if> 
334                                        </#list> 
335                                    </#if> 
336                                </#if> 
337                                <#if ameriprise> 
338                                    <#assign rollover_text =  partnerName + " " + product + " " + " Card"> 
339                                <#else> 
340                                    <#assign rollover_text =  partnerName + " " + product + " " + " Credit Card"> 
341                                </#if>                             
342                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}"> 
343                                    <div class="tag-container"> 
344                                        <div class="tag-corner"> 
345                                            <div class="tag-label">NEW</div> 
346                                        </div> 
347                                    </div> 
348                                    <div class="consumer-card-heading hide-desktop"> 
349                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
350                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
351                                    </div> 
352                                    <div class="jn-consumer-card-image"> 
353                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
354 
355                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
356                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
357                                        </#if> 
358                                        <#if (hasBalanceTransferCalculator)> 
359                                            <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> 
360                                        </#if> 
361                                    </div> 
362 
363                                    <div class="jn-consumer-card-info"> 
364                                        <div class="consumer-card-heading hide-mobile"> 
365                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
366                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
367                                        </div> 
368                                        <div class="jn-additional"> 
369                                            <ul class="${fib.offerType}"> 
370                                                <#if !ameriprise>                                            
371                                                    <#if (fib.offerType == "104")> 
372                                                        <li class="${fib.offerType}"> 
373                                                            <p> 
374                                                                <strong>APR for Purchases: </strong> 
375                                                                ${APR!''} 
376                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
377                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
378                                                                </a> 
379                                                            </p>                                                             
380                                                        </li> 
381                                                        <li class="${fib.offerType}"> 
382                                                            <p> 
383                                                                <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong> 
384                                                                ${BAL!''}  
385                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
386                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
387                                                                </a> 
388                                                            </p> 
389                                                        </li> 
390                                                    <#else> 
391                                                        <li class="${fib.offerType}"> 
392                                                            <p> 
393                                                                <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")> 
394                                                                    <strong>APR for Purchases and Balance Transfers: </strong> 
395                                                                <#elseif (fib.offerType== "101")> 
396                                                                    <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
397                                                                <#else> 
398                                                                    <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
399                                                                </#if> 
400 
401                                                                ${APR!''}  
402                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
403                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
404                                                                </a> 
405                                                            </p> 
406                                                        </li> 
407                                                    </#if> 
408                                                </#if> 
409                                                <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content> 
410                                                    <#if  consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content> 
411                                                        <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo> 
412                                                            <li>${marketingInfo.getData()}</li> 
413                                                        </#list> 
414                                                    </#if> 
415                                                <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content> 
416                                                    <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
417                                                        <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
418                                                            <li>${marketingInfo.getData()}</li> 
419                                                        </#list> 
420                                                    </#if> 
421                                                </#if> 
422                                                <#if !ameriprise> 
423                                                    <li> 
424                                                        <p> 
425                                                            Annual Fee: ${AMF!''}  
426                                                            <a  href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}"  target="_blank"> 
427                                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
428                                                            </a> 
429                                                        </p> 
430                                                    </li> 
431                                                </#if> 
432                                            </ul> 
433                                        </div> 
434                                        <ul class="actions"> 
435                                            <li> 
436											<#if (useprcaValue == "1")> 
437                                                <form action="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm" id="BAAForm"> 
438                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
439                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
440                                                    <a  
441                                                        class="applyNowLink apply-now-button"  
442                                                        href="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}" 
443                                                        data-button-name="apply-now-link"  
444                                                        data-product-name="${productName}"                 
445
446                                                            ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
447                                                    </a> 
448                                                </form> 
449												<#else> 
450													<form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}" method="post" class="BAAForm" id="BAAForm"> 
451                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
452                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
453                                                    <a  
454                                                        class="applyNowLink apply-now-button"  
455                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}" 
456                                                        data-button-name="apply-now-link"  
457                                                        data-product-name="${productName}"                 
458
459                                                            ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
460                                                    </a> 
461                                                </form> 
462												</#if> 
463                                            </li> 
464                                            <li> 
465                                            <#if ameriprise> 
466                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}"> 
467                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span> 
468                                                </a> 
469                                            <#else> 
470                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
471                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
472                                                </a> 
473                                            </#if> 
474                                            </li> 
475                                        </ul> 
476                                    </div>                             
477                                </div> 
478                            </#list> 
479                        </div> 
480                    </div>                 
481                </#if> 
482                <#if ((businessCards?size > 0) && (isEmployee == false))>  
483                    <div class="tab-more-wrapper">    
484                        <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products"> 
485                             
486                            <#list businessCards as fib> 
487							       <#assign useprcaValue = fib.useprca!"">  
488                                    <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png"> 
489                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg"> 
490                                    <#switch fib.offerType>                                   
491                                        <#case "144"> 
492                                            <#assign productName = "smart-business-rewards"> 
493                                            <#assign product="Smart Business Rewards"> 
494                                            <#assign cardIndex = 8> 
495                                            <#break> 
496                                        <#case "128"> 
497                                            <#assign productName = "business-cash-preferred"> 
498                                            <#assign product="Business Cash Preferred"> 
499                                            <#assign cardIndex = 6>   
500                                            <#break> 
501                                        <#case "143"> 
502                                            <#assign productName = "business-real-rewards"> 
503                                            <#assign product="Business Real Rewards"> 
504                                            <#assign cardIndex = 9> 
505                                            <#break> 
506                                        <#case "121"> 
507                                            <#assign productName = "business-platinum2103"> 
508                                            <#assign product="Business Card"> 
509                                            <#assign cardIndex = 7> 
510                                            <#break> 
511                                        <#default> 
512                                    </#switch> 
513                                    <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
514                                    <#assign offerId = fib.saaofferId> 
515 
516                                    <#assign newTag = ""> 
517                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
518                                        <#assign newTag = "with-new-tag"> 
519                                    </#if> 
520                                    <#assign APR=""> 
521                                    <#assign AMF=""> 
522                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)> 
523                                    <#if (scrapedData?size > 0)> 
524                                        <#list scrapedData as sItem> 
525                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
526                                                <#assign APR = sItem.scrapedValue> 
527                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
528                                                <#assign AMF = sItem.scrapedValue> 
529                                            </#if> 
530                                            <#if (APR?has_content && AMF?has_content)> 
531                                                <#break> 
532                                            </#if> 
533                                        </#list> 
534                                    </#if> 
535                                     
536                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card"> 
537                                    <div class="tag-container"> 
538                                        <div class="tag-corner"> 
539                                            <div class="tag-label">NEW</div> 
540                                        </div> 
541                                    </div> 
542                                    <div class="consumer-card-heading hide-desktop"> 
543                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
544                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
545                                    </div> 
546                                    <div class="jn-consumer-card-image"> 
547                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
548                                 
549                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
550                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
551                                        </#if> 
552                                    </div> 
553 
554                                    <div class="jn-consumer-card-info"> 
555                                        <div class="consumer-card-heading hide-mobile"> 
556                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
557                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
558                                        </div> 
559                                        <div class="jn-additional"> 
560                                            <ul> 
561                                                <li class="${fib.offerType}"> 
562                                                    <p> 
563                                                        <#if (fib.offerType == "144")> 
564                                                            <strong>APR for Purchases and Balance Transfers: </strong> 
565                                                        <#else> 
566                                                            <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
567                                                        </#if> 
568 
569                                                        ${APR!''} 
570                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
571                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
572                                                        </a> 
573                                                    </p> 
574                                                </li> 
575                                                <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content> 
576                                                    <#if  consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content> 
577                                                        <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo> 
578                                                            <li>${marketingInfo.getData()}</li> 
579                                                        </#list> 
580                                                    </#if> 
581                                                <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content> 
582                                                    <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
583                                                        <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
584                                                            <li>${marketingInfo.getData()}</li> 
585                                                        </#list> 
586                                                    </#if> 
587                                                </#if> 
588                                                <li> 
589                                                    <p> 
590                                                        Annual Fee: ${AMF!''} <a 
591                                                        href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
592                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
593                                                        </a> 
594                                                    </p> 
595                                                </li> 
596                                            </ul> 
597                                        </div> 
598                                        <ul class="actions">                                     
599                                            <li> 
600											<#if (useprcaValue == "1")> 
601                                                <form action="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm"> 
602                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
603                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>                                         
604                                                    <a  
605                                                        class="applyNowLink apply-now-button"  
606                                                        href="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}"  
607                                                        data-button-name="apply-now-link"  
608                                                        data-product-name="${productName}" 
609
610                                                        ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()} 
611                                                        <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
612                                                    </a> 
613                                                </form> 
614												<#else> 
615													<form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}" method="post" class="BAAForm"> 
616                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
617                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>                                         
618                                                    <a  
619                                                        class="applyNowLink apply-now-button"  
620                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}"  
621                                                        data-button-name="apply-now-link"  
622                                                        data-product-name="${productName}" 
623
624                                                        ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()} 
625                                                        <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
626                                                    </a> 
627                                                </form> 
628												</#if> 
629												 
630												 
631                                            </li> 
632                                            <li> 
633                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
634                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
635                                                </a> 
636                                            </li> 
637                                        </ul> 
638                                    </div> 
639                                </div> 
640                                 
641                            </#list> 
642                             
643                        </div> 
644                    </div> 
645                </#if>  
646            </div> 
647            <script> 
648                var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]'; 
649                var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]'; 
650                 $(document).ready(function () { 
651                    var banker_code = "${bCode!''}"; 
652                    var tabs=$('.tab-nav'); 
653                    var slideDiv = $('.jn-tab-content.active');                    
654                    var screenWidthMobile = 768; 
655                    var screenWidth = window.innerWidth; 
656 
657                    if (tabs.length == 1) { 
658                        if ($(consumerSelector).length > 0) { 
659                            if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) { 
660                                $("nav.jn-primary-nav").hide(); 
661                                changeCardLayout(consumerSelector); 
662                                createMetaTag("consumer"); 
663                            } else { 
664                                hideHeroAndDisclaimer('business'); 
665                                showHeroAndDisclaimer('consumer'); 
666                                changeCardLayout(consumerSelector); 
667                                renumberFootnote("consumer"); 
668                                createMetaTag("consumer");  
669
670                        }  
671                        if ($(businessSelector).length > 0) { 
672                            $(businessSelector).addClass('active'); 
673                            hideHeroAndDisclaimer('consumer'); 
674                            showHeroAndDisclaimer('business'); 
675                            changeCardLayout(businessSelector); 
676                            renumberFootnote("business"); 
677                            createMetaTag("business");  
678
679
680                    if (tabs.length == 2) { 
681                        renumberFootnote("consumer"); 
682                        renumberFootnote("business"); 
683                        createMetaTag("consumer"); 
684                        if ($(consumerSelector + ' .jn-consumer-item').length < 3) { 
685                            changeCardLayout(consumerSelector); 
686
687                        if ($(businessSelector + ' .jn-consumer-item').length < 3) { 
688                            changeCardLayout(businessSelector); 
689
690                             
691                        var tabsNav = document.querySelectorAll('.tab-nav'); 
692                        togglePrimaryNav(tabsNav); 
693 
694                        if(window.location.href.indexOf('#business') > -1 ) { 
695                            $(consumerSelector).removeClass('active'); 
696                            $(businessSelector).addClass('active'); 
697                            $('#consumerTab').removeClass('active'); 
698                            $('#businessTab').addClass('active'); 
699                            hideHeroAndDisclaimer('consumer'); 
700                            showHeroAndDisclaimer('business'); 
701                            changeCardLayout(businessSelector); 
702                            renumberFootnote("business"); 
703                            createMetaTag("business"); 
704 
705                            $(tabs).click(function(){ 
706                                if ($(this).attr('id') === "consumerTab") { 
707                                    var newUrl = window.location.toString(); 
708                                    window.location = newUrl.replace(/#business/, '#consumer'); 
709
710                                if ($(this).attr('id') === "businessTab") { 
711                                    var url = window.location.toString(); 
712                                    window.location = url.replace(/#consumer/, '#business'); 
713
714                            }); 
715
716
717                     
718                }); 
719                // Primary Nav function 
720                 
721                function togglePrimaryNav(elem) { 
722                    for (var i = 0; i < elem.length; i++) { 
723                        elem[i].addEventListener("click", function(e) { 
724 
725                            var current = this, 
726                                allSections = document.querySelectorAll('[data-id]'), 
727                                section = document.querySelector("[data-id='"+ current.id +"']"); 
728 
729                            for (var a = 0; a < allSections.length; a++) { 
730                                allSections[a].classList.remove('active'); 
731
732                            for (var c = 0; c < elem.length; c++) { 
733                                if (current != elem[c]) { 
734                                    elem[c].classList.remove('active'); 
735                                } else { 
736                                    current.classList.add('active'); 
737                                    section.classList.add('active'); 
738                                    hideHeroAndDisclaimer('consumer'); 
739                                    hideHeroAndDisclaimer('business'); 
740                                    if(current.getAttribute('id') === "consumerTab"){ 
741                                        showHeroAndDisclaimer('consumer'); 
742                                    } else if(current.getAttribute('id') === "businessTab"){ 
743                                        showHeroAndDisclaimer('business'); 
744
745
746
747                            e.preventDefault(); 
748                        }); 
749
750
751 
752                function renumberFootnote(type) { 
753                    var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]'; 
754                    var disclaimerSelector = '.tier1-disclaimer-landing-' + type; 
755                    var heroSelector = '.tier1-hero-landing-' + type; 
756                    var numOfFootnote = $(disclaimerSelector + ' sup').length; 
757                    var showList = []; 
758                    var hideList=[]; 
759                    for (var i = 1; i <= numOfFootnote; i++) { 
760                    var cssClass="tag-" + i; 
761                    if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) { 
762                        showList.push(i);      
763                    } else { 
764                        hideList.push(i); 
765
766                    }  
767                    /* 
768                    for (var i = 1; i < showList.length + 1; i++) { 
769                        if(showList[i-1] != i) { 
770                            var className="tag-" + showList[i-1]; 
771                            $(heroSelector).find("." +  className).html(i); 
772                            // $(discriptionSelector).find("." +  className).html(i); 
773                            $(disclaimerSelector).find("." +  className).html(i); 
774
775
776                    */ 
777                    for (var i = 0; i <hideList.length; i++) { 
778                        var cname="tag-" + hideList[i]; 
779                        $(disclaimerSelector).find("." + cname).parent().hide(); 
780                    }    
781
782 
783                function changeCardLayout(cssSelector) { 
784                    var numOfCards = $(cssSelector + ' .jn-consumer-item').length; 
785                    if(numOfCards == 1) { 
786                        $(cssSelector).addClass('one-card'); 
787                    } else if (numOfCards == 2) { 
788                        $(cssSelector).addClass('two-card'); 
789                    }   
790
791                function hideHeroAndDisclaimer(type) { 
792                    try { 
793                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show'); 
794                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide'); 
795                    } catch (e) { 
796                        console.log(e); 
797
798 
799                    try { 
800                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show'); 
801                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');  
802                    } catch (e) { 
803                        console.log(e); 
804
805 
806
807                function showHeroAndDisclaimer(type) { 
808                    try { 
809                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('show'); 
810                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide'); 
811                    } catch (e) { 
812                        console.log(e); 
813
814                     
815                    try { 
816                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show'); 
817                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');  
818                    } catch (e) { 
819                        console.log(e); 
820
821 
822
823                function createMetaTag(type) { 
824                    var partnerName = "${partnerName!0}"; 
825                    var product_name = $('.jn-hero-container .jn-button').data('product-name'); 
826                    var metaDesc = ""; 
827                    if (type == "consumer") {     
828                        if(location.pathname.indexOf("11t1m") != -1) { 
829                            metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $375 cash value when deposited into an eligible account after spending $3,000 in eligible net purchases within the first 90 days of account opening." 
830                        } else {                                    
831                            if(product_name ==  "consumer-platinum2103") { 
832                                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."; 
833                            } else if(product_name ==  "real-rewards") { 
834                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase."; 
835                            } else if(product_name ==  "secured") { 
836                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
837                            } else if(product_name ==  "max-cash") { 
838                                if('${isEmployee?string("yes", "no")}' == "yes") { 
839                                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $200 Bonus and 5% cash back on the two categories you select."; 
840                                } else { 
841                                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select."; 
842
843
844
845 
846                    } else if (type == "business") { 
847                        if(product_name ==  "business-cashback") {               
848                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
849                        } else if(product_name ==  "business-real-rewards") { 
850                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on."; 
851                        } else if(product_name ==  "business-visa") { 
852                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
853                        } else if(product_name ==  "smart-business-rewards") { 
854                            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."; 
855
856
857                    var m = document.createElement('meta');  
858                    m.name = 'description';  
859                    m.content = metaDesc;  
860                    document.head.appendChild(m); 
861
862                function goToByScroll(id) { 
863                    var element = document.getElementById(id); 
864                    element.scrollIntoView(true); 
865
866                 
867            </script> 
868            <script> 
869                var reportingData = window.reportingData || {}; 
870                document.addEventListener('DOMContentLoaded', function() {                    
871                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
872                    var hostName = location.hostname;                                     
873                    function getDomainFromHostname(hostname) { 
874                        var parts = hostname.split('.'); 
875                        return parts.length === 3 ? parts[1] : parts[0]; 
876
877                    var domain = getDomainFromHostname(hostName); 
878                    var partnerName = "${partnerName!0}"; 
879                    var ameriprise = '${ameriprise?string("yes", "no")}'; 
880                    var locationCode = "${rLC!lc}"; 
881                    var eidAmp = ""; 
882                    var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img'); 
883                    for (var index = 0; index < heroCardImgs.length; index++) { 
884                        var heroCardImg = heroCardImgs[index]; 
885                        var heroCardSrc = heroCardImg.getAttribute("src"); 
886                        if(heroCardSrc != "") { 
887                            resizeImg(heroCardImg); 
888
889
890                    if (ameriprise == "yes") { 
891                        var bankercode_amp = '${bCode}'; 
892                        eidAmp = bankercode_amp.substring(3); 
893                        locationCode =""; 
894                        document.title = "Ameriprise Financial Credit Card Overview Page"; 
895                    } else { 
896                        document.title = partnerName + " Credit Card Index Page"; 
897
898                     
899                    var lc = '${lc!0}'; 
900 
901                    var regex = /\d+/g; 
902                    var bdNumber = "${bPhone!''}"; 
903                    var phoneNum = bdNumber.match(regex); 
904                    var areaCode = ""; 
905                    var exchangeCode = ""; 
906                    var num = ""; 
907                    if(phoneNum != null) { 
908                        phoneNum = phoneNum.join(""); 
909                        areaCode = phoneNum.substring(0,3); 
910                        exchangeCode = phoneNum.substring(3,6); 
911                        num = phoneNum.substring(6,10); 
912
913                     
914                        /* update SiteCatalyst data object */ 
915                    reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
916                    reportingData.page_type = 'product';  
917                    reportingData.site_section = 'credit cards'; 
918                    reportingData.platform = 'microsite'; 
919                    reportingData.campaign_id = '${campaignId}'; 
920                    reportingData.location_code = '${rLC!0}'; 
921                    reportingData.partner_name = "${partnerName}"; 
922                    reportingData.product = 'All Cards'; 
923                    reportingData.text_to_apply_source = '${text_to_apply_source}'; 
924                    reportingData.visitor_type = 'prospect';         
925                    reportingData.Banker_id = '${boeid}'; 
926                    reportingData.Banker_code = '${bCode}'; 
927 
928                                                     
929                    /* SiteCatalyst  pageView tracking */ 
930                    AUI().ready(function() { 
931                        if (window.publisherFW) {                            
932                            window.publisherFW.publishEvent("pageView", reportingData); 
933
934                    });  
935                                   
936                    $('.jn-button').removeAttr('disabled'); 
937                    $('.jn-button').removeClass('jn-disabled'); 
938 
939                    jQuery('.applyNowLink').on('click', function(e) { 
940                        $(this).closest('.BAAForm').submit(); 
941                        const bankerId = '${boeid}'; 
942                        const employeeId = ""; 
943                        let visitorId = bankerId; 
944                         
945                        if('${isEmployee?string("yes", "no")}' == "yes") { 
946                            visitorId = employeeId; 
947
948                        const htmlElementName = e.target.nodeName; 
949                        const isButton = (htmlElementName ==='BUTTON'); 
950                        // gets href of clicked anchor tag 
951                        let href = e.target.href; 
952 
953                        // get action url of form submit button  
954                        if(isButton) { 
955                            href = document.getElementById('BAAForm').action; 
956
957 
958                        const urlParams = new URLSearchParams(href);                    
959                        let offerId = ""; 
960 
961                        if(urlParams.has('offerid')) { 
962                            offerId = urlParams.get('offerid'); 
963
964 
965                        if(urlParams.has('offerId')) { 
966                            offerId = urlParams.get('offerId'); 
967
968                         
969                        window.dataLayer.push({ 
970                            'event' : 'apply_payload', 
971                            'location_code': locationCode, 
972                            'banker_code': '${bCode}', 
973                            'offer_id': offerId, 
974                            'visitor_id': visitorId, 
975                        }); 
976                        return false; 
977                    }); 
978                    jQuery(".BAAForm").on("submit", function(e){ 
979                        e.preventDefault();                         
980                        var xmlData; 
981                        if('${isEmployee?string("yes", "no")}' == "yes") { 
982
983                        if(ameriprise == "yes") { 
984                            xmlData = '<?xml version="1.0"?>'+ 
985                                "<prefillData>"+  
986                                    "<versionNumber>1.0</versionNumber>"+  
987                                    "<applicationData>"+  
988                                        "<referral>" +  
989                                            "<employeeId>" + eidAmp + "</employeeId>" + 
990                                            "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+ 
991                                            "<divisionNumber></divisionNumber>"+ 
992                                        "</referral>" +  
993                                        "<bankerInformation>"+  
994                                            "<locationCode>" + locationCode + "</locationCode>"+ 
995                                            "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
996                                            "<employeeID>${boeid!0}</employeeID>"+ 
997                                            "<name>" + 
998                                            "<first>${bFName!'0'}</first>" + 
999                                            "<last>${bLName!'0'}</last>" + 
1000                                            "</name>"+ 
1001                                            "<phone>"+ 
1002                                            "<areaCode>"+areaCode+"</areaCode>"+  
1003                                            "<exchange>"+exchangeCode+"</exchange>"+ 
1004                                            "<number>"+num+"</number>"+  
1005                                            "</phone>"+  
1006                                        "</bankerInformation>"+  
1007                                    "</applicationData>"+  
1008                                "</prefillData>" 
1009                        } else if ('${isEmployee?string("yes", "no")}' == "yes") {  
1010                            xmlData = '<?xml version="1.0"?>'+ 
1011                                "<prefillData>"+  
1012                                    "<versionNumber>1.0</versionNumber>"+  
1013                                    "<applicationData>"+                                         
1014                                        "<bankerInformation>"+  
1015                                            "<employeeFullName>Employee Product</employeeFullName>"+ 
1016                                            "<employeeId>EMPPROD</employeeId>"+ 
1017                                            "<employeePhoneNumber></employeePhoneNumber>"+ 
1018                                            "<locationCode>" + locationCode + "</locationCode>"+ 
1019                                            "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
1020                                            "<originatingBranchId></originatingBranchId>"+ 
1021                                            "<name>" + 
1022                                                "<first>${bFName!'0'}</first>" + 
1023                                                "<last>${bLName!'0'}</last>" + 
1024                                            "</name>"+ 
1025                                            "<phone>"+ 
1026                                                "<areaCode>" + areaCode + "</areaCode>"+  
1027                                                "<exchange>" + exchangeCode + "</exchange>"+ 
1028                                                "<number>" + num + "</number>"+  
1029                                            "</phone>"+  
1030                                        "</bankerInformation>"+  
1031                                        "<referral>" +  
1032                                            "<divisionNumber></divisionNumber>" +       
1033                                            "<partnerLocationID>" + locationCode + "</partnerLocationID>" +                          
1034                                            "<referralId>EMPPROD</referralId>" + 
1035                                        "</referral>" +  
1036                                    "</applicationData>"+  
1037                                "</prefillData>";                             
1038                        } else { 
1039                            xmlData = '<?xml version="1.0"?>'+ 
1040                                "<prefillData>"+  
1041                                    "<versionNumber>1.0</versionNumber>"+  
1042                                    "<applicationData>"+  
1043                                        "<bankerInformation>"+  
1044                                            "<locationCode>" + locationCode + "</locationCode>"+ 
1045                                            "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
1046                                            "<employeeID>${boeid!0}</employeeID>"+ 
1047                                            "<name>" + 
1048                                                "<first>${bFName!'0'}</first>" + 
1049                                                "<last>${bLName!'0'}</last>" + 
1050                                            "</name>"+ 
1051                                            "<phone>"+ 
1052                                                "<areaCode>"+areaCode+"</areaCode>"+  
1053                                                "<exchange>"+exchangeCode+"</exchange>"+ 
1054                                                "<number>"+num+"</number>"+  
1055                                            "</phone>"+  
1056                                        "</bankerInformation>"+  
1057                                    "</applicationData>"+  
1058                                "</prefillData>" 
1059
1060                        console.log("useprcaValue---->"+${useprcaValue}) 
1061						if('${useprcaValue}' =='1'){ 
1062                          if('${isEmployee?string("yes", "no")}' == "yes"){   						 
1063							var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}"; 
1064							var firstName = "${fName!'0'}".trim(); 
1065							var lastName = "${lName!'0'}".trim(); 
1066							var fullName = employeeFullName.trim();  
1067								 
1068							if (fullName.length <= 19) { 
1069								employeeFullName = fullName;  
1070							} else if (firstName.charAt(0) + ' ' + lastName.length <= 19) { 
1071								employeeFullName = firstName.charAt(0) + ' ' + lastName;  
1072							} else { 
1073								employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17); 
1074							}							 
1075							 var applicationJsonData = { 
1076												  "prefillData": { 
1077													"versionNumber": "1.0", 
1078													"applicationData": { 
1079													  "bankerInformation": { 
1080														"locationCode": locationCode, 
1081														"originatingBranchId": "${bName!'0'}", 
1082														"employeeId": "EMPPROD", 
1083														"employeeFullName": "Employee Product", 
1084														"employeePhoneNumber": phoneNum 
1085
1086
1087
1088												}; 
1089                            }else{ 
1090							var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}"; 
1091							var firstName = "${fName!'0'}".trim(); 
1092							var lastName = "${lName!'0'}".trim(); 
1093							var fullName = employeeFullName.trim();  
1094								 
1095							if (fullName.length <= 19) { 
1096								employeeFullName = fullName;  
1097							} else if (firstName.charAt(0) + ' ' + lastName.length <= 19) { 
1098								employeeFullName = firstName.charAt(0) + ' ' + lastName;  
1099							} else { 
1100								employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17); 
1101							}							 
1102							 var applicationJsonData = { 
1103												  "prefillData": { 
1104													"versionNumber": "1.0", 
1105													"applicationData": { 
1106													  "bankerInformation": { 
1107														"locationCode": locationCode, 
1108														"originatingBranchId": "${bName!'0'}", 
1109														"employeeId": "${boeid!0}", 
1110														"employeeFullName": employeeFullName, 
1111														"employeePhoneNumber": phoneNum 
1112
1113
1114
1115												}; 
1116
1117							var jsonData = JSON.stringify(applicationJsonData); 
1118							$(this).children(".appDataBAA").val(jsonData); 
1119						}else{ 
1120						  $(this).children(".appDataBAA").val(xmlData); 
1121
1122                         
1123                        var buttonName = $(this).find(".apply-now-button").data("button-name"); 
1124                        var productName = $(this).find(".apply-now-button").data("product-name"); 
1125                        /* SiteCatalyst  onClick tracking */ 
1126                        reportingData.apply_button = buttonName; 
1127                        reportingData.product = productName; 
1128 
1129                        if (window.publisherFW) {                            
1130                            window.publisherFW.publishEvent("onClick", reportingData); 
1131
1132                        var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}'; 
1133                            /* CRC service call */ 
1134                            Liferay.Service( 
1135                                '/crc-utilities-portlet#crcremote/make-call', 
1136
1137                                    storedProcedure: 'crcDDCTextApplyLog', 
1138                                    parameters: paramString 
1139                                }, 
1140                                function(obj){                                   
1141
1142                            ); 
1143 
1144                        this.submit();                   
1145                    });                                                                                   
1146                }); 
1147                function resizeImg(img) { 
1148                    img.addEventListener("load", function() { 
1149                        var cardImgWidth = img.width; 
1150                        var cardImgHeight = img.height; 
1151                        if(cardImgWidth > cardImgHeight) { 
1152                            img.style.width = "285px"; 
1153                        } else { 
1154                            img.style.width = "150px"; 
1155
1156                    }); 
1157
1158            </script>                    
1159                 
1160        </#if>  
1161    </#if> 
1162</#if> 
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411744" at line 5, column 17]

----
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 bCode = qstringmap["bankercod...  [in template "10154#10192#153411744" at line 5, column 1]
----
1<#assign url = themeDisplay.getURLCurrent() > 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
4 
5<#assign bCode= qstringmap["bankercode"]?first> 
6<#assign bCode = htmlUtil.escape(bCode)> 
7<#assign bCode = htmlUtil.escapeJS(bCode)> 
8 
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
10<#list bData as b>      
11    <#assign lc = b.locationcode > 
12    <#assign rLC = b.reallocationcode > 
13    <#assign mappedLC = b.mappedLocationCode > 
14</#list>  
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
16    <#assign ameriprise = true> 
17<#else> 
18    <#assign ameriprise = false> 
19</#if> 
20<#if mappedLC?has_content && !ameriprise> 
21    <#assign lc = mappedLC > 
22</#if> 
23 
24 
25<#if lc?has_content> 
26    <#assign prefix = "00000" > 
27    <#assign lcWithPrefix = prefix + lc > 
28    <#assign withPrefixLength = lcWithPrefix?length > 
29    <#assign startHere = withPrefixLength - 5> 
30    <#assign lc = lcWithPrefix?substring(startHere)> 
31    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
32    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
33 
34    <#assign clientProfile = clientProfileList?first>  
35    <#assign partnerName=clientProfile.getMarketingNameLong()> 
36 
37    <#assign pbu = clientProfile.getPbu()> 
38    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
39    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
40    <#assign isEmployee = false> 
41 
42    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
43    <#if fiData?first?has_content> 
44        <#assign fi = fiData?first> 
45        <#if fi.projectType == "emp"> 
46            <#assign isEmployee = true> 
47        </#if> 
48    </#if> 
49	 
50	<#assign fultonBankpbu = "0727491"> 
51	<#if pbu == fultonBankpbu> 
52		<style> 
53			#hideFultonInfo { 
54				display: none; 
55
56		</style> 
57	</#if> 
58 
59 
60    <#if (fiCardsData?size > 0) > 
61        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
62     
63        <#if (cardProvider?size > 0)> 
64            <#-- This will be V for visa or M for mastercard. --> 
65            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
66        <#else> 
67            <script> 
68                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
69            </script> 
70        </#if> 
71 
72        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
73            <div class="disclaimer" > 
74			<#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerAssociatedBank.getData()?has_content> 
75				<#if isEmployee && employeeDisclaimerAssociatedBank?has_content> 
76					${employeeDisclaimerAssociatedBank.getData()} 
77				<#else> 
78					${disclaimerAssociatedBank.getData()} 
79				</#if> 
80			<#else> 
81                <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
82                    ${employeeDisclaimersVisa.getData()} 
83                <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
84                    ${employeeDisclaimersMasterCard.getData()}> 
85                <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
86                    ${disclaimersVisa.getData()} 
87                <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
88                    ${disclaimersMasterCard.getData()} 
89                </#if> 
90			</#if> 
91            </div> 
92        </div> 
93    </#if> 
94<#else> 
95    <script> 
96        console.log("No lc for disclaimer"); 
97    </script> 
98</#if> 
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411744" at line 5, column 17]

----
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 bCode = qstringmap["bankercod...  [in template "10154#10192#153411744" at line 5, column 1]
----
1<#assign url = themeDisplay.getURLCurrent() > 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
4 
5<#assign bCode= qstringmap["bankercode"]?first> 
6<#assign bCode = htmlUtil.escape(bCode)> 
7<#assign bCode = htmlUtil.escapeJS(bCode)> 
8 
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
10<#list bData as b>      
11    <#assign lc = b.locationcode > 
12    <#assign rLC = b.reallocationcode > 
13    <#assign mappedLC = b.mappedLocationCode > 
14</#list>  
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
16    <#assign ameriprise = true> 
17<#else> 
18    <#assign ameriprise = false> 
19</#if> 
20<#if mappedLC?has_content && !ameriprise> 
21    <#assign lc = mappedLC > 
22</#if> 
23 
24 
25<#if lc?has_content> 
26    <#assign prefix = "00000" > 
27    <#assign lcWithPrefix = prefix + lc > 
28    <#assign withPrefixLength = lcWithPrefix?length > 
29    <#assign startHere = withPrefixLength - 5> 
30    <#assign lc = lcWithPrefix?substring(startHere)> 
31    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
32    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
33 
34    <#assign clientProfile = clientProfileList?first>  
35    <#assign partnerName=clientProfile.getMarketingNameLong()> 
36 
37    <#assign pbu = clientProfile.getPbu()> 
38    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
39    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
40    <#assign isEmployee = false> 
41 
42    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
43    <#if fiData?first?has_content> 
44        <#assign fi = fiData?first> 
45        <#if fi.projectType == "emp"> 
46            <#assign isEmployee = true> 
47        </#if> 
48    </#if> 
49	 
50	<#assign fultonBankpbu = "0727491"> 
51	<#if pbu == fultonBankpbu> 
52		<style> 
53			#hideFultonInfo { 
54				display: none; 
55
56		</style> 
57	</#if> 
58 
59 
60    <#if (fiCardsData?size > 0) > 
61        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
62     
63        <#if (cardProvider?size > 0)> 
64            <#-- This will be V for visa or M for mastercard. --> 
65            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
66        <#else> 
67            <script> 
68                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
69            </script> 
70        </#if> 
71 
72        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
73            <div class="disclaimer" > 
74			<#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerAssociatedBank.getData()?has_content> 
75				<#if isEmployee && employeeDisclaimerAssociatedBank?has_content> 
76					${employeeDisclaimerAssociatedBank.getData()} 
77				<#else> 
78					${disclaimerAssociatedBank.getData()} 
79				</#if> 
80			<#else> 
81                <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
82                    ${employeeDisclaimersVisa.getData()} 
83                <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
84                    ${employeeDisclaimersMasterCard.getData()}> 
85                <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
86                    ${disclaimersVisa.getData()} 
87                <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
88                    ${disclaimersMasterCard.getData()} 
89                </#if> 
90			</#if> 
91            </div> 
92        </div> 
93    </#if> 
94<#else> 
95    <script> 
96        console.log("No lc for disclaimer"); 
97    </script> 
98</#if> 
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411747" at line 8, column 17]

----
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 bCode = qstringmap["bankercod...  [in template "10154#10192#153411747" at line 8, column 1]
----
1<#assign aDateTime = .now> 
2<#assign currentYear = aDateTime?string.yyyy> 
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
5<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
6<#assign url404 = '/error/404.html'> 
7 
8<#assign bCode= qstringmap["bankercode"]?first> 
9<#assign bCode = htmlUtil.escape(bCode)> 
10<#assign bCode = htmlUtil.escapeJS(bCode)> 
11 
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)> 
13<#list bData as b>      
14    <#assign lc = b.locationcode > 
15    <#assign rLC = b.reallocationcode > 
16    <#assign mappedLC = b.mappedLocationCode > 
17</#list>  
18 
19<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
20    <#assign ameriprise = true> 
21<#else> 
22    <#assign ameriprise = false> 
23</#if> 
24<#if mappedLC?has_content && !ameriprise> 
25    <#assign lc = mappedLC > 
26</#if> 
27 
28<#if lc?has_content> 
29 
30    <#assign prefix = "00000" > 
31    <#assign lcWithPrefix = prefix + lc > 
32    <#assign withPrefixLength = lcWithPrefix?length > 
33    <#assign startHere = withPrefixLength - 5> 
34    <#assign lc = lcWithPrefix?substring(startHere)> 
35<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
36    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
37 
38    <#assign clientProfile = clientProfileList?first> 
39    <#assign pbu = clientProfile.getPbu()> 
40    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>   
41    <#assign partnerName=clientProfile.getMarketingNameLong()> 
42    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
43    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
44    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
45    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
46        <#-- add protocal if missing  --> 
47        <#assign partnerUrl = 'https://' + partnerUrl> 
48    </#if> 
49    <footer class="footer bg-color-black text-color-white"> 
50        ${footerContent.getData()} 
51    </footer> 
52 
53    <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
54        <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
55        <style> 
56            #opt-out-button, 
57            .modal__btn.learn-more { 
58                background: #0C2074; 
59                border: 1px solid #0C2074; 
60                color: white; 
61                text-transform: uppercase; 
62                text-decoration: none; 
63                font-size: 16px; 
64                padding: 0.5rem 2rem; 
65                display: inline-block; 
66                border-radius: 0; 
67
68            #opt-out-button:hover, 
69            .modal__btn.learn-more:hover { 
70                color: white; 
71                border-color: #2C76AF !important; 
72                background-color: #2C76AF !important; 
73
74            .modal__btn.learn-more { 
75                background: white; 
76                border: 1px solid #0C2074; 
77                color: #0C2074; 
78
79            #opt-out-button[disabled="true"] { 
80                background-color: rgba(0,0,0,.15); 
81                color: rgba(0,0,0,.45); 
82                border-color: rgba(0,0,0,.25); 
83
84            #opt-out-button:hover[disabled="true"] { 
85                background-color: rgba(0,0,0,.15) !important; 
86                color: rgba(0,0,0,.45) !important; 
87                border-color: rgba(0,0,0,.25) !important; 
88
89            #opt-out-button:focus { 
90                outline-style: solid; 
91                outline-color: white; 
92                outline-offset: -3px; 
93                outline-width: 1px; 
94
95            .opt-out-link svg { 
96                width: 30px; 
97                height: 14px; 
98                width: auto; 
99                vertical-align: middle; 
100
101            .modal__overlay { 
102                position: fixed; 
103                top: 0; 
104                left: 0; 
105                right: 0; 
106                bottom: 0; 
107                background: rgba(0,0,0,0.6); 
108                display: flex; 
109                justify-content: center; 
110                align-items: center; 
111
112 
113            .modal__container { 
114                background-color: #fff; 
115                padding: 30px; 
116                max-width: 500px; 
117                max-height: 100vh; 
118                border-radius: 4px; 
119                overflow-y: auto; 
120                box-sizing: border-box; 
121
122 
123            .modal__header { 
124                display: flex; 
125                justify-content: space-between; 
126                align-items: center; 
127
128 
129            .modal__title { 
130                margin-top: 0; 
131                margin-bottom: 0; 
132                font-weight: 600; 
133                font-size: 20px; 
134                line-height: 1.25; 
135                color: #00449e; 
136                box-sizing: border-box; 
137
138 
139            .modal__close { 
140                background: transparent; 
141                border: 1px solid white; 
142                padding: 4px 8px; 
143
144            .modal__close:hover { 
145                border: 1px solid black; 
146
147 
148            .modal__header .modal__close:before { content: "\2715"; } 
149 
150            .modal__content { 
151                margin-top: 2rem; 
152                margin-bottom: 2rem; 
153                line-height: 1.5; 
154
155 
156            @keyframes mmfadeIn { 
157                from { opacity: 0; } 
158                to { opacity: 1; } 
159
160 
161            @keyframes mmfadeOut { 
162                from { opacity: 1; } 
163                to { opacity: 0; } 
164
165 
166            @keyframes mmslideIn { 
167                from { transform: translateY(15%); } 
168                to { transform: translateY(0); } 
169
170 
171            @keyframes mmslideOut { 
172                from { transform: translateY(0); } 
173                to { transform: translateY(-10%); } 
174
175 
176            .micromodal-slide { 
177                display: none; 
178
179 
180            .micromodal-slide.is-open { 
181                display: block; 
182
183 
184            .micromodal-slide[aria-hidden="false"] .modal__overlay { 
185                animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
186
187 
188            .micromodal-slide[aria-hidden="false"] .modal__container { 
189                animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
190
191 
192            .micromodal-slide[aria-hidden="true"] .modal__overlay { 
193                animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
194
195 
196            .micromodal-slide[aria-hidden="true"] .modal__container { 
197                animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
198
199 
200            .micromodal-slide .modal__container, 
201            .micromodal-slide .modal__overlay { 
202                will-change: transform; 
203
204        </style> 
205 
206        <div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
207        <div class="modal__overlay" tabindex="-1" data-micromodal-close> 
208            <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
209            <header class="modal__header"> 
210                <h2 class="modal__title" id="modal-1-title"> 
211                Your California privacy choices 
212                </h2> 
213                <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
214            </header> 
215            <div class="modal__content" id="modal-1-content"> 
216                <div id="message-no-cookie"> 
217                    <p> 
218                    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> 
219                     
220        <p>&nbsp;</p> 
221 
222        <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> 
223            </div> 
224            <div id="message-with-cookie"> 
225                <p>You have successfully opted-out.</p> 
226            </div> 
227            </div> 
228            <div class="modal__footer"> 
229                <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a> 
230                <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
231            </div> 
232            </div> 
233        </div> 
234        </div> 
235    <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
236    <script> 
237        const fdicNode = document.querySelector('.footer .fdic');                          
238    </script> 
239    <script> 
240        const copyrightNode = document.querySelector('.footer .copyright'); 
241        if (copyrightNode) { 
242            copyrightNode.innerHTML = '<sup>©</sup> Elan Financial Services ' + ${currentYear}; 
243
244 
245    </script> 
246    <#if url?contains("11t1m")> 
247        <script>        
248            copyrightNode.classList.add("ecdma-footer-client-name-copyright"); 
249            fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
250        </script> 
251    <#else> 
252        <script> 
253            copyrightNode.classList.add("ecdma-footer-client-name-copyright"); 
254            fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
255            var newNode = document.createElement("div");  
256            newNode.classList.add("member-agreement"); 
257            newNode.innerHTML='<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!0}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>'; 
258            var parent = fdicNode.parentNode; 
259            parent.insertBefore(newNode, fdicNode); 
260        </script> 
261    </#if> 
262 
263    <#if partnerUrl?has_content> 
264        <script> 
265            document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>"; 
266        </script> 
267    </#if> 
268 
269    <script> 
270        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
271        fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link text-color-white" 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>'); 
272        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
273    </script> 
274    <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
275 
276    <script> 
277        window.getCookieDomain = function() { 
278            var hostname = window.location.hostname.split("."); 
279            return hostname && hostname.slice(hostname.length - 2).join("."); 
280
281        window.setToOptOut = function() { 
282            if (window.getCookie('privacy_optout')) { 
283                    document.getElementById('message-no-cookie').style.display = 'none'; 
284                    document.getElementById('message-with-cookie').style.display = 'block'; 
285                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
286                } else { 
287                    document.getElementById('message-no-cookie').style.display = 'block'; 
288                    document.getElementById('message-with-cookie').style.display = 'none'; 
289
290
291        window.getCookie = function(name) { 
292            var value = '; ' + document.cookie; 
293            var parts = value.split('; ' + name + '='); 
294            if (parts.length === 2) return parts.pop().split(';').shift(); 
295
296        window.californiaOptOut = function() { 
297            if (!window.getCookie('privacy_optout')) { 
298                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
299                try { 
300                if (window.CustomEvent) { 
301                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
302                } else { 
303                    var privacyOptoutEvent = document.createEvent('Event'); 
304                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
305                    window.dispatchEvent(privacyOptoutEvent); 
306
307                window.setToOptOut(); 
308                } catch (err) { 
309                console.error(err); 
310
311
312
313        MicroModal.init({ 
314            onShow: window.setToOptOut 
315        }); 
316        AUI().ready(function() { 
317            // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
318            const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
319            if(isBrowserGpcOptOut === true) { 
320            window.californiaOptOut(); 
321
322        }); 
323    </script> 
324    <!-- END CALIFORNIA OPT-OUT MODAL LOGIC --> 
325 
326</#if>