Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5883698" 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 "10153#10191#5883698" at line 8, 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 
8<#assign bCode= qstringmap["bankercode"]?first> 
9<#assign bCode = htmlUtil.escape(bCode)> 
10<#assign bCode = htmlUtil.escapeJS(bCode)> 
11 
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','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<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
19    <#assign ameriprise = true> 
20<#else> 
21    <#assign ameriprise = false> 
22</#if> 
23 
24<#if mappedLC?has_content && !ameriprise> 
25    <#assign lc = mappedLC > 
26</#if> 
27 
28<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
29<#if fiData?first?has_content> 
30    <#assign fi = fiData?first> 
31    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
32        <#assign subbu_special = fi.offerId> 
33    </#if> 
34</#if> 
35 
36 
37<#if lc?has_content> 
38    <#assign prefix = "00000" > 
39    <#assign lcWithPrefix = prefix + lc> 
40    <#assign withPrefixLength = lcWithPrefix?length > 
41    <#assign startHere = withPrefixLength - 5> 
42    <#assign lc = lcWithPrefix?substring(startHere)> 
43    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
44    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
45 
46    <#assign clientProfile = clientProfileList?first> 
47    <#assign partnerName = clientProfile.getMarketingNameLong()> 
48    <#assign pbu = clientProfile.getPbu()> 
49    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
50    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
51    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
52    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
53    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
54        <#assign partnerUrl = 'https://' + partnerUrl> 
55    </#if> 
56 
57    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
58    <#if clientdataList?has_content > 
59        <#assign clientdata = clientdataList?first > 
60    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
61		<#assign backgroundImage = clientdata["backgroundImage"] > 
62		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
63		<#assign AprMin = clientdata["AprMin"] > 
64		<#assign AprMax = clientdata["AprMax"] > 
65		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
66		<#assign BillingCycles = clientdata["BillingCycles"] > 
67		<#assign textHexColor = clientdata["textHexColor"] > 
68		<#assign linkHexColor = clientdata["linkHexColor"] > 
69		<#assign hoverColor = clientdata["hoverColor"] > 
70		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
71		<#assign transparency = clientdata["transparency"] > 
72		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
73		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
74		<#assign businessTransparency = clientdata["businessTransparency"] > 
75		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
76		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
77	</#if> --> 
78 
79    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
80    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
81    <script> 
82        console.log('logo url', '${cdnLogoUrl}${logoFileName}'); 
83    </script> 
84    <#if pbu == "0864054"> 
85        <#assign override = "berkshire"> 
86    <#else> 
87        <#assign override = " "> 
88    </#if> 
89<#--  this one should be delete for prod  --> 
90 
91<#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com"> 
92<#assign logoFileName = pbu + "-" + subbu + ".png">--> 
93 
94    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
95    <#if (subbu_special?has_content)> 
96        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)> 
97        <script> 
98            console.log('new subbu', '${subbu_special!''}'); 
99        </script> 
100    <#else> 
101        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)> 
102    </#if> 
103    <#assign temp = []> 
104    <#assign consumerCards = []> 
105    <#assign businessCards = []> 
106    <#assign offerTypeList = []> 
107    <#assign index = 0> 
108    <#assign ameriprise_cards= []> 
109    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
110    <#assign businessOfferTypes =['128', '121', '144', '143']> 
111    <#list fiCardsData as fib> 
112        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
113            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
114            <#assign temp = temp + fiCardsData[index..index]> 
115            <#if ameriprise> 
116                <#if (fib.offerType == "101" || fib.offerType == "103")> 
117                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
118                </#if> 
119            <#else> 
120                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
121                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
122                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
123                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
124                </#if> 
125            </#if> 
126        </#if> 
127        <#assign index = index + 1> 
128 
129    </#list> 
130    <#assign fiCardsData = temp> 
131    <#if ameriprise> 
132        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
133    </#if> 
134 
135    <#if (fiCardsData?size > 0)> 
136        <#if (subbu_special?has_content)> 
137            <#assign lc_used = fiCardsData?first.WebLocationCode> 
138        <#else> 
139            <#if ameriprise> 
140                <#assign lc_used = mappedLC> 
141            <#else> 
142                <#assign lc_used = lc> 
143            </#if> 
144        </#if> 
145        <#assign offerId = ""> 
146        <#assign sourceCode = ""> 
147        <#assign cardArtImage = ""> 
148        <#assign productUrl = ""> 
149        <#assign product = ""> 
150        <#assign preparerType = "customer"> 
151        <#assign apr = ""> 
152        <#assign cardIndex = 0> 
153        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
154            <#if (offerTypeList?seq_contains("101") || offerTypeList?seq_contains("103"))> 
155                <#list consumerCards as card> 
156                    <#if (card.offerType=="101" || card.offerType=="103") > 
157                        <#assign offerId = card.offerId> 
158                        <#assign sourceCode = card.sourceCode> 
159                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
160                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
161 
162                        <#assign productUrl="consumer-edr2112"> 
163                        <#assign product="Everyday Rewards+"> 
164                        <#assign cardIndex = 1> 
165 
166                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
167                        <#if (scrapedData?size > 0)> 
168                            <#list scrapedData as sItem> 
169                                <script> 
170                                    console.log("scrapped item", "${sItem.scrapedLabel}"); 
171                                </script> 
172                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
173                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
174                                    <#break> 
175                                </#if> 
176                            </#list> 
177                            <script> 
178                                $(document).ready(function () { 
179                                    var aprText = "${apr}"; 
180                                    if (aprText) { 
181                                        console.log("apr: " + aprText); 
182                                        try { 
183                                            $(".apr-full-text").html(aprText); 
184                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
185                                            var billing_cycle = matches[1]; 
186                                            var apr_min = apr_min = matches[2]; 
187                                            var apr_max = apr_max = matches[3]; 
188                                            if (billing_cycle) { 
189                                                $(".scraped-billing-cycle").html(billing_cycle); 
190
191                                            if (apr_min) { 
192                                                $(".scraped-apr-min").html(apr_min); 
193
194                                            if (apr_max) { 
195                                                $('.scraped-apr-max').html(apr_max); 
196
197 
198                                        } catch (e) { 
199                                            console.log(e); 
200
201                                    } else { 
202                                        $(".apr-full-text").html(''); 
203
204                                }); 
205                            </script> 
206                        </#if> 
207                        <script> 
208                            var product = "${product}"; 
209                            var partnerName = "${partnerName}"; 
210                            $(document).ready(function () { 
211                                $(".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>'); 
212                            }); 
213                        </script> 
214                    </#if> 
215                </#list> 
216            <#else> 
217                <#assign displayedCard = consumerCards[0]> 
218                <#assign offerId = displayedCard.offerId> 
219                <#assign sourceCode = displayedCard.sourceCode> 
220                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
221                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
222                <#if ameriprise> 
223                    <#if (displayedCard.offerType == "101")> 
224                        <#assign productUrl="ameriprise-premier-visa-signature"> 
225                        <#assign product="Premier Visa Signature"> 
226                        <#assign cardIndex = 0> 
227                    <#elseif (displayedCard.offerType == "103")> 
228                        <#assign productUrl = "ameriprise-visa-signature"> 
229                        <#assign product="Visa Signature"> 
230                        <#assign cardIndex = 1> 
231                    </#if> 
232                <#else> 
233                    <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
234                        <#assign productUrl = "consumer-platinum2103"> 
235                        <#assign product="Platinum"> 
236                        <#assign cardIndex = 4> 
237                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
238                        <#if (scrapedData?size > 0)> 
239                            <#list scrapedData as sItem> 
240                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
241                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
242                                    <#break> 
243                                </#if> 
244                            </#list> 
245                            <script> 
246                                $(document).ready(function () { 
247                                    var aprText = "${apr}"; 
248                                    if (aprText) { 
249                                        console.log("apr:" + aprText); 
250                                        try { 
251                                            $(".apr-full-text").html(aprText); 
252                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
253                                            var billing_cycle = matches[1]; 
254                                            var apr_min = apr_min = matches[2]; 
255                                            var apr_max = apr_max = matches[3]; 
256                                            if (billing_cycle) { 
257                                                $(".scraped-billing-cycle").html(billing_cycle); 
258
259                                            if (apr_min) { 
260                                                $(".scraped-apr-min").html(apr_min); 
261
262                                            if (apr_max) { 
263                                                $('.scraped-apr-max').html(apr_max); 
264
265 
266                                        } catch (e) { 
267                                            console.log(e); 
268
269                                    } else { 
270                                        $(".apr-full-text").html(''); 
271
272                                }); 
273                            </script> 
274                        </#if> 
275                    <#elseif (displayedCard.offerType == "104")> 
276                        <#assign productUrl = "max-cash"> 
277                        <#assign product="Max Cash Preferred"> 
278                        <#assign cardIndex = 0> 
279                    <#elseif (displayedCard.offerType == "141")> 
280                        <#assign productUrl = "college-real-rewards"> 
281                        <#assign product="College Real Rewards"> 
282                        <#assign cardIndex = 2> 
283                    <#elseif (displayedCard.offerType == "115")> 
284                        <#assign productUrl = "secured"> 
285                        <#assign product="Secured"> 
286                        <#assign cardIndex = 3> 
287                    </#if> 
288                </#if> 
289            </#if> 
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign offerId = card.offerId> 
296                        <#assign sourceCode = card.sourceCode> 
297                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
298                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
299                        <#assign productUrl = "business-cash-preferred"> 
300                        <#assign product="Business Cash Preferred"> 
301                        <#assign cardIndex = 0> 
302                    </#if> 
303                </#list> 
304            <#else> 
305                <#assign displayedCard = businessCards[0]> 
306                <#assign offerId = displayedCard.offerId> 
307                <#assign sourceCode = displayedCard.sourceCode> 
308                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
309                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
310 
311                <#if (displayedCard.offerType=="143")> 
312                    <#assign productUrl="business-real-rewards"> 
313                    <#assign product="Business Real Rewards"> 
314                    <#assign cardIndex = 2> 
315                <#elseif (displayedCard.offerType=="144")> 
316                    <#assign productUrl = "smart-business-rewards"> 
317                    <#assign product="Smart Business Rewards"> 
318                    <#assign cardIndex = 1> 
319                <#elseif (displayedCard.offerType=="121")> 
320                    <#assign productUrl = "business-platinum2103"> 
321                    <#assign product="Business Card"> 
322                    <#assign cardIndex = 3> 
323                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
324                    <#if (scrapedData?size > 0)> 
325                        <#list scrapedData as sItem> 
326                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
327                                <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
328                                <#break> 
329                            </#if> 
330                        </#list> 
331                        <script> 
332                            console.log("apr"); 
333                            $(document).ready(function () { 
334                                var aprText = "${apr}"; 
335                                if (aprText) { 
336                                    console.log("apr: " + aprText); 
337                                    try { 
338                                        $(".apr-full-text").html(aprText); 
339                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
340                                        var billing_cycle = matches[1]; 
341                                        var apr_min = apr_min = matches[2]; 
342                                        var apr_max = apr_max = matches[3]; 
343                                        if (billing_cycle) { 
344                                            $(".scraped-billing-cycle").html(billing_cycle); 
345
346                                        if (apr_min) { 
347                                            $(".scraped-apr-min").html(apr_min); 
348
349                                        if (apr_max) { 
350                                            $('.scraped-apr-max').html(apr_max); 
351
352 
353                                    } catch (e) { 
354                                        console.log(e); 
355
356                                } else { 
357                                    $(".apr-full-text").html(''); 
358
359                            }); 
360                        </script> 
361                    </#if> 
362                </#if> 
363            </#if> 
364        </#if> 
365        <#if product != ""> 
366            <#if ameriprise> 
367                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
368                <#assign rollover_text =  partnerName + " " + product + " Card"> 
369            <#else> 
370                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
371                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
372                <#assign card_text = product + " Card"> 
373            </#if> 
374        </#if> 
375        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
376            <div class="hero-main"> 
377                <div class="hero-main-logo"> 
378                    <img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"> 
379                </div> 
380                <div class="hero-main-container"> 
381                    <div class="hero-main-offer bg-color-white"> 
382                        <div class="offer-detail"> 
383 
384                            <div class="offer-detail-cardArt cardArtImg"> 
385                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
386                                <p>${card_text!''}</p> 
387                            </div> 
388                            <div class="offer-detail-text text-color-default hide-desktop"> 
389                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
390                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
391                            </div> 
392 
393                            <#if ameriprise> 
394                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
395                            <#else> 
396                                <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm hide-desktop"> 
397                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
398                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
399                                    <button 
400                                            type="submit" 
401                                            data-button-name="cta-button-top" 
402                                            data-product-name="${productUrl!''}" 
403                                            class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
404                                            disabled 
405
406                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
407                                    </button> 
408                                </form> 
409                            </#if> 
410                        </div> 
411 
412                        <div class="offer-header"> 
413                            <div class="offer-text-top"> 
414                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
415                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
416                            </div> 
417                            <div class="offer-text-bottom hide-mobile"> 
418                                <div class="offer-detail-text text-color-default"> 
419                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
420                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
421                                </div> 
422 
423                                <#if ameriprise> 
424                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
425                                <#else> 
426                                    <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm"> 
427                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
428                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
429                                        <button 
430                                                type="submit" 
431                                                data-button-name="cta-button-top" 
432                                                data-product-name="${productUrl!''}" 
433                                                class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
434                                                disabled 
435
436                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
437                                        </button> 
438                                    </form> 
439                                </#if> 
440                            </div> 
441                        </div> 
442                    </div> 
443                </div> 
444            </div> 
445        </div> 
446 
447    </#if> 
448</#if> 
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5883698" 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 "10153#10191#5883698" at line 8, 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 
8<#assign bCode= qstringmap["bankercode"]?first> 
9<#assign bCode = htmlUtil.escape(bCode)> 
10<#assign bCode = htmlUtil.escapeJS(bCode)> 
11 
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','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<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
19    <#assign ameriprise = true> 
20<#else> 
21    <#assign ameriprise = false> 
22</#if> 
23 
24<#if mappedLC?has_content && !ameriprise> 
25    <#assign lc = mappedLC > 
26</#if> 
27 
28<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
29<#if fiData?first?has_content> 
30    <#assign fi = fiData?first> 
31    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
32        <#assign subbu_special = fi.offerId> 
33    </#if> 
34</#if> 
35 
36 
37<#if lc?has_content> 
38    <#assign prefix = "00000" > 
39    <#assign lcWithPrefix = prefix + lc> 
40    <#assign withPrefixLength = lcWithPrefix?length > 
41    <#assign startHere = withPrefixLength - 5> 
42    <#assign lc = lcWithPrefix?substring(startHere)> 
43    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
44    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
45 
46    <#assign clientProfile = clientProfileList?first> 
47    <#assign partnerName = clientProfile.getMarketingNameLong()> 
48    <#assign pbu = clientProfile.getPbu()> 
49    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
50    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
51    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
52    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
53    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
54        <#assign partnerUrl = 'https://' + partnerUrl> 
55    </#if> 
56 
57    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
58    <#if clientdataList?has_content > 
59        <#assign clientdata = clientdataList?first > 
60    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
61		<#assign backgroundImage = clientdata["backgroundImage"] > 
62		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
63		<#assign AprMin = clientdata["AprMin"] > 
64		<#assign AprMax = clientdata["AprMax"] > 
65		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
66		<#assign BillingCycles = clientdata["BillingCycles"] > 
67		<#assign textHexColor = clientdata["textHexColor"] > 
68		<#assign linkHexColor = clientdata["linkHexColor"] > 
69		<#assign hoverColor = clientdata["hoverColor"] > 
70		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
71		<#assign transparency = clientdata["transparency"] > 
72		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
73		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
74		<#assign businessTransparency = clientdata["businessTransparency"] > 
75		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
76		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
77	</#if> --> 
78 
79    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
80    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
81    <script> 
82        console.log('logo url', '${cdnLogoUrl}${logoFileName}'); 
83    </script> 
84    <#if pbu == "0864054"> 
85        <#assign override = "berkshire"> 
86    <#else> 
87        <#assign override = " "> 
88    </#if> 
89<#--  this one should be delete for prod  --> 
90 
91<#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com"> 
92<#assign logoFileName = pbu + "-" + subbu + ".png">--> 
93 
94    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
95    <#if (subbu_special?has_content)> 
96        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)> 
97        <script> 
98            console.log('new subbu', '${subbu_special!''}'); 
99        </script> 
100    <#else> 
101        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)> 
102    </#if> 
103    <#assign temp = []> 
104    <#assign consumerCards = []> 
105    <#assign businessCards = []> 
106    <#assign offerTypeList = []> 
107    <#assign index = 0> 
108    <#assign ameriprise_cards= []> 
109    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
110    <#assign businessOfferTypes =['128', '121', '144', '143']> 
111    <#list fiCardsData as fib> 
112        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
113            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
114            <#assign temp = temp + fiCardsData[index..index]> 
115            <#if ameriprise> 
116                <#if (fib.offerType == "101" || fib.offerType == "103")> 
117                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
118                </#if> 
119            <#else> 
120                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
121                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
122                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
123                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
124                </#if> 
125            </#if> 
126        </#if> 
127        <#assign index = index + 1> 
128 
129    </#list> 
130    <#assign fiCardsData = temp> 
131    <#if ameriprise> 
132        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
133    </#if> 
134 
135    <#if (fiCardsData?size > 0)> 
136        <#if (subbu_special?has_content)> 
137            <#assign lc_used = fiCardsData?first.WebLocationCode> 
138        <#else> 
139            <#if ameriprise> 
140                <#assign lc_used = mappedLC> 
141            <#else> 
142                <#assign lc_used = lc> 
143            </#if> 
144        </#if> 
145        <#assign offerId = ""> 
146        <#assign sourceCode = ""> 
147        <#assign cardArtImage = ""> 
148        <#assign productUrl = ""> 
149        <#assign product = ""> 
150        <#assign preparerType = "customer"> 
151        <#assign apr = ""> 
152        <#assign cardIndex = 0> 
153        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
154            <#if (offerTypeList?seq_contains("101") || offerTypeList?seq_contains("103"))> 
155                <#list consumerCards as card> 
156                    <#if (card.offerType=="101" || card.offerType=="103") > 
157                        <#assign offerId = card.offerId> 
158                        <#assign sourceCode = card.sourceCode> 
159                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
160                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
161 
162                        <#assign productUrl="consumer-edr2112"> 
163                        <#assign product="Everyday Rewards+"> 
164                        <#assign cardIndex = 1> 
165 
166                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
167                        <#if (scrapedData?size > 0)> 
168                            <#list scrapedData as sItem> 
169                                <script> 
170                                    console.log("scrapped item", "${sItem.scrapedLabel}"); 
171                                </script> 
172                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
173                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
174                                    <#break> 
175                                </#if> 
176                            </#list> 
177                            <script> 
178                                $(document).ready(function () { 
179                                    var aprText = "${apr}"; 
180                                    if (aprText) { 
181                                        console.log("apr: " + aprText); 
182                                        try { 
183                                            $(".apr-full-text").html(aprText); 
184                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
185                                            var billing_cycle = matches[1]; 
186                                            var apr_min = apr_min = matches[2]; 
187                                            var apr_max = apr_max = matches[3]; 
188                                            if (billing_cycle) { 
189                                                $(".scraped-billing-cycle").html(billing_cycle); 
190
191                                            if (apr_min) { 
192                                                $(".scraped-apr-min").html(apr_min); 
193
194                                            if (apr_max) { 
195                                                $('.scraped-apr-max').html(apr_max); 
196
197 
198                                        } catch (e) { 
199                                            console.log(e); 
200
201                                    } else { 
202                                        $(".apr-full-text").html(''); 
203
204                                }); 
205                            </script> 
206                        </#if> 
207                        <script> 
208                            var product = "${product}"; 
209                            var partnerName = "${partnerName}"; 
210                            $(document).ready(function () { 
211                                $(".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>'); 
212                            }); 
213                        </script> 
214                    </#if> 
215                </#list> 
216            <#else> 
217                <#assign displayedCard = consumerCards[0]> 
218                <#assign offerId = displayedCard.offerId> 
219                <#assign sourceCode = displayedCard.sourceCode> 
220                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
221                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
222                <#if ameriprise> 
223                    <#if (displayedCard.offerType == "101")> 
224                        <#assign productUrl="ameriprise-premier-visa-signature"> 
225                        <#assign product="Premier Visa Signature"> 
226                        <#assign cardIndex = 0> 
227                    <#elseif (displayedCard.offerType == "103")> 
228                        <#assign productUrl = "ameriprise-visa-signature"> 
229                        <#assign product="Visa Signature"> 
230                        <#assign cardIndex = 1> 
231                    </#if> 
232                <#else> 
233                    <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
234                        <#assign productUrl = "consumer-platinum2103"> 
235                        <#assign product="Platinum"> 
236                        <#assign cardIndex = 4> 
237                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
238                        <#if (scrapedData?size > 0)> 
239                            <#list scrapedData as sItem> 
240                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
241                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
242                                    <#break> 
243                                </#if> 
244                            </#list> 
245                            <script> 
246                                $(document).ready(function () { 
247                                    var aprText = "${apr}"; 
248                                    if (aprText) { 
249                                        console.log("apr:" + aprText); 
250                                        try { 
251                                            $(".apr-full-text").html(aprText); 
252                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
253                                            var billing_cycle = matches[1]; 
254                                            var apr_min = apr_min = matches[2]; 
255                                            var apr_max = apr_max = matches[3]; 
256                                            if (billing_cycle) { 
257                                                $(".scraped-billing-cycle").html(billing_cycle); 
258
259                                            if (apr_min) { 
260                                                $(".scraped-apr-min").html(apr_min); 
261
262                                            if (apr_max) { 
263                                                $('.scraped-apr-max').html(apr_max); 
264
265 
266                                        } catch (e) { 
267                                            console.log(e); 
268
269                                    } else { 
270                                        $(".apr-full-text").html(''); 
271
272                                }); 
273                            </script> 
274                        </#if> 
275                    <#elseif (displayedCard.offerType == "104")> 
276                        <#assign productUrl = "max-cash"> 
277                        <#assign product="Max Cash Preferred"> 
278                        <#assign cardIndex = 0> 
279                    <#elseif (displayedCard.offerType == "141")> 
280                        <#assign productUrl = "college-real-rewards"> 
281                        <#assign product="College Real Rewards"> 
282                        <#assign cardIndex = 2> 
283                    <#elseif (displayedCard.offerType == "115")> 
284                        <#assign productUrl = "secured"> 
285                        <#assign product="Secured"> 
286                        <#assign cardIndex = 3> 
287                    </#if> 
288                </#if> 
289            </#if> 
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign offerId = card.offerId> 
296                        <#assign sourceCode = card.sourceCode> 
297                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
298                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
299                        <#assign productUrl = "business-cash-preferred"> 
300                        <#assign product="Business Cash Preferred"> 
301                        <#assign cardIndex = 0> 
302                    </#if> 
303                </#list> 
304            <#else> 
305                <#assign displayedCard = businessCards[0]> 
306                <#assign offerId = displayedCard.offerId> 
307                <#assign sourceCode = displayedCard.sourceCode> 
308                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
309                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
310 
311                <#if (displayedCard.offerType=="143")> 
312                    <#assign productUrl="business-real-rewards"> 
313                    <#assign product="Business Real Rewards"> 
314                    <#assign cardIndex = 2> 
315                <#elseif (displayedCard.offerType=="144")> 
316                    <#assign productUrl = "smart-business-rewards"> 
317                    <#assign product="Smart Business Rewards"> 
318                    <#assign cardIndex = 1> 
319                <#elseif (displayedCard.offerType=="121")> 
320                    <#assign productUrl = "business-platinum2103"> 
321                    <#assign product="Business Card"> 
322                    <#assign cardIndex = 3> 
323                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
324                    <#if (scrapedData?size > 0)> 
325                        <#list scrapedData as sItem> 
326                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
327                                <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
328                                <#break> 
329                            </#if> 
330                        </#list> 
331                        <script> 
332                            console.log("apr"); 
333                            $(document).ready(function () { 
334                                var aprText = "${apr}"; 
335                                if (aprText) { 
336                                    console.log("apr: " + aprText); 
337                                    try { 
338                                        $(".apr-full-text").html(aprText); 
339                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
340                                        var billing_cycle = matches[1]; 
341                                        var apr_min = apr_min = matches[2]; 
342                                        var apr_max = apr_max = matches[3]; 
343                                        if (billing_cycle) { 
344                                            $(".scraped-billing-cycle").html(billing_cycle); 
345
346                                        if (apr_min) { 
347                                            $(".scraped-apr-min").html(apr_min); 
348
349                                        if (apr_max) { 
350                                            $('.scraped-apr-max').html(apr_max); 
351
352 
353                                    } catch (e) { 
354                                        console.log(e); 
355
356                                } else { 
357                                    $(".apr-full-text").html(''); 
358
359                            }); 
360                        </script> 
361                    </#if> 
362                </#if> 
363            </#if> 
364        </#if> 
365        <#if product != ""> 
366            <#if ameriprise> 
367                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
368                <#assign rollover_text =  partnerName + " " + product + " Card"> 
369            <#else> 
370                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
371                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
372                <#assign card_text = product + " Card"> 
373            </#if> 
374        </#if> 
375        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
376            <div class="hero-main"> 
377                <div class="hero-main-logo"> 
378                    <img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"> 
379                </div> 
380                <div class="hero-main-container"> 
381                    <div class="hero-main-offer bg-color-white"> 
382                        <div class="offer-detail"> 
383 
384                            <div class="offer-detail-cardArt cardArtImg"> 
385                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
386                                <p>${card_text!''}</p> 
387                            </div> 
388                            <div class="offer-detail-text text-color-default hide-desktop"> 
389                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
390                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
391                            </div> 
392 
393                            <#if ameriprise> 
394                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
395                            <#else> 
396                                <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm hide-desktop"> 
397                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
398                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
399                                    <button 
400                                            type="submit" 
401                                            data-button-name="cta-button-top" 
402                                            data-product-name="${productUrl!''}" 
403                                            class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
404                                            disabled 
405
406                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
407                                    </button> 
408                                </form> 
409                            </#if> 
410                        </div> 
411 
412                        <div class="offer-header"> 
413                            <div class="offer-text-top"> 
414                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
415                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
416                            </div> 
417                            <div class="offer-text-bottom hide-mobile"> 
418                                <div class="offer-detail-text text-color-default"> 
419                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
420                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
421                                </div> 
422 
423                                <#if ameriprise> 
424                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
425                                <#else> 
426                                    <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm"> 
427                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
428                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
429                                        <button 
430                                                type="submit" 
431                                                data-button-name="cta-button-top" 
432                                                data-product-name="${productUrl!''}" 
433                                                class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
434                                                disabled 
435
436                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
437                                        </button> 
438                                    </form> 
439                                </#if> 
440                            </div> 
441                        </div> 
442                    </div> 
443                </div> 
444            </div> 
445        </div> 
446 
447    </#if> 
448</#if> 
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843849" at line 39, 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 "10153#10191#5843849" at line 39, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign url = themeDisplay.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 
9 
10<#assign text_to_apply_source = "vanity url" > 
11<#if qstringmap["sms"]?has_content> 
12    <#assign sms = 1 > 
13    <#assign text_to_apply_source = "sms" > 
14</#if> 
15<#if qstringmap["qrCode"]?has_content> 
16    <#assign text_to_apply_source = "qr code" > 
17</#if> 
18 
19<#if qstringmap["ecid"]?has_content> 
20    <#assign ecidExt = qstringmap["ecid"]?first> 
21    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
22    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
23    <#assign ecidExt = "&ecid=" + ecidExt> 
24    
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<#assign bCode= qstringmap["bankercode"]?first> 
40<#assign bCode= htmlUtil.escapeJS(bCode)> 
41<#assign bCode= htmlUtil.escape(bCode)> 
42 
43<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
44<#if fiData?first?has_content> 
45    <#assign fi = fiData?first> 
46    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))> 
47        <#assign subbu_special = fi.offerId> 
48    </#if> 
49</#if> 
50 
51<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
52<#list bData as b>      
53    <#assign lc = b.locationcode > 
54    <#assign bName = b.branch > 
55    <#assign bPhone = b.businessphone > 
56    <#assign boeid = b.oeid > 
57    <#assign fName = b.firstname?trim > 
58    <#assign lName = b.lastname?trim > 
59    <#assign rLC = b.reallocationcode > 
60    <#assign mappedLC = b.mappedLocationCode > 
61</#list>  
62 
63<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
64    <#assign ameriprise = true> 
65<#else> 
66    <#assign ameriprise = false> 
67</#if> 
68<#if mappedLC?has_content && !ameriprise> 
69    <#assign lc = mappedLC > 
70</#if> 
71 
72           
73<#if lc?has_content> 
74    <#assign firstNameLength = fName?length > 
75    <#assign lastNameLength = lName?length > 
76    <#if firstNameLength + lastNameLength &gt; 19 > 
77        <#if lastNameLength &gt; 18 > 
78            <#assign bLName = lName?substring(0,18)> 
79        <#else> 
80            <#assign bLName = lName> 
81        </#if> 
82        <#assign maxFirstName = 19 - bLName?length > 
83        <#if firstNameLength &gt; maxFirstName > 
84            <#assign bFName = fName?substring(0,maxFirstName)> 
85        <#else> 
86            <#assign bFName = fName> 
87        </#if> 
88    <#else> 
89        <#assign bFName = fName> 
90        <#assign bLName = lName> 
91    </#if>  
92 
93    <#assign prefix = "00000" > 
94    <#assign lcWithPrefix = prefix + lc > 
95    <#assign withPrefixLength = lcWithPrefix?length > 
96    <#assign startHere = withPrefixLength - 5> 
97    <#assign lc = lcWithPrefix?substring(startHere)>   
98    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
99    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
100    <#if (clientProfileList?first?has_content)> 
101        <#assign clientProfile = clientProfileList?first> 
102        <#assign partnerName = clientProfile.getMarketingNameLong()> 
103        <#assign pbu = clientProfile.getPbu()> 
104        <#assign subbu = clientProfile.getSUBBRANDBUNBR()>          
105        <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>  
106        <#if (subbu_special?has_content)> 
107            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
108        <#else> 
109            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
110 
111        </#if> 
112 
113        <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards--> 
114        <#assign temp = []> 
115        <#assign consumerCards = []> 
116        <#assign businessCards = []>  
117        <#assign offerTypeList = []>  
118        <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']> 
119        <#assign businessOfferTypes =['144', '128', '143', '121']>     
120        <#assign index = 0> 
121        <#list fiCardsData as fib> 
122            <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
123                <#assign offerTypeList = offerTypeList + [fib.offerType]> 
124                <#assign temp = temp + fiCardsData[index..index]>   
125                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
126                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
127                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
128                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
129                </#if>                 
130            </#if>  
131            <#assign index = index + 1>                
132        </#list>  
133 
134 
135        <#assign fiCardsData = temp> 
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        </#if>  
148 
149        <#if (consumerCards?size > 0 || businessCards?size > 0)>  
150         
151            <div class="content-container content-container-main jn-consumer-content" id="product-display"> 
152                <#if ((consumerCards?size > 0) && (businessCards?size > 0))> 
153                    <nav class="jn-primary-nav two-tabs"> 
154                        <ul> 
155                            <li title="${partnerName!''} - Personal products"> 
156                                <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a> 
157                            </li> 
158                            <li title="${partnerName!''} - Business products"> 
159                                <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a> 
160                            </li> 
161                        </ul> 
162                    </nav> 
163                <#else> 
164                    <#if (consumerCards?size > 0)> 
165                        <nav class="jn-primary-nav" title="${partnerName!''} - Personal products"> 
166                            <ul> 
167                                <li> 
168                                    <p class="tab-nav" id="consumerTab"><span>Personal</span></p> 
169                                </li> 
170                            </ul> 
171                        </nav> 
172                    </#if> 
173                    <#if (businessCards?size > 0)> 
174                        <nav class="jn-primary-nav" title="${partnerName!''} - Business products"> 
175                            <ul> 
176                                <li> 
177                                    <p class="tab-nav" id="businessTab"><span>Business</span></p> 
178                                </li> 
179                            </ul> 
180                        </nav> 
181                    </#if> 
182                </#if> 
183                <#if (consumerCards?size > 0)> 
184                    <div class="tab-more-wrapper"> 
185                        <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products"> 
186                            <#list consumerCards as fib> 
187                                <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" > 
188                                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">                         
189                                <#if ameriprise>                                
190                                    <#if (fib.offerType == "101")> 
191                                            <#assign productName = "premier-visa-signature"> 
192                                            <#assign product="Premier Visa Signature"> 
193                                            <#assign cardIndex = 0> 
194                                    <#elseif (fib.offerType == "103")> 
195                                            <#assign productName = "visa-signature"> 
196                                            <#assign product="Visa Signature"> 
197                                            <#assign cardIndex = 1> 
198                                    </#if> 
199                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
200                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
201                                <#else> 
202                                    <#switch fib.offerType> 
203                                        <#case "101"> 
204                                            <#assign productName = "consumer-edr2112"> 
205                                            <#assign product="Everyday Rewards+"> 
206                                            <#assign cardIndex = 0> 
207                                            <#break> 
208                                        <#case "108"> 
209                                            <#assign productName = "consumer-platinum2103"> 
210                                            <#assign product="Platinum"> 
211                                            <#assign cardIndex = 2> 
212                                            <#break> 
213                                        <#case "109"> 
214                                            <#assign productName = "consumer-platinum2103"> 
215                                            <#assign product="Platinum"> 
216                                            <#assign cardIndex = 2> 
217                                            <#break>                                            
218                                        <#case "115"> 
219                                            <#assign productName = "secured"> 
220                                            <#assign product="Secured"> 
221                                            <#assign cardIndex = 5> 
222                                            <#break> 
223                                        <#case "104"> 
224                                            <#assign productName = "max-cash"> 
225                                            <#assign product="Max Cash Preferred"> 
226                                            <#assign cardIndex = 1> 
227                                            <#break> 
228                                        <#case "147"> 
229                                            <#assign productName = "max-cash-secured"> 
230                                            <#assign product="Max Cash Secured"> 
231                                            <#assign cardIndex = 4> 
232                                            <#break> 
233                                        <#case "141"> 
234                                            <#assign productName = "college-real-rewards"> 
235                                            <#assign product="College Real Rewards"> 
236                                            <#assign cardIndex = 3> 
237                                            <#break> 
238                                        <#case "138"> 
239                                            <#assign productName = "travel-rewards-plus"> 
240                                            <#assign product="Travel Rewards+"> 
241                                            <#assign cardIndex = 10> 
242                                            <#break> 
243                                        <#case "154"> 
244                                            <#assign productName = "reserve-rewards-plus"> 
245                                            <#assign product="Reserve Rewards+"> 
246                                            <#assign cardIndex = 11> 
247                                            <#break> 
248                                        <#default> 
249                                    </#switch> 
250 
251                                    <#assign newTag = ""> 
252                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
253                                        <#assign newTag = "with-new-tag"> 
254                                    </#if> 
255                                     
256                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
257                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
258                                     
259 
260                                    <#assign APR=""> 
261                                    <#assign AMF=""> 
262                                    <#assign BAL=""> 
263                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)> 
264                                    <#if (scrapedData?size > 0)> 
265                                        <#list scrapedData as sItem> 
266                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
267                                                <#assign APR = sItem.scrapedValue> 
268                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
269                                                <#assign AMF = sItem.scrapedValue> 
270                                            <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
271                                                <#assign BAL = sItem.scrapedValue> 
272                                            </#if> 
273                                            <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
274                                                <#break> 
275                                            </#if> 
276                                        </#list> 
277                                    </#if> 
278                                </#if> 
279                                <#if ameriprise> 
280                                    <#assign rollover_text =  partnerName + " " + product + " " + " Card"> 
281                                <#else> 
282                                    <#assign rollover_text =  partnerName + " " + product + " " + " Credit Card"> 
283                                </#if>                             
284                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}"> 
285                                    <div class="tag-container"> 
286                                        <div class="tag-corner"> 
287                                            <div class="tag-label">NEW</div> 
288                                        </div> 
289                                    </div> 
290                                    <div class="consumer-card-heading hide-desktop"> 
291                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
292                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
293                                    </div> 
294                                    <div class="jn-consumer-card-image"> 
295                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
296 
297                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
298                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
299                                        </#if> 
300                                    </div> 
301 
302                                    <div class="jn-consumer-card-info"> 
303                                        <div class="consumer-card-heading hide-mobile"> 
304                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
305                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
306                                        </div> 
307                                        <div class="jn-additional"> 
308                                            <ul class="${fib.offerType}"> 
309                                                <#if !ameriprise>                                            
310                                                    <#if (fib.offerType == "104")> 
311                                                        <li class="${fib.offerType}"> 
312                                                            <p> 
313                                                                <strong>APR for Purchases: </strong> 
314                                                                ${APR!''} 
315                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
316                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
317                                                                </a> 
318                                                            </p>                                                             
319                                                        </li> 
320                                                        <li class="${fib.offerType}"> 
321                                                            <p> 
322                                                                <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong> 
323                                                                ${BAL!''}  
324                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
325                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
326                                                                </a> 
327                                                            </p> 
328                                                        </li> 
329                                                    <#else> 
330                                                        <li class="${fib.offerType}"> 
331                                                            <p> 
332                                                                <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")> 
333                                                                    <strong>APR for Purchases and Balance Transfers: </strong> 
334                                                                <#elseif (fib.offerType== "101")> 
335                                                                    <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
336                                                                <#else> 
337                                                                    <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
338                                                                </#if> 
339 
340                                                                ${APR!''}  
341                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
342                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
343                                                                </a> 
344                                                            </p> 
345                                                        </li> 
346                                                    </#if> 
347                                                </#if> 
348                                                <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
349                                                    <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
350                                                        <li>${marketingInfo.getData()}</li> 
351                                                    </#list> 
352                                                </#if> 
353                                                <#if !ameriprise> 
354                                                    <li> 
355                                                        <p> 
356                                                            Annual Fee: ${AMF!''}  
357                                                            <a  href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}"  target="_blank"> 
358                                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
359                                                            </a> 
360                                                        </p> 
361                                                    </li> 
362                                                </#if> 
363                                            </ul> 
364                                        </div> 
365                                        <ul class="actions"> 
366                                            <li> 
367                                                <form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}" method="post" class="BAAForm"> 
368                                                    <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
369                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
370                                                    <a  
371                                                        class="applyNowLink apply-now-button"  
372                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}" 
373                                                        data-button-name="apply-now-link"  
374                                                        data-product-name="${productName}"                 
375
376                                                            ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
377                                                    </a> 
378                                                </form> 
379                                            </li> 
380                                            <li> 
381                                            <#if ameriprise> 
382                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}"> 
383                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span> 
384                                                </a> 
385                                            <#else> 
386                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
387                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
388                                                </a> 
389                                            </#if> 
390                                            </li> 
391                                        </ul> 
392                                    </div>                             
393                                </div> 
394                            </#list> 
395                        </div> 
396                    </div>                 
397                </#if> 
398                <#if (businessCards?size > 0)>  
399                    <div class="tab-more-wrapper">    
400                        <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products"> 
401                             
402                            <#list businessCards as fib> 
403                                    <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png"> 
404                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg"> 
405                                    <#switch fib.offerType>                                   
406                                        <#case "144"> 
407                                            <#assign productName = "smart-business-rewards"> 
408                                            <#assign product="Smart Business Rewards"> 
409                                            <#assign cardIndex = 8> 
410                                            <#break> 
411                                        <#case "128"> 
412                                            <#assign productName = "business-cash-preferred"> 
413                                            <#assign product="Business Cash Preferred"> 
414                                            <#assign cardIndex = 6>   
415                                            <#break> 
416                                        <#case "143"> 
417                                            <#assign productName = "business-real-rewards"> 
418                                            <#assign product="Business Real Rewards"> 
419                                            <#assign cardIndex = 9> 
420                                            <#break> 
421                                        <#case "121"> 
422                                            <#assign productName = "business-platinum2103"> 
423                                            <#assign product="Business Card"> 
424                                            <#assign cardIndex = 7> 
425                                            <#break> 
426                                        <#default> 
427                                    </#switch> 
428 
429                                    <#assign newTag = ""> 
430                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
431                                        <#assign newTag = "with-new-tag"> 
432                                    </#if> 
433                                    <#assign APR=""> 
434                                    <#assign AMF=""> 
435                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)> 
436                                    <#if (scrapedData?size > 0)> 
437                                        <#list scrapedData as sItem> 
438                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
439                                                <#assign APR = sItem.scrapedValue> 
440                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
441                                                <#assign AMF = sItem.scrapedValue> 
442                                            </#if> 
443                                            <#if (APR?has_content && AMF?has_content)> 
444                                                <#break> 
445                                            </#if> 
446                                        </#list> 
447                                    </#if> 
448                                     
449                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card"> 
450                                    <div class="tag-container"> 
451                                        <div class="tag-corner"> 
452                                            <div class="tag-label">NEW</div> 
453                                        </div> 
454                                    </div> 
455                                    <div class="consumer-card-heading hide-desktop"> 
456                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
457                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
458                                    </div> 
459                                    <div class="jn-consumer-card-image"> 
460                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
461                                 
462                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
463                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
464                                        </#if> 
465                                    </div> 
466 
467                                    <div class="jn-consumer-card-info"> 
468                                        <div class="consumer-card-heading hide-mobile"> 
469                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
470                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
471                                        </div> 
472                                        <div class="jn-additional"> 
473                                            <ul> 
474                                                <li class="${fib.offerType}"> 
475                                                    <p> 
476                                                        <#if (fib.offerType == "144")> 
477                                                            <strong>APR for Purchases and Balance Transfers: </strong> 
478                                                        <#else> 
479                                                            <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
480                                                        </#if> 
481 
482                                                        ${APR!''} 
483                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
484                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
485                                                        </a> 
486                                                    </p> 
487                                                </li> 
488                                                <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
489                                                    <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
490                                                        <li>${marketingInfo.getData()}</li> 
491                                                    </#list> 
492                                                </#if> 
493                                                <li> 
494                                                    <p> 
495                                                        Annual Fee: ${AMF!''} <a 
496                                                        href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
497                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
498                                                        </a> 
499                                                    </p> 
500                                                </li> 
501                                            </ul> 
502                                        </div> 
503                                        <ul class="actions">                                     
504                                            <li> 
505                                                <form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}" method="post" class="BAAForm"> 
506                                                    <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
507                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>                                         
508                                                    <a  
509                                                        class="applyNowLink apply-now-button"  
510                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}"  
511                                                        data-button-name="apply-now-link"  
512                                                        data-product-name="${productName}" 
513
514                                                        ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()} 
515                                                        <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
516                                                    </a> 
517                                                </form> 
518                                            </li> 
519                                            <li> 
520                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
521                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
522                                                </a> 
523                                            </li> 
524                                        </ul> 
525                                    </div> 
526                                </div> 
527                                 
528                            </#list> 
529                             
530                        </div> 
531                    </div> 
532                </#if>  
533            </div> 
534            <script> 
535                var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]'; 
536                var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]'; 
537                 $(document).ready(function () { 
538                    var banker_code = "${bCode!''}"; 
539                    var tabs=$('.tab-nav'); 
540                    var slideDiv = $('.jn-tab-content.active');                    
541                    var screenWidthMobile = 768; 
542                    var screenWidth = window.innerWidth; 
543 
544                    if (tabs.length == 1) { 
545                        if ($(consumerSelector).length > 0) { 
546                            if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) { 
547                                $("nav.jn-primary-nav").hide(); 
548                                changeCardLayout(consumerSelector); 
549                                createMetaTag("consumer"); 
550                            } else { 
551                                hideHeroAndDisclaimer('business'); 
552                                showHeroAndDisclaimer('consumer'); 
553                                changeCardLayout(consumerSelector); 
554                                renumberFootnote("consumer"); 
555                                createMetaTag("consumer");  
556
557                        }  
558                        if ($(businessSelector).length > 0) { 
559                            $(businessSelector).addClass('active'); 
560                            hideHeroAndDisclaimer('consumer'); 
561                            showHeroAndDisclaimer('business'); 
562                            changeCardLayout(businessSelector); 
563                            renumberFootnote("business"); 
564                            createMetaTag("business");  
565
566
567                    if (tabs.length == 2) { 
568                        renumberFootnote("consumer"); 
569                        renumberFootnote("business"); 
570                        createMetaTag("consumer"); 
571                        if ($(consumerSelector + ' .jn-consumer-item').length < 3) { 
572                            changeCardLayout(consumerSelector); 
573
574                        if ($(businessSelector + ' .jn-consumer-item').length < 3) { 
575                            changeCardLayout(businessSelector); 
576
577                             
578                        var tabsNav = document.querySelectorAll('.tab-nav'); 
579                        togglePrimaryNav(tabsNav); 
580 
581                        if(window.location.href.indexOf('#business') > -1 ) { 
582                            $(consumerSelector).removeClass('active'); 
583                            $(businessSelector).addClass('active'); 
584                            $('#consumerTab').removeClass('active'); 
585                            $('#businessTab').addClass('active'); 
586                            hideHeroAndDisclaimer('consumer'); 
587                            showHeroAndDisclaimer('business'); 
588                            changeCardLayout(businessSelector); 
589                            renumberFootnote("business"); 
590                            createMetaTag("business"); 
591 
592                            $(tabs).click(function(){ 
593                                if ($(this).attr('id') === "consumerTab") { 
594                                    var newUrl = window.location.toString(); 
595                                    window.location = newUrl.replace(/#business/, '#consumer'); 
596
597                                if ($(this).attr('id') === "businessTab") { 
598                                    var url = window.location.toString(); 
599                                    window.location = url.replace(/#consumer/, '#business'); 
600
601                            }); 
602
603
604                     
605                }); 
606                // Primary Nav function 
607                 
608                function togglePrimaryNav(elem) { 
609                    for (var i = 0; i < elem.length; i++) { 
610                        elem[i].addEventListener("click", function(e) { 
611 
612                            var current = this, 
613                                allSections = document.querySelectorAll('[data-id]'), 
614                                section = document.querySelector("[data-id='"+ current.id +"']"); 
615 
616                            for (var a = 0; a < allSections.length; a++) { 
617                                allSections[a].classList.remove('active'); 
618
619                            for (var c = 0; c < elem.length; c++) { 
620                                if (current != elem[c]) { 
621                                    elem[c].classList.remove('active'); 
622                                } else { 
623                                    current.classList.add('active'); 
624                                    section.classList.add('active'); 
625                                    hideHeroAndDisclaimer('consumer'); 
626                                    hideHeroAndDisclaimer('business'); 
627                                    if(current.getAttribute('id') === "consumerTab"){ 
628                                        showHeroAndDisclaimer('consumer'); 
629                                    } else if(current.getAttribute('id') === "businessTab"){ 
630                                        showHeroAndDisclaimer('business'); 
631
632
633
634                            e.preventDefault(); 
635                        }); 
636
637
638 
639                function renumberFootnote(type) { 
640                    var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]'; 
641                    var disclaimerSelector = '.tier1-disclaimer-landing-' + type; 
642                    var heroSelector = '.tier1-hero-landing-' + type; 
643                    var numOfFootnote = $(disclaimerSelector + ' sup').length; 
644                    var showList = []; 
645                    var hideList=[]; 
646                    for (var i = 1; i <= numOfFootnote; i++) { 
647                    var cssClass="tag-" + i; 
648                    if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) { 
649                        showList.push(i);      
650                    } else { 
651                        hideList.push(i); 
652
653                    }  
654                    /* 
655                    for (var i = 1; i < showList.length + 1; i++) { 
656                        if(showList[i-1] != i) { 
657                            var className="tag-" + showList[i-1]; 
658                            $(heroSelector).find("." +  className).html(i); 
659                            // $(discriptionSelector).find("." +  className).html(i); 
660                            $(disclaimerSelector).find("." +  className).html(i); 
661
662
663                    */ 
664                    for (var i = 0; i <hideList.length; i++) { 
665                        var cname="tag-" + hideList[i]; 
666                        $(disclaimerSelector).find("." + cname).parent().hide(); 
667                    }    
668
669 
670                function changeCardLayout(cssSelector) { 
671                    var numOfCards = $(cssSelector + ' .jn-consumer-item').length; 
672                    if(numOfCards == 1) { 
673                        $(cssSelector).addClass('one-card'); 
674                    } else if (numOfCards == 2) { 
675                        $(cssSelector).addClass('two-card'); 
676                    }   
677
678                function hideHeroAndDisclaimer(type) { 
679                    try { 
680                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show'); 
681                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide'); 
682                    } catch (e) { 
683                        console.log(e); 
684
685 
686                    try { 
687                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show'); 
688                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');  
689                    } catch (e) { 
690                        console.log(e); 
691
692 
693
694                function showHeroAndDisclaimer(type) { 
695                    try { 
696                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('show'); 
697                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide'); 
698                    } catch (e) { 
699                        console.log(e); 
700
701                     
702                    try { 
703                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show'); 
704                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');  
705                    } catch (e) { 
706                        console.log(e); 
707
708 
709
710                function createMetaTag(type) { 
711                    var partnerName = "${partnerName!0}"; 
712                    var product_name = $('.jn-hero-container .jn-button').data('product-name'); 
713                    var metaDesc = ""; 
714                    if (type == "consumer") {     
715                        if(location.pathname.indexOf("11t1m") != -1) { 
716                            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." 
717                        } else {                                    
718                            if(product_name ==  "consumer-platinum2103") { 
719                                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."; 
720                            } else if(product_name ==  "real-rewards") { 
721                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase."; 
722                            } else if(product_name ==  "secured") { 
723                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
724                            } else if(product_name ==  "max-cash") { 
725                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select."; 
726
727
728 
729                    } else if (type == "business") { 
730                        if(product_name ==  "business-cashback") {               
731                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
732                        } else if(product_name ==  "business-real-rewards") { 
733                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on."; 
734                        } else if(product_name ==  "business-visa") { 
735                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
736                        } else if(product_name ==  "smart-business-rewards") { 
737                            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."; 
738
739
740                    var m = document.createElement('meta');  
741                    m.name = 'description';  
742                    m.content = metaDesc;  
743                    document.head.appendChild(m); 
744
745                function goToByScroll(id) { 
746                    var element = document.getElementById(id); 
747                    element.scrollIntoView(true); 
748
749                 
750            </script> 
751            <script> 
752                var reportingData = window.reportingData || {}; 
753                document.addEventListener('DOMContentLoaded', function() {                    
754                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
755                    var hostName = location.hostname;                                     
756                    function getDomainFromHostname(hostname) { 
757                        var parts = hostname.split('.'); 
758                        return parts.length === 3 ? parts[1] : parts[0]; 
759
760                    var domain = getDomainFromHostname(hostName); 
761                    var partnerName = "${partnerName!0}"; 
762                    var ameriprise = '${ameriprise?string("yes", "no")}'; 
763                    var locationCode = "${rLC!lc}"; 
764                    var eidAmp = ""; 
765                    var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img'); 
766                    for (var index = 0; index < heroCardImgs.length; index++) { 
767                        var heroCardImg = heroCardImgs[index]; 
768                        var heroCardSrc = heroCardImg.getAttribute("src"); 
769                        if(heroCardSrc != "") { 
770                            resizeImg(heroCardImg); 
771
772
773                    if (ameriprise == "yes") { 
774                        var bankercode_amp = '${bCode}'; 
775                        eidAmp = bankercode_amp.substring(3); 
776                        locationCode =""; 
777                        document.title = "Ameriprise Financial Credit Card Overview Page"; 
778                    } else { 
779                        document.title = partnerName + " Credit Card Index Page"; 
780
781                     
782                    var lc = '${lc!0}'; 
783 
784                    var regex = /\d+/g; 
785                    var bdNumber = "${bPhone!''}"; 
786                    var phoneNum = bdNumber.match(regex); 
787                    var areaCode = ""; 
788                    var exchangeCode = ""; 
789                    var num = ""; 
790                    if(phoneNum != null) { 
791                        phoneNum = phoneNum.join(""); 
792                        areaCode = phoneNum.substring(0,3); 
793                        exchangeCode = phoneNum.substring(3,6); 
794                        num = phoneNum.substring(6,10); 
795
796 
797                        /* update SiteCatalyst data object */ 
798                    reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
799                    reportingData.page_type = 'product';  
800                    reportingData.site_section = 'credit cards'; 
801                    reportingData.platform = 'microsite'; 
802                    reportingData.campaign_id = '${campaignId}'; 
803                    reportingData.location_code = '${rLC!0}'; 
804                    reportingData.partner_name = "${partnerName}"; 
805                    reportingData.product = 'All Cards'; 
806                    reportingData.text_to_apply_source = '${text_to_apply_source}'; 
807                    reportingData.visitor_type = 'prospect';         
808                    reportingData.Banker_id = '${boeid}'; 
809                    reportingData.Banker_code = '${bCode}'; 
810 
811                                                     
812                    /* SiteCatalyst  pageView tracking */ 
813                    AUI().ready(function() { 
814                        if (window.publisherFW) {                            
815                            window.publisherFW.publishEvent("pageView", reportingData); 
816
817                    });  
818 
819                                     
820                    $('.jn-button').removeAttr('disabled'); 
821                    $('.jn-button').removeClass('jn-disabled'); 
822 
823                    jQuery('.applyNowLink').on('click', function(e){ 
824                        $(this).closest('.BAAForm').submit(); 
825                        ga("send", { 
826                            hitType: "event", 
827                            eventAction: "ApplyNow", 
828                            eventCategory: "click", 
829                            eventLabel: "BottomButton" 
830                        }); 
831                        return false; 
832                    }); 
833                    jQuery(".BAAForm").on("submit", function(e){ 
834                        e.preventDefault();                         
835                        var xmlData; 
836                        if(ameriprise == "yes") { 
837                            xmlData = '<?xml version="1.0"?>'+ 
838                                "<prefillData>"+  
839                                "<versionNumber>1.0</versionNumber>"+  
840                                "<applicationData>"+  
841                                "<referral>" +  
842                                "<employeeId>" + eidAmp + "</employeeId>" + 
843                                "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+ 
844                                "<divisionNumber></divisionNumber>"+ 
845                                "</referral>" +  
846                                "<bankerInformation>"+  
847                                "<locationCode>" + locationCode + "</locationCode>"+ 
848                                "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
849                                "<employeeID>${boeid!0}</employeeID>"+ 
850                                "<name>" + 
851                                "<first>${bFName!'0'}</first>" + 
852                                "<last>${bLName!'0'}</last>" + 
853                                "</name>"+ 
854                                "<phone>"+ 
855                                "<areaCode>"+areaCode+"</areaCode>"+  
856                                "<exchange>"+exchangeCode+"</exchange>"+ 
857                                "<number>"+num+"</number>"+  
858                                "</phone>"+  
859                                "</bankerInformation>"+  
860                                "</applicationData>"+  
861                                "</prefillData>" 
862                        } else { 
863                            xmlData = '<?xml version="1.0"?>'+ 
864                                "<prefillData>"+  
865                                "<versionNumber>1.0</versionNumber>"+  
866                                "<applicationData>"+  
867                                "<bankerInformation>"+  
868                                "<locationCode>" + locationCode + "</locationCode>"+ 
869                                "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
870                                "<employeeID>${boeid!0}</employeeID>"+ 
871                                "<name>" + 
872                                "<first>${bFName!'0'}</first>" + 
873                                "<last>${bLName!'0'}</last>" + 
874                                "</name>"+ 
875                                "<phone>"+ 
876                                "<areaCode>"+areaCode+"</areaCode>"+  
877                                "<exchange>"+exchangeCode+"</exchange>"+ 
878                                "<number>"+num+"</number>"+  
879                                "</phone>"+  
880                                "</bankerInformation>"+  
881                                "</applicationData>"+  
882                                "</prefillData>" 
883
884                        $(this).children(".appDataBAA").val(xmlData); 
885                        var buttonName = $(this).find(".apply-now-button").data("button-name"); 
886                        var productName = $(this).find(".apply-now-button").data("product-name"); 
887                        /* SiteCatalyst  onClick tracking */ 
888                        reportingData.apply_button = buttonName; 
889                        reportingData.product = productName; 
890 
891                        if (window.publisherFW) {                            
892                            window.publisherFW.publishEvent("onClick", reportingData); 
893
894 
895                        var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}'; 
896                            /* CRC service call */ 
897                            Liferay.Service( 
898                                '/crc-utilities-portlet#crcremote/make-call', 
899
900                                    storedProcedure: 'crcDDCTextApplyLog', 
901                                    parameters: paramString 
902                                }, 
903                                function(obj){                                   
904
905                            ); 
906 
907                        this.submit();                   
908                    });                                                                                   
909                }); 
910                function resizeImg(img) { 
911                    img.addEventListener("load", function() { 
912                        var cardImgWidth = img.width; 
913                        var cardImgHeight = img.height; 
914                        if(cardImgWidth > cardImgHeight) { 
915                            img.style.width = "285px"; 
916                        } else { 
917                            img.style.width = "150px"; 
918
919                    }); 
920
921            </script>                    
922                 
923        </#if>  
924    </#if> 
925</#if> 
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843858" 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 "10153#10191#5843858" 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    <#if (fiCardsData?size > 0) > 
41        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
42     
43        <#if (cardProvider?size > 0)> 
44            <#-- This will be V for visa or M for mastercard. --> 
45            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
46        <#else> 
47            <script> 
48                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
49            </script> 
50        </#if> 
51 
52 
53        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
54            <div class="disclaimer" > 
55                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
56                    ${disclaimersVisa.getData()} 
57                </#if> 
58                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
59                    ${disclaimersMasterCard.getData()} 
60                </#if> 
61            </div> 
62        </div> 
63    </#if> 
64<#else> 
65    <script> 
66        console.log("No lc for disclaimer"); 
67    </script> 
68</#if> 
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843858" 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 "10153#10191#5843858" 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    <#if (fiCardsData?size > 0) > 
41        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
42     
43        <#if (cardProvider?size > 0)> 
44            <#-- This will be V for visa or M for mastercard. --> 
45            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
46        <#else> 
47            <script> 
48                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
49            </script> 
50        </#if> 
51 
52 
53        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
54            <div class="disclaimer" > 
55                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
56                    ${disclaimersVisa.getData()} 
57                </#if> 
58                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
59                    ${disclaimersMasterCard.getData()} 
60                </#if> 
61            </div> 
62        </div> 
63    </#if> 
64<#else> 
65    <script> 
66        console.log("No lc for disclaimer"); 
67    </script> 
68</#if> 
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843861" at line 6, 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 "10153#10191#5843861" at line 6, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
4<#assign url404 = '/error/404.html'> 
5 
6<#assign bCode= qstringmap["bankercode"]?first> 
7<#assign bCode = htmlUtil.escape(bCode)> 
8<#assign bCode = htmlUtil.escapeJS(bCode)> 
9 
10<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)> 
11<#list bData as b>      
12    <#assign lc = b.locationcode > 
13    <#assign rLC = b.reallocationcode > 
14    <#assign mappedLC = b.mappedLocationCode > 
15</#list>  
16 
17<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
18    <#assign ameriprise = true> 
19<#else> 
20    <#assign ameriprise = false> 
21</#if> 
22<#if mappedLC?has_content && !ameriprise> 
23    <#assign lc = mappedLC > 
24</#if> 
25 
26<#if lc?has_content> 
27 
28    <#assign prefix = "00000" > 
29    <#assign lcWithPrefix = prefix + lc > 
30    <#assign withPrefixLength = lcWithPrefix?length > 
31    <#assign startHere = withPrefixLength - 5> 
32    <#assign lc = lcWithPrefix?substring(startHere)> 
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
34    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
35 
36    <#assign clientProfile = clientProfileList?first> 
37    <#assign pbu = clientProfile.getPbu()> 
38    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>   
39    <#assign partnerName=clientProfile.getMarketingNameLong()> 
40    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
41    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
42    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
43    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
44        <#-- add protocal if missing  --> 
45        <#assign partnerUrl = 'https://' + partnerUrl> 
46    </#if> 
47    <footer class="footer bg-color-black text-color-white"> 
48        ${footerContent.getData()} 
49    </footer> 
50 
51    <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
52        <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
53        <style> 
54            #opt-out-button, 
55            .modal__btn.learn-more { 
56                background: #0C2074; 
57                border: 1px solid #0C2074; 
58                color: white; 
59                text-transform: uppercase; 
60                text-decoration: none; 
61                font-size: 16px; 
62                padding: 0.5rem 2rem; 
63                display: inline-block; 
64                border-radius: 0; 
65
66            #opt-out-button:hover, 
67            .modal__btn.learn-more:hover { 
68                color: white; 
69                border-color: #2C76AF !important; 
70                background-color: #2C76AF !important; 
71
72            .modal__btn.learn-more { 
73                background: white; 
74                border: 1px solid #0C2074; 
75                color: #0C2074; 
76
77            #opt-out-button[disabled="true"] { 
78                background-color: rgba(0,0,0,.15); 
79                color: rgba(0,0,0,.45); 
80                border-color: rgba(0,0,0,.25); 
81
82            #opt-out-button:hover[disabled="true"] { 
83                background-color: rgba(0,0,0,.15) !important; 
84                color: rgba(0,0,0,.45) !important; 
85                border-color: rgba(0,0,0,.25) !important; 
86
87            #opt-out-button:focus { 
88                outline-style: solid; 
89                outline-color: white; 
90                outline-offset: -3px; 
91                outline-width: 1px; 
92
93            .opt-out-link svg { 
94                width: 30px; 
95                height: 14px; 
96                width: auto; 
97                vertical-align: middle; 
98
99            .modal__overlay { 
100                position: fixed; 
101                top: 0; 
102                left: 0; 
103                right: 0; 
104                bottom: 0; 
105                background: rgba(0,0,0,0.6); 
106                display: flex; 
107                justify-content: center; 
108                align-items: center; 
109
110 
111            .modal__container { 
112                background-color: #fff; 
113                padding: 30px; 
114                max-width: 500px; 
115                max-height: 100vh; 
116                border-radius: 4px; 
117                overflow-y: auto; 
118                box-sizing: border-box; 
119
120 
121            .modal__header { 
122                display: flex; 
123                justify-content: space-between; 
124                align-items: center; 
125
126 
127            .modal__title { 
128                margin-top: 0; 
129                margin-bottom: 0; 
130                font-weight: 600; 
131                font-size: 20px; 
132                line-height: 1.25; 
133                color: #00449e; 
134                box-sizing: border-box; 
135
136 
137            .modal__close { 
138                background: transparent; 
139                border: 1px solid white; 
140                padding: 4px 8px; 
141
142            .modal__close:hover { 
143                border: 1px solid black; 
144
145 
146            .modal__header .modal__close:before { content: "\2715"; } 
147 
148            .modal__content { 
149                margin-top: 2rem; 
150                margin-bottom: 2rem; 
151                line-height: 1.5; 
152
153 
154            @keyframes mmfadeIn { 
155                from { opacity: 0; } 
156                to { opacity: 1; } 
157
158 
159            @keyframes mmfadeOut { 
160                from { opacity: 1; } 
161                to { opacity: 0; } 
162
163 
164            @keyframes mmslideIn { 
165                from { transform: translateY(15%); } 
166                to { transform: translateY(0); } 
167
168 
169            @keyframes mmslideOut { 
170                from { transform: translateY(0); } 
171                to { transform: translateY(-10%); } 
172
173 
174            .micromodal-slide { 
175                display: none; 
176
177 
178            .micromodal-slide.is-open { 
179                display: block; 
180
181 
182            .micromodal-slide[aria-hidden="false"] .modal__overlay { 
183                animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
184
185 
186            .micromodal-slide[aria-hidden="false"] .modal__container { 
187                animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
188
189 
190            .micromodal-slide[aria-hidden="true"] .modal__overlay { 
191                animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
192
193 
194            .micromodal-slide[aria-hidden="true"] .modal__container { 
195                animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
196
197 
198            .micromodal-slide .modal__container, 
199            .micromodal-slide .modal__overlay { 
200                will-change: transform; 
201
202        </style> 
203 
204        <div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
205        <div class="modal__overlay" tabindex="-1" data-micromodal-close> 
206            <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
207            <header class="modal__header"> 
208                <h2 class="modal__title" id="modal-1-title"> 
209                Your California privacy choices 
210                </h2> 
211                <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
212            </header> 
213            <div class="modal__content" id="modal-1-content"> 
214                <div id="message-no-cookie"> 
215                    <p> 
216                    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> 
217                     
218        <p>&nbsp;</p> 
219 
220        <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> 
221            </div> 
222            <div id="message-with-cookie"> 
223                <p>You have successfully opted-out.</p> 
224            </div> 
225            </div> 
226            <div class="modal__footer"> 
227                <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> 
228                <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
229            </div> 
230            </div> 
231        </div> 
232        </div> 
233    <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
234    <script> 
235        const fdicNode = document.querySelector('.footer .fdic');                          
236    </script> 
237    <#if url?contains("11t1m")> 
238        <script>        
239            document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright"); 
240            fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
241        </script> 
242    <#else> 
243        <script> 
244            document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright"); 
245            fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
246            var newNode = document.createElement("div");  
247            newNode.classList.add("member-agreement"); 
248            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>'; 
249            var parent = fdicNode.parentNode; 
250            parent.insertBefore(newNode, fdicNode); 
251        </script> 
252    </#if> 
253 
254    <#if partnerUrl?has_content> 
255        <script> 
256            document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>"; 
257        </script> 
258    </#if> 
259 
260    <script> 
261        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
262        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>'); 
263        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
264    </script> 
265    <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
266 
267    <script> 
268        window.getCookieDomain = function() { 
269            var hostname = window.location.hostname.split("."); 
270            return hostname && hostname.slice(hostname.length - 2).join("."); 
271
272        window.setToOptOut = function() { 
273            if (window.getCookie('privacy_optout')) { 
274                    document.getElementById('message-no-cookie').style.display = 'none'; 
275                    document.getElementById('message-with-cookie').style.display = 'block'; 
276                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
277                } else { 
278                    document.getElementById('message-no-cookie').style.display = 'block'; 
279                    document.getElementById('message-with-cookie').style.display = 'none'; 
280
281
282        window.getCookie = function(name) { 
283            var value = '; ' + document.cookie; 
284            var parts = value.split('; ' + name + '='); 
285            if (parts.length === 2) return parts.pop().split(';').shift(); 
286
287        window.californiaOptOut = function() { 
288            if (!window.getCookie('privacy_optout')) { 
289                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
290                try { 
291                if (window.CustomEvent) { 
292                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
293                } else { 
294                    var privacyOptoutEvent = document.createEvent('Event'); 
295                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
296                    window.dispatchEvent(privacyOptoutEvent); 
297
298                window.setToOptOut(); 
299                } catch (err) { 
300                console.error(err); 
301
302
303
304        MicroModal.init({ 
305            onShow: window.setToOptOut 
306        }); 
307        AUI().ready(function() { 
308            // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
309            const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
310            if(isBrowserGpcOptOut === true) { 
311            window.californiaOptOut(); 
312
313        }); 
314    </script> 
315    <!-- END CALIFORNIA OPT-OUT MODAL LOGIC --> 
316 
317</#if>