Uri: https%3A%2F%2Fbillets.tripdhumour.com%2Fatr%2F%3F%26locale%3Dfr-CA%26skin%3Damptrip%26fac%3DATR
Page name:
Edit | BackDate Scraped: 2026-05-30 01:10:42 -0400
Last Successful Refresh: 2026-05-30 01:10:42 -0400
Created: 2025-01-04 15:49:12 -0500
Updated: 2026-05-30 01:10:42 -0400
HTTP Response Code: 200
Html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, minimum-scale=1.0, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>
<script>
window.split_keyword = "go";
// Support for legacy URLs.
if (window.location.href.includes("#")) {
window.location.href = window.location.href.replace(
"/#/",
"/" + window.split_keyword + "/",
);
}
const baseHref = window.location.href.split(window.split_keyword)?.[0];
const baseEl = document.createElement("base");
baseEl.setAttribute("href", baseHref);
document.head.appendChild(baseEl);
</script>
<script>
async function hashContent(content) {
const data = new TextEncoder().encode(content);
const hashBuffer = await crypto.subtle.digest("SHA-384", data);
return [...new Uint8Array(hashBuffer)]
.map((b) => b.toString(16).padStart(2, "0"))
.join("");
}
function resolveUrl(src) {
return src?.startsWith("http") ? src : new URL(src, location.href).href;
}
async function reportMismatch({ src, expectedHash, actualHash }) {
const env = "production";
const reportUrl =
env === "production"
? "https://reports.outbox.com/report/sri"
: "https://reports-test.outbox.com/report/sri";
await fetch(reportUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
type: "sri-violation",
app_name: "es5",
expected_hash: expectedHash,
actual_hash: actualHash,
user_agent: navigator.userAgent,
url: window.location.href,
body: {
document_url: window.location.href,
blocked_url: src,
source_file: resolveUrl(src),
},
}),
});
}
async function verifyScriptIntegrity({ src, expectedHash }) {
try {
// Use cache without revalidation
const response = await fetch(src, { cache: "force-cache" });
if (!response.ok)
throw new Error(
`Failed to fetch: ${src} (HTTP ${response.status})`,
);
const content = await response.text();
const actualHash = await hashContent(content);
const env = "production";
if (
actualHash !== expectedHash &&
env !== "development" &&
env !== "dev-local"
) {
console.warn(
`Hash mismatch for ${src}:\nExpected: ${expectedHash}\nActual: ${actualHash}`,
);
// Report disabled on Playwright and Cypress
if (
!window.PLAYWRIGHT &&
"<%= process.env.PLAYWRIGHT %>" !== "true" &&
!window.Cypress
) {
await reportMismatch({ src, expectedHash, actualHash });
}
}
} catch (err) {
console.error(`Error verifying integrity for ${src}:`, err);
}
}
function loadScript(src, isDefer) {
return new Promise((resolve) => {
const script = document.createElement("script");
script.src = src;
script.defer = isDefer;
script.onload = resolve;
script.onerror = resolve;
document.head.appendChild(script);
});
}
(async function () {
// TLAScript.js must run and set window.TLA_from_config before any
// other script (or the inline TLA block below) reads window.TLA.
// Dynamically-injected scripts are always async, so we load it on
// its own and await it before loading the rest.
const tlaScript = {
src: "js/TLAScript.js?v=9.52.6",
expectedHash: "8c0302cd269689c7fb6ed201c2914fdad9cef5ee1a5fd4dd2f8e36a98c71d9d72c4c3fc06845dd74492f97336eacdb53",
defer: false,
};
const scriptsConfig = [
{
src: "js/polyfills.js?v=9.52.6",
expectedHash: "da2c729ccc31712021b55ea84b5dedc83c21d33791c03e01c2afbf78da7208fd63253bc902056517984d8d38b9bba294",
defer: true,
},
{
src: "js/consolidateQueryParams.js?v=9.52.6",
expectedHash: "adc56c5eb13143fc5f016f9763c4b41d46fc3faf8550050baae2f285e2367b2566e79fc46cb02b3882fee9572d9b7ba1",
defer: false,
},
{
src: "js/apiPreloader.js?v=9.52.6",
expectedHash: "474b2b761650c3989810e640a35a1647ca0548c1e953427a50ea44c81da4132d0c161df75c05f13fd9d956222b3343d7",
defer: true,
},
{
src: "js/loadSkin.js?v=9.52.6",
expectedHash: "b96f3a31a0d237b056f7ccb36e43c6e5b3a3ae09ea5fb6434c98f7d06f1f5e1f0e91ca483c318de991c6be5269f27583",
defer: true,
},
{
src: "js/vendor.js?v=9.52.6",
expectedHash: "",
defer: true,
},
{
src: "js/bundle.js?v=9.52.6",
expectedHash: "94be62b5b1f0a8d01930bb3fb9022be9def023d288e40f9fadcbb7cecf5aa295673e8622d0a77b3e6a7d909b8fea054c",
defer: true,
},
];
await loadScript(tlaScript.src, tlaScript.defer);
window.TLA_from_url = getParameterByName("TLA");
window.TLA_from_config =
typeof window.TLA_from_config != "undefined"
? window.TLA_from_config
: null;
window.TLA = (
window.TLA_from_url ||
window.TLA_from_config ||
"default"
).toLowerCase();
await Promise.all(
scriptsConfig.map(({ src, defer }) => loadScript(src, defer)),
);
// Verify after scripts are loaded to hit cache
Promise.all(
[tlaScript, ...scriptsConfig].map(verifyScriptIntegrity),
).catch(console.error);
})();
</script>
<script type="text/javascript">
window.dataLayer = window.dataLayer || [];
</script>
<script>
function loadjscssfile(filename, filetype) {
if (filetype == "js") {
// if filename is a external JavaScript file
var fileref = document.createElement("script");
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
} else if (filetype == "css") {
// if filename is an external CSS file
var fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
}
if (typeof fileref != "undefined")
document.getElementsByTagName("head")[0].appendChild(fileref);
}
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return "";
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
</script>
<script type="text/javascript">
let families = ["Roboto:300,400,500,700"];
if ("%MOCK%" === "true") {
// This is required to circumvent CORS errors when fetching fonts from fonts.gstatic.com on Playwright's Firefox browser in mock mode.
families.push(
"Be+Vietnam+Pro:100,200,300,400,500,600,700,800,900,100italic,200italic,300italic,400italic,500italic,600italic,700italic,800italic,900italic",
);
}
// This preloads all woff2 font files for each of the above weights, rather than fetching
// them dynamically, as we do with @import url(), e.g. in css/vendor/eventshopper/_fonts.scss.
WebFontConfig = { google: { families } };
</script>
<script
async
src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"
></script>
<style id="antiClickjack">
body {
display: none !important;
}
</style>
<script type="text/javascript">
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>
<!--[if lt IE 9]>
<script>
var isIeOld = true;
</script>
<![endif]-->
<title></title>
<style type="text/css" media="screen">
html,
body {
font-size: 14px;
width: 100%;
height: 100%;
margin: 0;
}
.top-level-spinner {
width: 100%;
height: 100%;
position: absolute;
background-color: white;
z-index: 100;
}
.top-level-spinner > .top-level-spinner__img {
width: 64px;
height: 64px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>
<script type="module" crossorigin src="./js/main.vEtVJqu1.js"></script>
<link rel="modulepreload" crossorigin href="./js/consolidateQueryParams.js">
<link rel="modulepreload" crossorigin href="./js/loadSkinUtil.ZM3V0qg0.js">
<link rel="modulepreload" crossorigin href="./js/nivo.C9XwLknu.js">
<link rel="modulepreload" crossorigin href="./js/Tools.B1_zJlFx.js">
<link rel="modulepreload" crossorigin href="./js/loadSkin.js">
<link rel="modulepreload" crossorigin href="./js/LookupSupportedLocales.yiA4EwsW.js">
<link rel="modulepreload" crossorigin href="./js/polyfills.js">
<link rel="modulepreload" crossorigin href="./js/index.B-RbEckT.js">
<link rel="modulepreload" crossorigin href="./js/apiPreloader.js">
<link rel="modulepreload" crossorigin href="./js/bundle.js">
</head>
<body>
<noscript>
<div class="container">
<div class="well well-lg" style="margin-top: 100px">
<h1>
<span
class="glyphicon glyphicon-exclamation-sign"
aria-hidden="true"
></span>
JavaScript is required by EventShopper.
</h1>
<p>
<strong
>Please
<a
href="https://www.google.com/search?q=enable+javascript"
target="_blank"
rel="noopener noreferrer"
>enable JavaScript in your browser</a
>.</strong
>
</p>
</div>
</div>
</noscript>
<div id="top-level-spinner" class="top-level-spinner">
<img
class="top-level-spinner__img"
id="spinner-img"
alt="Application is loading"
/>
</div>
<script>
// Set spinner image source after base tag is established
document.getElementById("spinner-img").src = "img/spinner.gif";
</script>
<div id="main"></div>
<script>
// Use this variable to invalidate cache throughout the application.
// window.TLA / TLA_from_url / TLA_from_config are resolved earlier in
// the async loader in <head>, after TLAScript.js has finished loading.
window.CACHE_BUST = "9.52.6";
</script>
<script>
// Because visa checkout's sdk has the nasty habit of defining enumerable functions
// on Array.prototype and we don't want for (const i in array) to iterate over "contains"
Object.defineProperty(Array.prototype, "contains", {
value: Array.prototype.includes,
enumerable: false,
});
</script>
<script>
if ("production" === "production") {
(function () {
function loadScript(url) {
var e = document.createElement("script");
e.src = url;
document.body.appendChild(e);
}
// Do not load the app on incompatible browsers
if (
/\bMSIE\s?(6|7|8|9|10)\b/i.test(navigator.userAgent) ||
(!!window.MSInputMethodContext && !!document.documentMode)
) {
const locale = getParameterByName("locale") || "en-US";
let message;
if (locale.indexOf("en") > -1) {
message =
" <h1>" +
' <Glyphicon glyph="exclamation-sign" />' +
" This app requires a modern browser." +
" </h1>" +
" <p>" +
" <strong>" +
' Please install a modern browser like <a href="https://www.firefox.com" target="_blank" rel="noopener noreferrer">Firefox </a>' +
' or <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Chrome</a>.' +
" </strong>" +
" </p>";
}
if (locale.indexOf("fr") > -1) {
message =
" <h1>" +
' <Glyphicon glyph="exclamation-sign" />' +
" Cette app nécessite un navigateur moderne." +
" </h1>" +
" <p>" +
" <strong>" +
' Veuillez installer un navigateur moderne comme <a href="https://www.firefox.com" target="_blank" rel="noopener noreferrer">Firefox </a>' +
' ou <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Chrome</a>.' +
" </strong>" +
" </p>";
}
if (locale.indexOf("es") > -1) {
message =
" <h1>" +
' <Glyphicon glyph="exclamation-sign" />' +
" Esta aplicación requiere un navegador moderno." +
" </h1>" +
" <p>" +
" <strong>" +
' Por favor, instale un navegador moderno como <a href="https://www.firefox.com" target="_blank" rel="noopener noreferrer">Firefox </a>' +
' o <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Chrome</a>.' +
" </strong>" +
" </p>";
}
document.body.innerHTML =
'<div style="margin:100px auto 0 auto; max-width: 600px;" class="well well-lg" data-reactid=".0.0.0.0">' +
message +
"</div>";
return;
}
// See https://browser-update.org/ for details
// Notify recommended set of browsers and adjust it automatically over time:If a browser is no longer supported by the vendor or has security vulnerabilities, it will be added to the set.
var $buoop = {
vs: { f: 38, o: 31, s: 8, c: 31 },
text: "We noticed that your web browser (%s) is <b>out of date</b>. <a%s>Please update your browser</a> for more security and the best ticketing experience.",
reminder: 0,
reminderClosed: 24,
};
function $buo_f() {
loadScript("//browser-update.org/update.min.js");
}
try {
document.addEventListener("DOMContentLoaded", $buo_f, false);
} catch (e) {
window.attachEvent("onload", $buo_f);
}
})();
}
</script>
</body>
</html>