add reference link to read

This commit is contained in:
Antoine 2020-07-19 23:55:41 +02:00
parent 314e176462
commit f9b1f928d8
26 changed files with 4238 additions and 0 deletions

3
.gitignore vendored
View File

@ -2,8 +2,11 @@
bin/* bin/*
doc/* doc/*
busybox/* busybox/*
# Except this file # Except this file
!.gitkeep !.gitkeep
!doc/Creating_containers-Part_1.html
!doc/Creating containers - Part 1_files/
*.o *.o

View File

@ -0,0 +1,423 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
/**
* Collection of methods for sending analytics events to Archive.org's analytics server.
*
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
*
* @see analytics.md
*
* @type {Object}
*/
window.archive_analytics = (function defineArchiveAnalytics() {
// keep orignal Date object so as not to be affected by wayback's
// hijacking global Date object
var Date = window.Date;
var ARCHIVE_ANALYTICS_VERSION = 2;
var DEFAULT_SERVICE = 'ao_2';
var startTime = new Date();
/**
* @return {Boolean}
*/
function isPerformanceTimingApiSupported() {
return 'performance' in window && 'timing' in window.performance;
}
/**
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
* the current time.
*
* Uses the Performance API or a fallback value if it's not available.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number}
*/
function getLoadTime() {
var start;
if (isPerformanceTimingApiSupported())
start = window.performance.timing.domLoading;
else
start = startTime.getTime();
return new Date().getTime() - start;
}
/**
* Determines how many milliseconds elapsed between the user navigating to the page and
* the current time.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number|null} null if the browser doesn't support the Performance API
*/
function getNavToDoneTime() {
if (!isPerformanceTimingApiSupported())
return null;
return new Date().getTime() - window.performance.timing.navigationStart;
}
/**
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
* the unit.
*
* @param {String} original value to modify, with a unit
* @param {Function} doOperation accepts one Number parameter, returns a Number
* @returns {String}
*/
function computeWithUnit(original, doOperation) {
var number = parseFloat(original, 10);
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
return doOperation(number) + unit;
}
/**
* Computes the default font size of the browser.
*
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
*/
function getDefaultFontSize() {
var fontSizeStr;
if (!('getComputedStyle' in window))
return null;
var style = window.getComputedStyle(document.documentElement);
if (!style)
return null;
fontSizeStr = style.fontSize;
// Don't modify the value if tracking book reader.
if (document.documentElement.classList.contains('BookReaderRoot'))
return fontSizeStr;
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
// Undo the 62.5% size applied in the Bootstrap CSS.
return number * 1.6;
});
}
/**
* Get the URL parameters for a given Location
* @param {Location}
* @return {Object} The URL parameters
*/
function getParams(location) {
if (!location) location = window.location;
var vars;
var i;
var pair;
var params = {};
var query = location.search;
if (!query) return params;
vars = query.substring(1).split('&');
for (i = 0; i < vars.length; i++) {
pair = vars[i].split('=');
params[pair[0]] = decodeURIComponent(pair[1]);
}
return params;
}
return {
/**
* @type {String|null}
*/
service: null,
/**
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
* sent).
*
* @type {Object}
*/
values: {},
/**
* Sends an analytics ping, preferably using navigator.sendBeacon()
* @param {Object} values
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
*/
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
if (typeof window.navigator !== 'undefined' && typeof window.navigator.sendBeacon !== 'undefined')
this.send_ping_via_beacon(values);
else
this.send_ping_via_image(values);
},
/**
* Sends a ping via Beacon API
* NOTE: Assumes window.navigator.sendBeacon exists
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_beacon: function send_ping_via_beacon(values) {
var url = this.generate_tracking_url(values || {});
window.navigator.sendBeacon(url);
},
/**
* Sends a ping via Image object
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_image: function send_ping_via_image(values) {
var url = this.generate_tracking_url(values || {});
var loadtime_img = new Image(1, 1);
loadtime_img.src = url;
},
/**
* Construct complete tracking URL containing payload
* @param {Object} params Tracking parameters to pass
* @return {String} URL to use for tracking call
*/
generate_tracking_url: function generate_tracking_url(params) {
var baseUrl = '//analytics.archive.org/0.gif';
var keys;
var outputParams = params;
var outputParamsArray = [];
outputParams.service = outputParams.service || this.service || DEFAULT_SERVICE;
// Build array of querystring parameters
keys = Object.keys(outputParams);
keys.forEach(function keyIteration(key) {
outputParamsArray.push(encodeURIComponent(key) + '=' + encodeURIComponent(outputParams[key]));
});
outputParamsArray.push('version=' + ARCHIVE_ANALYTICS_VERSION);
outputParamsArray.push('count=' + (keys.length + 2)); // Include `version` and `count` in count
return baseUrl + '?' + outputParamsArray.join('&');
},
/**
* @param {int} page Page number
*/
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
var additionalValues = { ev: page };
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch', location.pathname, additionalValues);
},
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
var additionalValues = {};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch_base', location.pathname, additionalValues);
},
/**
* @param {Object} [options]
* @param {String} [options.mediaType]
* @param {String} [options.mediaLanguage]
* @param {String} [options.page] The path portion of the page URL
*/
send_pageview: function send_pageview(options) {
var settings = options || {};
var defaultFontSize;
var loadTime = getLoadTime();
var mediaType = settings.mediaType;
var primaryCollection = settings.primaryCollection;
var page = settings.page;
var navToDoneTime = getNavToDoneTime();
/**
* @return {String}
*/
function get_locale() {
if (navigator) {
if (navigator.language)
return navigator.language;
else if (navigator.browserLanguage)
return navigator.browserLanguage;
else if (navigator.systemLanguage)
return navigator.systemLanguage;
else if (navigator.userLanguage)
return navigator.userLanguage;
}
return '';
}
defaultFontSize = getDefaultFontSize();
// Set field values
this.values.kind = 'pageview';
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
this.values.locale = get_locale();
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
if (loadTime)
this.values.loadtime = loadTime;
if (navToDoneTime)
this.values.nav_to_done_ms = navToDoneTime;
/* START CUSTOM DIMENSIONS */
if (defaultFontSize)
this.values.ga_cd1 = defaultFontSize;
if ('devicePixelRatio' in window)
this.values.ga_cd2 = window.devicePixelRatio;
if (mediaType)
this.values.ga_cd3 = mediaType;
if (settings.mediaLanguage) {
this.values.ga_cd4 = settings.mediaLanguage;
}
if (primaryCollection) {
this.values.ga_cd5 = primaryCollection;
}
/* END CUSTOM DIMENSIONS */
if (page)
this.values.page = page;
this.send_ping(this.values);
},
/**
* Sends a tracking "Event".
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event: function send_event(
category,
action,
label,
additionalEventParams
) {
if (!label) label = window.location.pathname;
if (!additionalEventParams) additionalEventParams = {};
if (additionalEventParams.mediaLanguage) {
additionalEventParams.ga_cd4 = additionalEventParams.mediaLanguage;
delete additionalEventParams.mediaLanguage;
}
var eventParams = Object.assign(
{
kind: 'event',
ec: category,
ea: action,
el: label,
cache_bust: Math.random(),
},
additionalEventParams
);
this.send_ping(eventParams);
},
/**
* @param {Object} options see this.send_pageview options
*/
send_pageview_on_load: function send_pageview_on_load(options) {
var self = this;
window.addEventListener('load', function send_pageview_with_options() {
self.send_pageview(options);
});
},
/**
* Handles tracking events passed in URL.
* Assumes category and action values are separated by a "|" character.
* NOTE: Uses the unsampled analytics property. Watch out for future high click links!
* @param {Location}
*/
process_url_events: function process_url_events(location) {
var eventValues;
var actionValue;
var eventValue = getParams(location).iax;
if (!eventValue) return;
eventValues = eventValue.split('|');
actionValue = eventValues.length >= 1 ? eventValues[1] : '';
this.send_event(
eventValues[0],
actionValue,
window.location.pathname,
{ service: 'ao_no_sampling' }
);
},
/**
* Attaches handlers for event tracking.
*
* To enable click tracking for a link, add a `data-event-click-tracking`
* attribute containing the Google Analytics Event Category and Action, separated
* by a vertical pipe (|).
* e.g. `<a href="foobar" data-event-click-tracking="TopNav|FooBar">`
*
* To enable form submit tracking, add a `data-event-form-tracking` attribute
* to the `form` tag.
* e.g. `<form data-event-form-tracking="TopNav|SearchForm" method="GET">`
*
* Additional tracking options can be added via a `data-event-tracking-options`
* parameter. This parameter, if included, should be a JSON string of the parameters.
* Valid parameters are:
* - service {string}: Corresponds to the Google Analytics property data values flow into
*/
set_up_event_tracking: function set_up_event_tracking() {
var self = this;
var clickTrackingAttributeName = 'event-click-tracking';
var formTrackingAttributeName = 'event-form-tracking';
var trackingOptionsAttributeName = 'event-tracking-options';
function makeActionHandler(attributeName) {
return function actionHandler(event) {
var $currentTarget;
var categoryAction;
var categoryActionParts;
var options;
var submitFormFunction;
$currentTarget = $(event.currentTarget);
if (!$currentTarget) return;
categoryAction = $currentTarget.data(attributeName);
if (!categoryAction) return;
categoryActionParts = categoryAction.split('|');
options = $currentTarget.data(trackingOptionsAttributeName) || {}; // Converts to JSON
self.send_event(
categoryActionParts[0],
categoryActionParts[1],
window.location.pathname,
options.service ? { service: options.service } : {}
);
};
}
$(document).on(
'click',
'[data-' + clickTrackingAttributeName + ']',
makeActionHandler(clickTrackingAttributeName)
);
$(document).on(
'submit',
'form[data-' + formTrackingAttributeName + ']',
makeActionHandler(formTrackingAttributeName)
);
},
/**
* @returns {Object[]}
*/
get_data_packets: function get_data_packets() {
return [this.values];
},
};
}());
// @license-end

View File

@ -0,0 +1,470 @@
@import 'record.css'; /* for SPN1 */
#wm-ipp-base {
min-height:65px;
padding:0;
margin:0;
border:none;
background:none transparent;
}
#wm-ipp {
z-index: 2147483640;
}
#wm-ipp, #wm-ipp * {
font-family:Lucida Grande, Helvetica, Arial, sans-serif;
font-size:12px;
line-height:1.2;
letter-spacing:0;
width:auto;
height:auto;
max-width:none;
max-height:none;
min-width:0 !important;
min-height:0;
outline:none;
float:none;
text-align:left;
border:none;
color: #000;
text-indent: 0;
position: initial;
background: none;
}
#wm-ipp div, #wm-ipp canvas {
display: block;
}
#wm-ipp div, #wm-ipp tr, #wm-ipp td, #wm-ipp a, #wm-ipp form {
padding:0;
margin:0;
border:none;
border-radius:0;
background-color:transparent;
background-image:none;
/*z-index:2147483640;*/
height:auto;
}
#wm-ipp table {
border:none;
border-collapse:collapse;
margin:0;
padding:0;
width:auto;
font-size:inherit;
}
#wm-ipp form input {
padding:1px !important;
height:auto;
display:inline;
margin:0;
color: #000;
background: none #fff;
border: 1px solid #666;
}
#wm-ipp form input[type=submit] {
padding:0 8px !important;
margin:1px 0 1px 5px !important;
width:auto !important;
border: 1px solid #000 !important;
background: #fff !important;
color: #000 !important;
}
#wm-ipp a {
display: inline;
}
#wm-ipp a:hover{
text-decoration:underline;
}
#wm-ipp a.wm-btn:hover {
text-decoration:none;
color:#ff0 !important;
}
#wm-ipp a.wm-btn:hover span {
color:#ff0 !important;
}
#wm-ipp #wm-ipp-inside {
margin: 0 6px;
border:5px solid #000;
border-top:none;
background-color:rgba(255,255,255,0.9);
-moz-box-shadow:1px 1px 4px #333;
-webkit-box-shadow:1px 1px 4px #333;
box-shadow:1px 1px 4px #333;
border-radius:0 0 8px 8px;
}
/* selectors are intentionally verbose to ensure priority */
#wm-ipp #wm-logo {
padding:0 10px;
vertical-align:middle;
min-width:110px;
width:15%;
}
#wm-ipp table tr::before, #wm-ipp table tr::after {
margin: 0;
height: auto;
}
#wm-ipp table.c {
vertical-align:top;
margin-left: 4px;
}
#wm-ipp table.c td {
border:none !important;
}
#wm-ipp .c td.u {
padding:3px 0 !important;
text-align:center;
}
#wm-ipp .c td.n {
padding:0 0 0 5px !important;
vertical-align: bottom;
}
#wm-ipp .c td.n a {
text-decoration:none;
color:#33f;
font-weight:bold;
}
#wm-ipp .c td.n td.b {
padding:0 6px 0 0 !important;
text-align:right !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .c td.n tr.y td.b {
padding:0 6px 2px 0 !important;
}
#wm-ipp .c td.n td.c {
background:#000;
color:#ff0;
font-weight:bold;
padding:0 !important;
text-align:center;
}
#wm-ipp.hi .c td.n td.c {
color:#ec008c;
}
#wm-ipp .c td.n td.f {
padding:0 0 0 6px !important;
text-align:left !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .c td.n tr.m td {
text-transform:uppercase;
white-space:nowrap;
padding:2px 0;
}
#wm-ipp .c td.s {
padding:0 5px 0 0 !important;
text-align:center;
vertical-align:bottom;
}
#wm-ipp #wm-nav-captures {
white-space: nowrap;
}
#wm-ipp .c td.s a.t {
color:#33f;
font-weight:bold;
line-height: 1.8;
}
#wm-ipp .c td.s div.r {
color: #666;
font-size:9px;
white-space:nowrap;
}
#wm-ipp .c td.k {
vertical-align:bottom;
padding-bottom:2px;
}
#wm-ipp .c td.s {
padding:0 5px 2px 0 !important;
}
#wm-ipp td#displayMonthEl {
padding: 2px 0 !important;
}
#wm-ipp td#displayYearEl {
padding: 0 0 2px 0 !important;
}
div#wm-ipp-sparkline {
position:relative;/* for positioning markers */
white-space:nowrap;
background-color:#fff;
cursor:pointer;
line-height:0.9;
}
#sparklineImgId, #wm-sparkline-canvas {
position:relative;
z-index:9012;
max-width:none;
}
#wm-ipp-sparkline div.yt {
position:absolute;
z-index:9010 !important;
background-color:#ff0 !important;
top: 0;
}
#wm-ipp-sparkline div.mt {
position:absolute;
z-index:9013 !important;
background-color:#ec008c !important;
top: 0;
}
#wm-ipp .r {
position:relative;
}
#wm-ipp .r a {
color:#33f;
border:none;
position:relative;
background-color:transparent;
background-repeat:no-repeat !important;
background-position:100% 100% !important;
text-decoration: none;
}
#wm-ipp #wm-capinfo .c-logo {
display:block;
float:left;
margin-right:3px;
width:90px;
min-height:90px;
max-height: 290px;
border-radius:45px;
overflow:hidden;
background-position:50%;
background-size:auto 90px;
box-shadow: 0 0 2px 2px rgba(208,208,208,128) inset;
}
#wm-ipp #wm-capinfo .c-logo span {
display:inline-block;
}
#wm-ipp #wm-capinfo .c-logo img {
height:90px;
position:relative;
left:-50%;
}
#wm-ipp #wm-capinfo .wm-title {
font-size:130%;
}
#wm-ipp #wm-capinfo a.wm-selector {
display:inline-block;
color: #aaa;
text-decoration:none !important;
padding: 2px 8px;
}
#wm-ipp #wm-capinfo a.wm-selector.selected {
background-color:#666;
}
#wm-ipp #wm-capinfo a.wm-selector:hover {
color: #fff;
}
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-collected-by,
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-timestamps {
display: none;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content {
background-color:#ff0;
padding:5px;
font-size:14px;
text-align:center;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content * {
font-size:14px;
text-align:center;
}
#wm-ipp #wm-expand {
right: 1px;
bottom: -1px;
color: #ffffff;
background-color: #666 !important;
padding:0 5px 0 3px !important;
border-radius: 3px 3px 0 0 !important;
}
#wm-ipp #wm-expand span {
color: #ffffff;
}
#wm-ipp #wm-expand #wm-expand-icon {
display: inline-block;
transition: transform 0.5s;
transform-origin: 50% 45%;
}
#wm-ipp #wm-expand.wm-open #wm-expand-icon {
transform: rotate(180deg);
}
#wm-ipp #wmtb {
text-align:right;
}
#wm-ipp #wmtb #wmtbURL {
width: calc(100% - 45px);
}
#wm-ipp #wm-graph-anchor {
border-right:1px solid #ccc;
}
/* time coherence */
html.wb-highlight {
box-shadow: inset 0 0 0 3px #a50e3a !important;
}
.wb-highlight {
outline: 3px solid #a50e3a !important;
}
@media (min-width:946px) {
#wm-ipp #wm-graph-anchor {
display:block !important;
}
}
@media (max-width:945px) {
#wm-ipp #wm-graph-anchor {
display:none !important;
}
#wm-ipp table.c {
width: 85%;
width: calc(100% - 131px);
}
}
@media (max-width:1096px) {
#wm-logo {
display:none !important;
}
}
#wm-btns {
white-space: nowrap;
}
#wm-btns>#wm-save-snapshot-open {
margin-right: 7px;
top: -6px;
}
#wm-btns>#wm-sign-in {
box-sizing: content-box;
display: none;
margin-right: 7px;
top: -8px;
/*
round border around sign in button
*/
border: 2px #000 solid;
border-radius: 14px;
padding-right: 2px;
padding-bottom: 2px;
width: 11px;
height: 11px;
}
#wm-btns>#wm-sign-in>.iconochive-person {
font-size: 12.5px;
}
#wm-save-snapshot-open > .iconochive-web {
color:#000;
font-size:160%;
}
#wm-ipp #wm-share {
display: flex;
align-items: flex-end;
justify-content: space-between;
}
#wm-share > #wm-screenshot {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-screenshot > .iconochive-image {
color:#000;
font-size:160%;
}
#wm-btns>#wm-save-snapshot-in-progress {
display: none;
font-size:160%;
opacity: 0.5;
position: relative;
margin-right: 7px;
top: -5px;
}
#wm-btns>#wm-save-snapshot-success {
display: none;
color: green;
position: relative;
top: -7px;
}
#wm-btns>#wm-save-snapshot-fail {
display: none;
color: red;
position: relative;
top: -7px;
}
.wm-icon-screen-shot {
background: url("../images/web-screenshot.svg") no-repeat !important;
background-size: contain !important;
width: 22px !important;
height: 19px !important;
display: inline-block;
}
#donato #donato-base {
height: 100%;
}
body.wm-modal {
height: auto !important;
overflow: hidden !important;
}
#donato #donato-base {
width: 100%;
height: 100%;
position: absolute;
z-index: 2147483639;
}
body.wm-modal #donato #donato-base {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 2147483640;
}
.wb-autocomplete-suggestions {
font-family: Lucida Grande, Helvetica, Arial, sans-serif;
font-size: 12px;
text-align: left;
cursor: default;
border: 1px solid #ccc;
border-top: 0;
background: #fff;
box-shadow: -1px 1px 3px rgba(0,0,0,.1);
position: absolute;
display: none;
z-index: 2147483647;
max-height: 254px;
overflow: hidden;
overflow-y: auto;
box-sizing: border-box;
}
.wb-autocomplete-suggestion {
position: relative;
padding: 0 .6em;
line-height: 23px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 1.02em;
color: #333;
}
.wb-autocomplete-suggestion b {
font-weight: bold;
}
.wb-autocomplete-suggestion.selected {
background: #f0f0f0;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,40 @@
@font-face {
font-family: 'PT Sans';
font-style: italic;
font-weight: 400;
src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://web.archive.org/web/20191223015732im_/https://fonts.gstatic.com/s/ptsans/v11/jizYRExUiTo99u79D0e0x8mN.ttf) format('truetype');
}
@font-face {
font-family: 'PT Sans';
font-style: normal;
font-weight: 400;
src: local('PT Sans'), local('PTSans-Regular'), url(http://web.archive.org/web/20191223015732im_/https://fonts.gstatic.com/s/ptsans/v11/jizaRExUiTo99u79D0KEwA.ttf) format('truetype');
}
@font-face {
font-family: 'PT Sans';
font-style: normal;
font-weight: 700;
src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://web.archive.org/web/20191223015732im_/https://fonts.gstatic.com/s/ptsans/v11/jizfRExUiTo99u79B_mh0O6tKA.ttf) format('truetype');
}
/*
FILE ARCHIVED ON 01:57:32 Dec 23, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 21:09:16 Jun 24, 2020.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
CDXLines.iter: 85.235 (4)
exclusion.robots.policy: 0.114
PetaboxLoader3.datanode: 155.163 (5)
PetaboxLoader3.resolve: 132.242
load_resource: 195.693
RedisCDXSource: 9.849
exclusion.robots: 0.122
LoadShardBlock: 350.806 (4)
esindex: 0.01
captures_list: 1216.032
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><style>body {transition: opacity ease-in 0.2s; }
body[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; }
</style><title>Donate</title><style>body{margin:0}</style>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="donate_data/jquery-1.js"></script>
<script src="donate_data/polyfill.js"></script>
<script src="donate_data/ie-dom-node-remove-polyfill.js"></script>
<script src="donate_data/analytics.js"></script>
<script src="donate_data/webcomponents-bundle.js" type="text/javascript"></script>
<script src="donate_data/more-facets.js" type="text/javascript"></script>
<script src="donate_data/radio-player-controller.js" type="text/javascript"></script>
</head>
<body class="js-ia-iframe" style="margin:0">
<meta property="braintree_token" content="production_w3jccm3z_pqd7hz44swp6zvvw">
<meta property="environment" content="production">
<meta property="venmo_id" content="2878003111190856236">
</body></html>

View File

@ -0,0 +1,423 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
/**
* Collection of methods for sending analytics events to Archive.org's analytics server.
*
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
*
* @see analytics.md
*
* @type {Object}
*/
window.archive_analytics = (function defineArchiveAnalytics() {
// keep orignal Date object so as not to be affected by wayback's
// hijacking global Date object
var Date = window.Date;
var ARCHIVE_ANALYTICS_VERSION = 2;
var DEFAULT_SERVICE = 'ao_2';
var startTime = new Date();
/**
* @return {Boolean}
*/
function isPerformanceTimingApiSupported() {
return 'performance' in window && 'timing' in window.performance;
}
/**
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
* the current time.
*
* Uses the Performance API or a fallback value if it's not available.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number}
*/
function getLoadTime() {
var start;
if (isPerformanceTimingApiSupported())
start = window.performance.timing.domLoading;
else
start = startTime.getTime();
return new Date().getTime() - start;
}
/**
* Determines how many milliseconds elapsed between the user navigating to the page and
* the current time.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number|null} null if the browser doesn't support the Performance API
*/
function getNavToDoneTime() {
if (!isPerformanceTimingApiSupported())
return null;
return new Date().getTime() - window.performance.timing.navigationStart;
}
/**
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
* the unit.
*
* @param {String} original value to modify, with a unit
* @param {Function} doOperation accepts one Number parameter, returns a Number
* @returns {String}
*/
function computeWithUnit(original, doOperation) {
var number = parseFloat(original, 10);
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
return doOperation(number) + unit;
}
/**
* Computes the default font size of the browser.
*
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
*/
function getDefaultFontSize() {
var fontSizeStr;
if (!('getComputedStyle' in window))
return null;
var style = window.getComputedStyle(document.documentElement);
if (!style)
return null;
fontSizeStr = style.fontSize;
// Don't modify the value if tracking book reader.
if (document.documentElement.classList.contains('BookReaderRoot'))
return fontSizeStr;
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
// Undo the 62.5% size applied in the Bootstrap CSS.
return number * 1.6;
});
}
/**
* Get the URL parameters for a given Location
* @param {Location}
* @return {Object} The URL parameters
*/
function getParams(location) {
if (!location) location = window.location;
var vars;
var i;
var pair;
var params = {};
var query = location.search;
if (!query) return params;
vars = query.substring(1).split('&');
for (i = 0; i < vars.length; i++) {
pair = vars[i].split('=');
params[pair[0]] = decodeURIComponent(pair[1]);
}
return params;
}
return {
/**
* @type {String|null}
*/
service: null,
/**
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
* sent).
*
* @type {Object}
*/
values: {},
/**
* Sends an analytics ping, preferably using navigator.sendBeacon()
* @param {Object} values
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
*/
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
if (typeof window.navigator !== 'undefined' && typeof window.navigator.sendBeacon !== 'undefined')
this.send_ping_via_beacon(values);
else
this.send_ping_via_image(values);
},
/**
* Sends a ping via Beacon API
* NOTE: Assumes window.navigator.sendBeacon exists
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_beacon: function send_ping_via_beacon(values) {
var url = this.generate_tracking_url(values || {});
window.navigator.sendBeacon(url);
},
/**
* Sends a ping via Image object
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_image: function send_ping_via_image(values) {
var url = this.generate_tracking_url(values || {});
var loadtime_img = new Image(1, 1);
loadtime_img.src = url;
},
/**
* Construct complete tracking URL containing payload
* @param {Object} params Tracking parameters to pass
* @return {String} URL to use for tracking call
*/
generate_tracking_url: function generate_tracking_url(params) {
var baseUrl = '//analytics.archive.org/0.gif';
var keys;
var outputParams = params;
var outputParamsArray = [];
outputParams.service = outputParams.service || this.service || DEFAULT_SERVICE;
// Build array of querystring parameters
keys = Object.keys(outputParams);
keys.forEach(function keyIteration(key) {
outputParamsArray.push(encodeURIComponent(key) + '=' + encodeURIComponent(outputParams[key]));
});
outputParamsArray.push('version=' + ARCHIVE_ANALYTICS_VERSION);
outputParamsArray.push('count=' + (keys.length + 2)); // Include `version` and `count` in count
return baseUrl + '?' + outputParamsArray.join('&');
},
/**
* @param {int} page Page number
*/
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
var additionalValues = { ev: page };
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch', location.pathname, additionalValues);
},
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
var additionalValues = {};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch_base', location.pathname, additionalValues);
},
/**
* @param {Object} [options]
* @param {String} [options.mediaType]
* @param {String} [options.mediaLanguage]
* @param {String} [options.page] The path portion of the page URL
*/
send_pageview: function send_pageview(options) {
var settings = options || {};
var defaultFontSize;
var loadTime = getLoadTime();
var mediaType = settings.mediaType;
var primaryCollection = settings.primaryCollection;
var page = settings.page;
var navToDoneTime = getNavToDoneTime();
/**
* @return {String}
*/
function get_locale() {
if (navigator) {
if (navigator.language)
return navigator.language;
else if (navigator.browserLanguage)
return navigator.browserLanguage;
else if (navigator.systemLanguage)
return navigator.systemLanguage;
else if (navigator.userLanguage)
return navigator.userLanguage;
}
return '';
}
defaultFontSize = getDefaultFontSize();
// Set field values
this.values.kind = 'pageview';
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
this.values.locale = get_locale();
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
if (loadTime)
this.values.loadtime = loadTime;
if (navToDoneTime)
this.values.nav_to_done_ms = navToDoneTime;
/* START CUSTOM DIMENSIONS */
if (defaultFontSize)
this.values.ga_cd1 = defaultFontSize;
if ('devicePixelRatio' in window)
this.values.ga_cd2 = window.devicePixelRatio;
if (mediaType)
this.values.ga_cd3 = mediaType;
if (settings.mediaLanguage) {
this.values.ga_cd4 = settings.mediaLanguage;
}
if (primaryCollection) {
this.values.ga_cd5 = primaryCollection;
}
/* END CUSTOM DIMENSIONS */
if (page)
this.values.page = page;
this.send_ping(this.values);
},
/**
* Sends a tracking "Event".
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event: function send_event(
category,
action,
label,
additionalEventParams
) {
if (!label) label = window.location.pathname;
if (!additionalEventParams) additionalEventParams = {};
if (additionalEventParams.mediaLanguage) {
additionalEventParams.ga_cd4 = additionalEventParams.mediaLanguage;
delete additionalEventParams.mediaLanguage;
}
var eventParams = Object.assign(
{
kind: 'event',
ec: category,
ea: action,
el: label,
cache_bust: Math.random(),
},
additionalEventParams
);
this.send_ping(eventParams);
},
/**
* @param {Object} options see this.send_pageview options
*/
send_pageview_on_load: function send_pageview_on_load(options) {
var self = this;
window.addEventListener('load', function send_pageview_with_options() {
self.send_pageview(options);
});
},
/**
* Handles tracking events passed in URL.
* Assumes category and action values are separated by a "|" character.
* NOTE: Uses the unsampled analytics property. Watch out for future high click links!
* @param {Location}
*/
process_url_events: function process_url_events(location) {
var eventValues;
var actionValue;
var eventValue = getParams(location).iax;
if (!eventValue) return;
eventValues = eventValue.split('|');
actionValue = eventValues.length >= 1 ? eventValues[1] : '';
this.send_event(
eventValues[0],
actionValue,
window.location.pathname,
{ service: 'ao_no_sampling' }
);
},
/**
* Attaches handlers for event tracking.
*
* To enable click tracking for a link, add a `data-event-click-tracking`
* attribute containing the Google Analytics Event Category and Action, separated
* by a vertical pipe (|).
* e.g. `<a href="foobar" data-event-click-tracking="TopNav|FooBar">`
*
* To enable form submit tracking, add a `data-event-form-tracking` attribute
* to the `form` tag.
* e.g. `<form data-event-form-tracking="TopNav|SearchForm" method="GET">`
*
* Additional tracking options can be added via a `data-event-tracking-options`
* parameter. This parameter, if included, should be a JSON string of the parameters.
* Valid parameters are:
* - service {string}: Corresponds to the Google Analytics property data values flow into
*/
set_up_event_tracking: function set_up_event_tracking() {
var self = this;
var clickTrackingAttributeName = 'event-click-tracking';
var formTrackingAttributeName = 'event-form-tracking';
var trackingOptionsAttributeName = 'event-tracking-options';
function makeActionHandler(attributeName) {
return function actionHandler(event) {
var $currentTarget;
var categoryAction;
var categoryActionParts;
var options;
var submitFormFunction;
$currentTarget = $(event.currentTarget);
if (!$currentTarget) return;
categoryAction = $currentTarget.data(attributeName);
if (!categoryAction) return;
categoryActionParts = categoryAction.split('|');
options = $currentTarget.data(trackingOptionsAttributeName) || {}; // Converts to JSON
self.send_event(
categoryActionParts[0],
categoryActionParts[1],
window.location.pathname,
options.service ? { service: options.service } : {}
);
};
}
$(document).on(
'click',
'[data-' + clickTrackingAttributeName + ']',
makeActionHandler(clickTrackingAttributeName)
);
$(document).on(
'submit',
'form[data-' + formTrackingAttributeName + ']',
makeActionHandler(formTrackingAttributeName)
);
},
/**
* @returns {Object[]}
*/
get_data_packets: function get_data_packets() {
return [this.values];
},
};
}());
// @license-end

View File

@ -0,0 +1,4 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=46)}({46:function(e,t){[Element.prototype,CharacterData.prototype,DocumentType.prototype].forEach((function(e){e.hasOwnProperty("remove")||Object.defineProperty(e,"remove",{configurable:!0,enumerable:!0,writable:!0,value:function(){null!==this.parentNode&&this.parentNode.removeChild(this)}})}))}});
//# sourceMappingURL=ie-dom-node-remove-polyfill.min.js.map
// @license-end

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,298 @@
/**
@license @nocompile
Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
(function(){/*
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
'use strict';var w;function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}function ca(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:aa(a)}}function da(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}
var ea="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,ha="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};function ia(){ia=function(){};ea.Symbol||(ea.Symbol=ja)}function ma(a,b){this.a=a;ha(this,"description",{configurable:!0,writable:!0,value:b})}ma.prototype.toString=function(){return this.a};
var ja=function(){function a(c){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return new ma("jscomp_symbol_"+(c||"")+"_"+b++,c)}var b=0;return a}();function na(){ia();var a=ea.Symbol.iterator;a||(a=ea.Symbol.iterator=ea.Symbol("Symbol.iterator"));"function"!=typeof Array.prototype[a]&&ha(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return oa(aa(this))}});na=function(){}}
function oa(a){na();a={next:a};a[ea.Symbol.iterator]=function(){return this};return a}var pa;if("function"==typeof Object.setPrototypeOf)pa=Object.setPrototypeOf;else{var ta;a:{var ua={Fa:!0},wa={};try{wa.__proto__=ua;ta=wa.Fa;break a}catch(a){}ta=!1}pa=ta?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var xa=pa;function ya(){this.f=!1;this.b=null;this.U=void 0;this.a=1;this.F=0;this.c=null}
function za(a){if(a.f)throw new TypeError("Generator is already running");a.f=!0}ya.prototype.u=function(a){this.U=a};function Aa(a,b){a.c={Ia:b,Ma:!0};a.a=a.F}ya.prototype.return=function(a){this.c={return:a};this.a=this.F};function Ba(a,b){a.a=3;return{value:b}}function Ca(a){this.a=new ya;this.b=a}function Da(a,b){za(a.a);var c=a.a.b;if(c)return Ea(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.a.return);a.a.return(b);return Fa(a)}
function Ea(a,b,c,d){try{var e=b.call(a.a.b,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.a.f=!1,e;var f=e.value}catch(g){return a.a.b=null,Aa(a.a,g),Fa(a)}a.a.b=null;d.call(a.a,f);return Fa(a)}function Fa(a){for(;a.a.a;)try{var b=a.b(a.a);if(b)return a.a.f=!1,{value:b.value,done:!1}}catch(c){a.a.U=void 0,Aa(a.a,c)}a.a.f=!1;if(a.a.c){b=a.a.c;a.a.c=null;if(b.Ma)throw b.Ia;return{value:b.return,done:!0}}return{value:void 0,done:!0}}
function Ga(a){this.next=function(b){za(a.a);a.a.b?b=Ea(a,a.a.b.next,b,a.a.u):(a.a.u(b),b=Fa(a));return b};this.throw=function(b){za(a.a);a.a.b?b=Ea(a,a.a.b["throw"],b,a.a.u):(Aa(a.a,b),b=Fa(a));return b};this.return=function(b){return Da(a,b)};na();this[Symbol.iterator]=function(){return this}}function Ha(a,b){b=new Ga(new Ca(b));xa&&xa(b,a.prototype);return b}Array.from||(Array.from=function(a){return[].slice.call(a)});
Object.assign||(Object.assign=function(a){for(var b=[].slice.call(arguments,1),c=0,d;c<b.length;c++)if(d=b[c])for(var e=a,f=d,g=Object.getOwnPropertyNames(f),h=0;h<g.length;h++)d=g[h],e[d]=f[d];return a});(function(){if(!function(){var f=document.createEvent("Event");f.initEvent("foo",!0,!0);f.preventDefault();return f.defaultPrevented}()){var a=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){this.cancelable&&(a.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}var b=/Trident/.test(navigator.userAgent);if(!window.Event||b&&"function"!==typeof window.Event){var c=window.Event;window.Event=function(f,g){g=g||{};var h=document.createEvent("Event");
h.initEvent(f,!!g.bubbles,!!g.cancelable);return h};if(c){for(var d in c)window.Event[d]=c[d];window.Event.prototype=c.prototype}}if(!window.CustomEvent||b&&"function"!==typeof window.CustomEvent)window.CustomEvent=function(f,g){g=g||{};var h=document.createEvent("CustomEvent");h.initCustomEvent(f,!!g.bubbles,!!g.cancelable,g.detail);return h},window.CustomEvent.prototype=window.Event.prototype;if(!window.MouseEvent||b&&"function"!==typeof window.MouseEvent){b=window.MouseEvent;window.MouseEvent=
function(f,g){g=g||{};var h=document.createEvent("MouseEvent");h.initMouseEvent(f,!!g.bubbles,!!g.cancelable,g.view||window,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget);return h};if(b)for(var e in b)window.MouseEvent[e]=b[e];window.MouseEvent.prototype=b.prototype}})();(function(){function a(){}function b(p,t){if(!p.childNodes.length)return[];switch(p.nodeType){case Node.DOCUMENT_NODE:return F.call(p,t);case Node.DOCUMENT_FRAGMENT_NODE:return C.call(p,t);default:return r.call(p,t)}}var c="undefined"===typeof HTMLTemplateElement,d=!(document.createDocumentFragment().cloneNode()instanceof DocumentFragment),e=!1;/Trident/.test(navigator.userAgent)&&function(){function p(z,S){if(z instanceof DocumentFragment)for(var cb;cb=z.firstChild;)D.call(this,cb,S);else D.call(this,
z,S);return z}e=!0;var t=Node.prototype.cloneNode;Node.prototype.cloneNode=function(z){z=t.call(this,z);this instanceof DocumentFragment&&(z.__proto__=DocumentFragment.prototype);return z};DocumentFragment.prototype.querySelectorAll=HTMLElement.prototype.querySelectorAll;DocumentFragment.prototype.querySelector=HTMLElement.prototype.querySelector;Object.defineProperties(DocumentFragment.prototype,{nodeType:{get:function(){return Node.DOCUMENT_FRAGMENT_NODE},configurable:!0},localName:{get:function(){},
configurable:!0},nodeName:{get:function(){return"#document-fragment"},configurable:!0}});var D=Node.prototype.insertBefore;Node.prototype.insertBefore=p;var K=Node.prototype.appendChild;Node.prototype.appendChild=function(z){z instanceof DocumentFragment?p.call(this,z,null):K.call(this,z);return z};var ba=Node.prototype.removeChild,ka=Node.prototype.replaceChild;Node.prototype.replaceChild=function(z,S){z instanceof DocumentFragment?(p.call(this,z,S),ba.call(this,S)):ka.call(this,z,S);return S};Document.prototype.createDocumentFragment=
function(){var z=this.createElement("df");z.__proto__=DocumentFragment.prototype;return z};var qa=Document.prototype.importNode;Document.prototype.importNode=function(z,S){S=qa.call(this,z,S||!1);z instanceof DocumentFragment&&(S.__proto__=DocumentFragment.prototype);return S}}();var f=Node.prototype.cloneNode,g=Document.prototype.createElement,h=Document.prototype.importNode,k=Node.prototype.removeChild,l=Node.prototype.appendChild,m=Node.prototype.replaceChild,q=DOMParser.prototype.parseFromString,
H=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML")||{get:function(){return this.innerHTML},set:function(p){this.innerHTML=p}},E=Object.getOwnPropertyDescriptor(window.Node.prototype,"childNodes")||{get:function(){return this.childNodes}},r=Element.prototype.querySelectorAll,F=Document.prototype.querySelectorAll,C=DocumentFragment.prototype.querySelectorAll,N=function(){if(!c){var p=document.createElement("template"),t=document.createElement("template");t.content.appendChild(document.createElement("div"));
p.content.appendChild(t);p=p.cloneNode(!0);return 0===p.content.childNodes.length||0===p.content.firstChild.content.childNodes.length||d}}();if(c){var y=document.implementation.createHTMLDocument("template"),X=!0,v=document.createElement("style");v.textContent="template{display:none;}";var ra=document.head;ra.insertBefore(v,ra.firstElementChild);a.prototype=Object.create(HTMLElement.prototype);var fa=!document.createElement("div").hasOwnProperty("innerHTML");a.S=function(p){if(!p.content&&p.namespaceURI===
document.documentElement.namespaceURI){p.content=y.createDocumentFragment();for(var t;t=p.firstChild;)l.call(p.content,t);if(fa)p.__proto__=a.prototype;else if(p.cloneNode=function(D){return a.b(this,D)},X)try{n(p),I(p)}catch(D){X=!1}a.a(p.content)}};var sa={option:["select"],thead:["table"],col:["colgroup","table"],tr:["tbody","table"],th:["tr","tbody","table"],td:["tr","tbody","table"]},n=function(p){Object.defineProperty(p,"innerHTML",{get:function(){return va(this)},set:function(t){var D=sa[(/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(t)||
["",""])[1].toLowerCase()];if(D)for(var K=0;K<D.length;K++)t="<"+D[K]+">"+t+"</"+D[K]+">";y.body.innerHTML=t;for(a.a(y);this.content.firstChild;)k.call(this.content,this.content.firstChild);t=y.body;if(D)for(K=0;K<D.length;K++)t=t.lastChild;for(;t.firstChild;)l.call(this.content,t.firstChild)},configurable:!0})},I=function(p){Object.defineProperty(p,"outerHTML",{get:function(){return"<template>"+this.innerHTML+"</template>"},set:function(t){if(this.parentNode){y.body.innerHTML=t;for(t=this.ownerDocument.createDocumentFragment();y.body.firstChild;)l.call(t,
y.body.firstChild);m.call(this.parentNode,t,this)}else throw Error("Failed to set the 'outerHTML' property on 'Element': This element has no parent node.");},configurable:!0})};n(a.prototype);I(a.prototype);a.a=function(p){p=b(p,"template");for(var t=0,D=p.length,K;t<D&&(K=p[t]);t++)a.S(K)};document.addEventListener("DOMContentLoaded",function(){a.a(document)});Document.prototype.createElement=function(){var p=g.apply(this,arguments);"template"===p.localName&&a.S(p);return p};DOMParser.prototype.parseFromString=
function(){var p=q.apply(this,arguments);a.a(p);return p};Object.defineProperty(HTMLElement.prototype,"innerHTML",{get:function(){return va(this)},set:function(p){H.set.call(this,p);a.a(this)},configurable:!0,enumerable:!0});var la=/[&\u00A0"]/g,Xb=/[&\u00A0<>]/g,db=function(p){switch(p){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}};v=function(p){for(var t={},D=0;D<p.length;D++)t[p[D]]=!0;return t};var Ra=v("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),
eb=v("style script xmp iframe noembed noframes plaintext noscript".split(" ")),va=function(p,t){"template"===p.localName&&(p=p.content);for(var D="",K=t?t(p):E.get.call(p),ba=0,ka=K.length,qa;ba<ka&&(qa=K[ba]);ba++){a:{var z=qa;var S=p;var cb=t;switch(z.nodeType){case Node.ELEMENT_NODE:for(var Yb=z.localName,fb="<"+Yb,cg=z.attributes,ud=0;S=cg[ud];ud++)fb+=" "+S.name+'="'+S.value.replace(la,db)+'"';fb+=">";z=Ra[Yb]?fb:fb+va(z,cb)+"</"+Yb+">";break a;case Node.TEXT_NODE:z=z.data;z=S&&eb[S.localName]?
z:z.replace(Xb,db);break a;case Node.COMMENT_NODE:z="\x3c!--"+z.data+"--\x3e";break a;default:throw window.console.error(z),Error("not implemented");}}D+=z}return D}}if(c||N){a.b=function(p,t){var D=f.call(p,!1);this.S&&this.S(D);t&&(l.call(D.content,f.call(p.content,!0)),u(D.content,p.content));return D};var u=function(p,t){if(t.querySelectorAll&&(t=b(t,"template"),0!==t.length)){p=b(p,"template");for(var D=0,K=p.length,ba,ka;D<K;D++)ka=t[D],ba=p[D],a&&a.S&&a.S(ka),m.call(ba.parentNode,G.call(ka,
!0),ba)}},G=Node.prototype.cloneNode=function(p){if(!e&&d&&this instanceof DocumentFragment)if(p)var t=J.call(this.ownerDocument,this,!0);else return this.ownerDocument.createDocumentFragment();else this.nodeType===Node.ELEMENT_NODE&&"template"===this.localName&&this.namespaceURI==document.documentElement.namespaceURI?t=a.b(this,p):t=f.call(this,p);p&&u(t,this);return t},J=Document.prototype.importNode=function(p,t){t=t||!1;if("template"===p.localName)return a.b(p,t);var D=h.call(this,p,t);if(t){u(D,
p);p=b(D,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');for(var K,ba=0;ba<p.length;ba++){K=p[ba];t=g.call(document,"script");t.textContent=K.textContent;for(var ka=K.attributes,qa=0,z;qa<ka.length;qa++)z=ka[qa],t.setAttribute(z.name,z.value);m.call(K.parentNode,t,K)}}return D}}c&&(window.HTMLTemplateElement=a)})();var Ia=setTimeout;function Ja(){}function Ka(a,b){return function(){a.apply(b,arguments)}}function x(a){if(!(this instanceof x))throw new TypeError("Promises must be constructed via new");if("function"!==typeof a)throw new TypeError("not a function");this.K=0;this.pa=!1;this.w=void 0;this.V=[];La(a,this)}
function Ma(a,b){for(;3===a.K;)a=a.w;0===a.K?a.V.push(b):(a.pa=!0,Na(function(){var c=1===a.K?b.Oa:b.Pa;if(null===c)(1===a.K?Oa:Pa)(b.na,a.w);else{try{var d=c(a.w)}catch(e){Pa(b.na,e);return}Oa(b.na,d)}}))}function Oa(a,b){try{if(b===a)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"===typeof b||"function"===typeof b)){var c=b.then;if(b instanceof x){a.K=3;a.w=b;Qa(a);return}if("function"===typeof c){La(Ka(c,b),a);return}}a.K=1;a.w=b;Qa(a)}catch(d){Pa(a,d)}}
function Pa(a,b){a.K=2;a.w=b;Qa(a)}function Qa(a){2===a.K&&0===a.V.length&&Na(function(){a.pa||"undefined"!==typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",a.w)});for(var b=0,c=a.V.length;b<c;b++)Ma(a,a.V[b]);a.V=null}function Sa(a,b,c){this.Oa="function"===typeof a?a:null;this.Pa="function"===typeof b?b:null;this.na=c}function La(a,b){var c=!1;try{a(function(d){c||(c=!0,Oa(b,d))},function(d){c||(c=!0,Pa(b,d))})}catch(d){c||(c=!0,Pa(b,d))}}
x.prototype["catch"]=function(a){return this.then(null,a)};x.prototype.then=function(a,b){var c=new this.constructor(Ja);Ma(this,new Sa(a,b,c));return c};x.prototype["finally"]=function(a){var b=this.constructor;return this.then(function(c){return b.resolve(a()).then(function(){return c})},function(c){return b.resolve(a()).then(function(){return b.reject(c)})})};
function Ta(a){return new x(function(b,c){function d(h,k){try{if(k&&("object"===typeof k||"function"===typeof k)){var l=k.then;if("function"===typeof l){l.call(k,function(m){d(h,m)},c);return}}e[h]=k;0===--f&&b(e)}catch(m){c(m)}}if(!a||"undefined"===typeof a.length)throw new TypeError("Promise.all accepts an array");var e=Array.prototype.slice.call(a);if(0===e.length)return b([]);for(var f=e.length,g=0;g<e.length;g++)d(g,e[g])})}
function Ua(a){return a&&"object"===typeof a&&a.constructor===x?a:new x(function(b){b(a)})}function Va(a){return new x(function(b,c){c(a)})}function Wa(a){return new x(function(b,c){for(var d=0,e=a.length;d<e;d++)a[d].then(b,c)})}var Na="function"===typeof setImmediate&&function(a){setImmediate(a)}||function(a){Ia(a,0)};/*
Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
if(!window.Promise){window.Promise=x;x.prototype.then=x.prototype.then;x.all=Ta;x.race=Wa;x.resolve=Ua;x.reject=Va;var Xa=document.createTextNode(""),Ya=[];(new MutationObserver(function(){for(var a=Ya.length,b=0;b<a;b++)Ya[b]();Ya.splice(0,a)})).observe(Xa,{characterData:!0});Na=function(a){Ya.push(a);Xa.textContent=0<Xa.textContent.length?"":"a"}};/*
Copyright (C) 2015 by WebReflection
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
(function(a,b){if(!(b in a)){var c=typeof global===typeof c?window:global,d=0,e=""+Math.random(),f="__\u0001symbol@@"+e,g=a.getOwnPropertyNames,h=a.getOwnPropertyDescriptor,k=a.create,l=a.keys,m=a.freeze||a,q=a.defineProperty,H=a.defineProperties,E=h(a,"getOwnPropertyNames"),r=a.prototype,F=r.hasOwnProperty,C=r.propertyIsEnumerable,N=r.toString,y=function(u,G,J){F.call(u,f)||q(u,f,{enumerable:!1,configurable:!1,writable:!1,value:{}});u[f]["@@"+G]=J},X=function(u,G){var J=k(u);g(G).forEach(function(p){sa.call(G,
p)&&Ra(J,p,G[p])});return J},v=function(){},ra=function(u){return u!=f&&!F.call(la,u)},fa=function(u){return u!=f&&F.call(la,u)},sa=function(u){var G=""+u;return fa(G)?F.call(this,G)&&this[f]["@@"+G]:C.call(this,u)},n=function(u){q(r,u,{enumerable:!1,configurable:!0,get:v,set:function(G){va(this,u,{enumerable:!1,configurable:!0,writable:!0,value:G});y(this,u,!0)}});return m(la[u]=q(a(u),"constructor",Xb))},I=function(u){if(this&&this!==c)throw new TypeError("Symbol is not a constructor");return n("__\u0001symbol:".concat(u||
"",e,++d))},la=k(null),Xb={value:I},db=function(u){return la[u]},Ra=function(u,G,J){var p=""+G;if(fa(p)){G=va;if(J.enumerable){var t=k(J);t.enumerable=!1}else t=J;G(u,p,t);y(u,p,!!J.enumerable)}else q(u,G,J);return u},eb=function(u){return g(u).filter(fa).map(db)};E.value=Ra;q(a,"defineProperty",E);E.value=eb;q(a,b,E);E.value=function(u){return g(u).filter(ra)};q(a,"getOwnPropertyNames",E);E.value=function(u,G){var J=eb(G);J.length?l(G).concat(J).forEach(function(p){sa.call(G,p)&&Ra(u,p,G[p])}):H(u,
G);return u};q(a,"defineProperties",E);E.value=sa;q(r,"propertyIsEnumerable",E);E.value=I;q(c,"Symbol",E);E.value=function(u){u="__\u0001symbol:".concat("__\u0001symbol:",u,e);return u in r?la[u]:n(u)};q(I,"for",E);E.value=function(u){if(ra(u))throw new TypeError(u+" is not a symbol");return F.call(la,u)?u.slice(20,-e.length):void 0};q(I,"keyFor",E);E.value=function(u,G){var J=h(u,G);J&&fa(G)&&(J.enumerable=sa.call(u,G));return J};q(a,"getOwnPropertyDescriptor",E);E.value=function(u,G){return 1===
arguments.length?k(u):X(u,G)};q(a,"create",E);E.value=function(){var u=N.call(this);return"[object String]"===u&&fa(this)?"[object Symbol]":u};q(r,"toString",E);try{var va=k(q({},"__\u0001symbol:",{get:function(){return q(this,"__\u0001symbol:",{value:!1})["__\u0001symbol:"]}}))["__\u0001symbol:"]||q}catch(u){va=function(G,J,p){var t=h(r,J);delete r[J];q(G,J,p);q(r,J,t)}}}})(Object,"getOwnPropertySymbols");
(function(a){var b=a.defineProperty,c=a.prototype,d=c.toString,e;"iterator match replace search split hasInstance isConcatSpreadable unscopables species toPrimitive toStringTag".split(" ").forEach(function(f){if(!(f in Symbol))switch(b(Symbol,f,{value:Symbol(f)}),f){case "toStringTag":e=a.getOwnPropertyDescriptor(c,"toString"),e.value=function(){var g=d.call(this),h=this[Symbol.toStringTag];return"undefined"===typeof h?g:"[object "+h+"]"},b(c,"toString",e)}})})(Object,Symbol);
(function(a,b,c){function d(){return this}b[a]||(b[a]=function(){var e=0,f=this,g={next:function(){var h=f.length<=e;return h?{done:h}:{done:h,value:f[e++]}}};g[a]=d;return g});c[a]||(c[a]=function(){var e=String.fromCodePoint,f=this,g=0,h=f.length,k={next:function(){var l=h<=g,m=l?"":e(f.codePointAt(g));g+=m.length;return l?{done:l}:{done:l,value:m}}};k[a]=d;return k})})(Symbol.iterator,Array.prototype,String.prototype);/*
Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
var Za=Object.prototype.toString;Object.prototype.toString=function(){return void 0===this?"[object Undefined]":null===this?"[object Null]":Za.call(this)};Object.keys=function(a){return Object.getOwnPropertyNames(a).filter(function(b){return(b=Object.getOwnPropertyDescriptor(a,b))&&b.enumerable})};var $a=window.Symbol.iterator;
String.prototype[$a]&&String.prototype.codePointAt||(String.prototype[$a]=function ab(){var b,c=this;return Ha(ab,function(d){1==d.a&&(b=0);if(3!=d.a)return b<c.length?d=Ba(d,c[b]):(d.a=0,d=void 0),d;b++;d.a=2})});Set.prototype[$a]||(Set.prototype[$a]=function bb(){var b,c=this,d;return Ha(bb,function(e){1==e.a&&(b=[],c.forEach(function(f){b.push(f)}),d=0);if(3!=e.a)return d<b.length?e=Ba(e,b[d]):(e.a=0,e=void 0),e;d++;e.a=2})});
Map.prototype[$a]||(Map.prototype[$a]=function gb(){var b,c=this,d;return Ha(gb,function(e){1==e.a&&(b=[],c.forEach(function(f,g){b.push([g,f])}),d=0);if(3!=e.a)return d<b.length?e=Ba(e,b[d]):(e.a=0,e=void 0),e;d++;e.a=2})});/*
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
window.WebComponents=window.WebComponents||{flags:{}};var hb=document.querySelector('script[src*="webcomponents-bundle"]'),ib=/wc-(.+)/,A={};if(!A.noOpts){location.search.slice(1).split("&").forEach(function(a){a=a.split("=");var b;a[0]&&(b=a[0].match(ib))&&(A[b[1]]=a[1]||!0)});if(hb)for(var jb=0,kb=void 0;kb=hb.attributes[jb];jb++)"src"!==kb.name&&(A[kb.name]=kb.value||!0);if(A.log&&A.log.split){var lb=A.log.split(",");A.log={};lb.forEach(function(a){A.log[a]=!0})}else A.log={}}
window.WebComponents.flags=A;var mb=A.shadydom;if(mb){window.ShadyDOM=window.ShadyDOM||{};window.ShadyDOM.force=mb;var nb=A.noPatch;window.ShadyDOM.noPatch="true"===nb?!0:nb}var ob=A.register||A.ce;ob&&window.customElements&&(window.customElements.forcePolyfill=ob);/*
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
function pb(){}pb.prototype.toJSON=function(){return{}};function B(a){a.__shady||(a.__shady=new pb);return a.__shady}function L(a){return a&&a.__shady};var M=window.ShadyDOM||{};M.Ka=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var qb=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");M.D=!!(qb&&qb.configurable&&qb.get);M.ia=M.force||!M.Ka;M.G=M.noPatch||!1;M.ma=M.preferPerformance;M.la="on-demand"===M.G;M.ya=navigator.userAgent.match("Trident");function rb(a){return(a=L(a))&&void 0!==a.firstChild}function O(a){return a instanceof ShadowRoot}function sb(a){return(a=(a=L(a))&&a.root)&&tb(a)}
var ub=Element.prototype,vb=ub.matches||ub.matchesSelector||ub.mozMatchesSelector||ub.msMatchesSelector||ub.oMatchesSelector||ub.webkitMatchesSelector,wb=document.createTextNode(""),xb=0,yb=[];(new MutationObserver(function(){for(;yb.length;)try{yb.shift()()}catch(a){throw wb.textContent=xb++,a;}})).observe(wb,{characterData:!0});function zb(a){yb.push(a);wb.textContent=xb++}var Ab=!!document.contains;function Bb(a,b){for(;b;){if(b==a)return!0;b=b.__shady_parentNode}return!1}
function Cb(a){for(var b=a.length-1;0<=b;b--){var c=a[b],d=c.getAttribute("id")||c.getAttribute("name");d&&"length"!==d&&isNaN(d)&&(a[d]=c)}a.item=function(e){return a[e]};a.namedItem=function(e){if("length"!==e&&isNaN(e)&&a[e])return a[e];for(var f=ca(a),g=f.next();!g.done;g=f.next())if(g=g.value,(g.getAttribute("id")||g.getAttribute("name"))==e)return g;return null};return a}function Db(a){var b=[];for(a=a.__shady_native_firstChild;a;a=a.__shady_native_nextSibling)b.push(a);return b}
function Eb(a){var b=[];for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)b.push(a);return b}function Fb(a,b,c){c.configurable=!0;if(c.value)a[b]=c.value;else try{Object.defineProperty(a,b,c)}catch(d){}}function P(a,b,c,d){c=void 0===c?"":c;for(var e in b)d&&0<=d.indexOf(e)||Fb(a,c+e,b[e])}function Gb(a,b){for(var c in b)c in a&&Fb(a,c,b[c])}function Q(a){var b={};Object.getOwnPropertyNames(a).forEach(function(c){b[c]=Object.getOwnPropertyDescriptor(a,c)});return b};var Hb=[],Ib;function Jb(a){Ib||(Ib=!0,zb(Kb));Hb.push(a)}function Kb(){Ib=!1;for(var a=!!Hb.length;Hb.length;)Hb.shift()();return a}Kb.list=Hb;function Lb(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.ba=new Set}function Mb(a){a.a||(a.a=!0,zb(function(){a.flush()}))}Lb.prototype.flush=function(){if(this.a){this.a=!1;var a=this.takeRecords();a.length&&this.ba.forEach(function(b){b(a)})}};Lb.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
function Nb(a,b){var c=B(a);c.W||(c.W=new Lb);c.W.ba.add(b);var d=c.W;return{Ca:b,P:d,Da:a,takeRecords:function(){return d.takeRecords()}}}function Ob(a){var b=a&&a.P;b&&(b.ba.delete(a.Ca),b.ba.size||(B(a.Da).W=null))}
function Pb(a,b){var c=b.getRootNode();return a.map(function(d){var e=c===d.target.getRootNode();if(e&&d.addedNodes){if(e=Array.from(d.addedNodes).filter(function(f){return c===f.getRootNode()}),e.length)return d=Object.create(d),Object.defineProperty(d,"addedNodes",{value:e,configurable:!0}),d}else if(e)return d}).filter(function(d){return d})};var Qb=/[&\u00A0"]/g,Rb=/[&\u00A0<>]/g;function Sb(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function Tb(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var Ub=Tb("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),Vb=Tb("style script xmp iframe noembed noframes plaintext noscript".split(" "));
function Wb(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,g=void 0;e<f&&(g=d[e]);e++){a:{var h=g;var k=a,l=b;switch(h.nodeType){case Node.ELEMENT_NODE:k=h.localName;for(var m="<"+k,q=h.attributes,H=0,E;E=q[H];H++)m+=" "+E.name+'="'+E.value.replace(Qb,Sb)+'"';m+=">";h=Ub[k]?m:m+Wb(h,l)+"</"+k+">";break a;case Node.TEXT_NODE:h=h.data;h=k&&Vb[k.localName]?h:h.replace(Rb,Sb);break a;case Node.COMMENT_NODE:h="\x3c!--"+h.data+"--\x3e";break a;default:throw window.console.error(h),
Error("not implemented");}}c+=h}return c};var Zb=M.D,$b={querySelector:function(a){return this.__shady_native_querySelector(a)},querySelectorAll:function(a){return this.__shady_native_querySelectorAll(a)}},ac={};function bc(a){ac[a]=function(b){return b["__shady_native_"+a]}}function cc(a,b){P(a,b,"__shady_native_");for(var c in b)bc(c)}function R(a,b){b=void 0===b?[]:b;for(var c=0;c<b.length;c++){var d=b[c],e=Object.getOwnPropertyDescriptor(a,d);e&&(Object.defineProperty(a,"__shady_native_"+d,e),e.value?$b[d]||($b[d]=e.value):bc(d))}}
var dc=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),ec=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1),fc=document.implementation.createHTMLDocument("inert");function gc(a){for(var b;b=a.__shady_native_firstChild;)a.__shady_native_removeChild(b)}var hc=["firstElementChild","lastElementChild","children","childElementCount"],ic=["querySelector","querySelectorAll"];
function jc(){var a=["dispatchEvent","addEventListener","removeEventListener"];window.EventTarget?R(window.EventTarget.prototype,a):(R(Node.prototype,a),R(Window.prototype,a));Zb?R(Node.prototype,"parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")):cc(Node.prototype,{parentNode:{get:function(){dc.currentNode=this;return dc.parentNode()}},firstChild:{get:function(){dc.currentNode=this;return dc.firstChild()}},lastChild:{get:function(){dc.currentNode=
this;return dc.lastChild()}},previousSibling:{get:function(){dc.currentNode=this;return dc.previousSibling()}},nextSibling:{get:function(){dc.currentNode=this;return dc.nextSibling()}},childNodes:{get:function(){var b=[];dc.currentNode=this;for(var c=dc.firstChild();c;)b.push(c),c=dc.nextSibling();return b}},parentElement:{get:function(){ec.currentNode=this;return ec.parentNode()}},textContent:{get:function(){switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:for(var b=
document.createTreeWalker(this,NodeFilter.SHOW_TEXT,null,!1),c="",d;d=b.nextNode();)c+=d.nodeValue;return c;default:return this.nodeValue}},set:function(b){if("undefined"===typeof b||null===b)b="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:gc(this);(0<b.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_native_insertBefore(document.createTextNode(b),void 0);break;default:this.nodeValue=b}}}});R(Node.prototype,"appendChild insertBefore removeChild replaceChild cloneNode contains".split(" "));
R(HTMLElement.prototype,["parentElement","contains"]);a={firstElementChild:{get:function(){ec.currentNode=this;return ec.firstChild()}},lastElementChild:{get:function(){ec.currentNode=this;return ec.lastChild()}},children:{get:function(){var b=[];ec.currentNode=this;for(var c=ec.firstChild();c;)b.push(c),c=ec.nextSibling();return Cb(b)}},childElementCount:{get:function(){return this.children?this.children.length:0}}};Zb?(R(Element.prototype,hc),R(Element.prototype,["previousElementSibling","nextElementSibling",
"innerHTML","className"]),R(HTMLElement.prototype,["children","innerHTML","className"])):(cc(Element.prototype,a),cc(Element.prototype,{previousElementSibling:{get:function(){ec.currentNode=this;return ec.previousSibling()}},nextElementSibling:{get:function(){ec.currentNode=this;return ec.nextSibling()}},innerHTML:{get:function(){return Wb(this,Db)},set:function(b){var c="template"===this.localName?this.content:this;gc(c);var d=this.localName||"div";d=this.namespaceURI&&this.namespaceURI!==fc.namespaceURI?
fc.createElementNS(this.namespaceURI,d):fc.createElement(d);d.innerHTML=b;for(b="template"===this.localName?d.content:d;d=b.__shady_native_firstChild;)c.__shady_native_insertBefore(d,void 0)}},className:{get:function(){return this.getAttribute("class")||""},set:function(b){this.setAttribute("class",b)}}}));R(Element.prototype,"setAttribute getAttribute hasAttribute removeAttribute focus blur".split(" "));R(Element.prototype,ic);R(HTMLElement.prototype,["focus","blur"]);window.HTMLTemplateElement&&
R(window.HTMLTemplateElement.prototype,["innerHTML"]);Zb?R(DocumentFragment.prototype,hc):cc(DocumentFragment.prototype,a);R(DocumentFragment.prototype,ic);Zb?(R(Document.prototype,hc),R(Document.prototype,["activeElement"])):cc(Document.prototype,a);R(Document.prototype,["importNode","getElementById"]);R(Document.prototype,ic)};var kc=Q({get childNodes(){return this.__shady_childNodes},get firstChild(){return this.__shady_firstChild},get lastChild(){return this.__shady_lastChild},get childElementCount(){return this.__shady_childElementCount},get children(){return this.__shady_children},get firstElementChild(){return this.__shady_firstElementChild},get lastElementChild(){return this.__shady_lastElementChild},get shadowRoot(){return this.__shady_shadowRoot}}),lc=Q({get textContent(){return this.__shady_textContent},set textContent(a){this.__shady_textContent=
a},get innerHTML(){return this.__shady_innerHTML},set innerHTML(a){return this.__shady_innerHTML=a}}),mc=Q({get parentElement(){return this.__shady_parentElement},get parentNode(){return this.__shady_parentNode},get nextSibling(){return this.__shady_nextSibling},get previousSibling(){return this.__shady_previousSibling},get nextElementSibling(){return this.__shady_nextElementSibling},get previousElementSibling(){return this.__shady_previousElementSibling},get className(){return this.__shady_className},
set className(a){return this.__shady_className=a}});function nc(a){for(var b in a){var c=a[b];c&&(c.enumerable=!1)}}nc(kc);nc(lc);nc(mc);var oc=M.D||!0===M.G,pc=oc?function(){}:function(a){var b=B(a);b.Aa||(b.Aa=!0,Gb(a,mc))},qc=oc?function(){}:function(a){var b=B(a);b.za||(b.za=!0,Gb(a,kc),window.customElements&&!M.G||Gb(a,lc))};var rc="__eventWrappers"+Date.now(),sc=function(){var a=Object.getOwnPropertyDescriptor(Event.prototype,"composed");return a?function(b){return a.get.call(b)}:null}(),tc=function(){function a(){}var b=!1,c={get capture(){b=!0;return!1}};window.addEventListener("test",a,c);window.removeEventListener("test",a,c);return b}();function uc(a){if(a&&"object"===typeof a){var b=!!a.capture;var c=!!a.once;var d=!!a.passive;var e=a.O}else b=!!a,d=c=!1;return{wa:e,capture:b,once:c,passive:d,ua:tc?a:b}}
var vc={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,dragstart:!0,
drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0},wc={DOMAttrModified:!0,DOMAttributeNameChanged:!0,DOMCharacterDataModified:!0,DOMElementNameChanged:!0,DOMNodeInserted:!0,DOMNodeInsertedIntoDocument:!0,DOMNodeRemoved:!0,DOMNodeRemovedFromDocument:!0,DOMSubtreeModified:!0};function xc(a){return a instanceof Node?a.__shady_getRootNode():a}
function yc(a,b){var c=[],d=a;for(a=xc(a);d;)c.push(d),d.__shady_assignedSlot?d=d.__shady_assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d=d.host:d=d.__shady_parentNode;c[c.length-1]===document&&c.push(window);return c}function zc(a){a.__composedPath||(a.__composedPath=yc(a.target,!0));return a.__composedPath}function Ac(a,b){if(!O)return a;a=yc(a,!0);for(var c=0,d,e=void 0,f,g=void 0;c<b.length;c++)if(d=b[c],f=xc(d),f!==e&&(g=a.indexOf(f),e=f),!O(f)||-1<g)return d}
function Bc(a){function b(c,d){c=new a(c,d);c.__composed=d&&!!d.composed;return c}b.__proto__=a;b.prototype=a.prototype;return b}var Cc={focus:!0,blur:!0};function Dc(a){return a.__target!==a.target||a.__relatedTarget!==a.relatedTarget}function Ec(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!Dc(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.__immediatePropagationStopped);d++);}
function Fc(a){var b=a.composedPath();Object.defineProperty(a,"currentTarget",{get:function(){return d},configurable:!0});for(var c=b.length-1;0<=c;c--){var d=b[c];Ec(a,d,"capture");if(a.ea)return}Object.defineProperty(a,"eventPhase",{get:function(){return Event.AT_TARGET}});var e;for(c=0;c<b.length;c++){d=b[c];var f=L(d);f=f&&f.root;if(0===c||f&&f===e)if(Ec(a,d,"bubble"),d!==window&&(e=d.__shady_getRootNode()),a.ea)break}}
function Gc(a,b,c,d,e,f){for(var g=0;g<a.length;g++){var h=a[g],k=h.type,l=h.capture,m=h.once,q=h.passive;if(b===h.node&&c===k&&d===l&&e===m&&f===q)return g}return-1}function Hc(a){Kb();return this.__shady_native_dispatchEvent(a)}
function Ic(a,b,c){var d=uc(c),e=d.capture,f=d.once,g=d.passive,h=d.wa;d=d.ua;if(b){var k=typeof b;if("function"===k||"object"===k)if("object"!==k||b.handleEvent&&"function"===typeof b.handleEvent){if(wc[a])return this.__shady_native_addEventListener(a,b,d);var l=h||this;if(h=b[rc]){if(-1<Gc(h,l,a,e,f,g))return}else b[rc]=[];h=function(m){f&&this.__shady_removeEventListener(a,b,c);m.__target||Jc(m);if(l!==this){var q=Object.getOwnPropertyDescriptor(m,"currentTarget");Object.defineProperty(m,"currentTarget",
{get:function(){return l},configurable:!0})}m.__previousCurrentTarget=m.currentTarget;if(!O(l)&&"slot"!==l.localName||-1!=m.composedPath().indexOf(l))if(m.composed||-1<m.composedPath().indexOf(l))if(Dc(m)&&m.target===m.relatedTarget)m.eventPhase===Event.BUBBLING_PHASE&&m.stopImmediatePropagation();else if(m.eventPhase===Event.CAPTURING_PHASE||m.bubbles||m.target===l||l instanceof Window){var H="function"===k?b.call(l,m):b.handleEvent&&b.handleEvent(m);l!==this&&(q?(Object.defineProperty(m,"currentTarget",
q),q=null):delete m.currentTarget);return H}};b[rc].push({node:l,type:a,capture:e,once:f,passive:g,$a:h});Cc[a]?(this.__handlers=this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(h)):this.__shady_native_addEventListener(a,h,d)}}}
function Kc(a,b,c){if(b){var d=uc(c);c=d.capture;var e=d.once,f=d.passive,g=d.wa;d=d.ua;if(wc[a])return this.__shady_native_removeEventListener(a,b,d);var h=g||this;g=void 0;var k=null;try{k=b[rc]}catch(l){}k&&(e=Gc(k,h,a,c,e,f),-1<e&&(g=k.splice(e,1)[0].$a,k.length||(b[rc]=void 0)));this.__shady_native_removeEventListener(a,g||b,d);g&&Cc[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][c?"capture":"bubble"],b=a.indexOf(g),-1<b&&a.splice(b,1))}}
function Lc(){for(var a in Cc)window.__shady_native_addEventListener(a,function(b){b.__target||(Jc(b),Fc(b))},!0)}
var Mc=Q({get composed(){void 0===this.__composed&&(sc?this.__composed="focusin"===this.type||"focusout"===this.type||sc(this):!1!==this.isTrusted&&(this.__composed=vc[this.type]));return this.__composed||!1},composedPath:function(){this.__composedPath||(this.__composedPath=yc(this.__target,this.composed));return this.__composedPath},get target(){return Ac(this.currentTarget||this.__previousCurrentTarget,this.composedPath())},get relatedTarget(){if(!this.__relatedTarget)return null;this.__relatedTargetComposedPath||
(this.__relatedTargetComposedPath=yc(this.__relatedTarget,!0));return Ac(this.currentTarget||this.__previousCurrentTarget,this.__relatedTargetComposedPath)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.ea=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);this.ea=this.__immediatePropagationStopped=!0}});
function Jc(a){a.__target=a.target;a.__relatedTarget=a.relatedTarget;if(M.D){var b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__shady_patchedProto")){var c=Object.create(b);c.__shady_sourceProto=b;P(c,Mc);b.__shady_patchedProto=c}a.__proto__=b.__shady_patchedProto}else P(a,Mc)}var Nc=Bc(Event),Oc=Bc(CustomEvent),Pc=Bc(MouseEvent);
function Qc(){if(!sc&&Object.getOwnPropertyDescriptor(Event.prototype,"isTrusted")){var a=function(){var b=new MouseEvent("click",{bubbles:!0,cancelable:!0,composed:!0});this.__shady_dispatchEvent(b)};Element.prototype.click?Element.prototype.click=a:HTMLElement.prototype.click&&(HTMLElement.prototype.click=a)}}var Rc=Object.getOwnPropertyNames(Document.prototype).filter(function(a){return"on"===a.substring(0,2)});function Sc(a,b){return{index:a,X:[],aa:b}}
function Tc(a,b,c,d){var e=0,f=0,g=0,h=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(g=0;g<k;g++)if(a[g]!==c[g])break a;g=k}if(b==a.length&&d==c.length){h=a.length;for(var l=c.length,m=0;m<k-g&&Uc(a[--h],c[--l]);)m++;h=m}e+=g;f+=g;b-=h;d-=h;if(0==b-e&&0==d-f)return[];if(e==b){for(b=Sc(e,0);f<d;)b.X.push(c[f++]);return[b]}if(f==d)return[Sc(e,b-e)];k=e;g=f;d=d-g+1;h=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(h),b[l][0]=l;for(l=0;l<h;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<h;m++)if(a[k+m-1]===c[g+l-1])b[l][m]=
b[l-1][m-1];else{var q=b[l-1][m]+1,H=b[l][m-1]+1;b[l][m]=q<H?q:H}k=b.length-1;g=b[0].length-1;d=b[k][g];for(a=[];0<k||0<g;)0==k?(a.push(2),g--):0==g?(a.push(3),k--):(h=b[k-1][g-1],l=b[k-1][g],m=b[k][g-1],q=l<m?l<h?l:h:m<h?m:h,q==h?(h==d?a.push(0):(a.push(1),d=h),k--,g--):q==l?(a.push(3),k--,d=l):(a.push(2),g--,d=m));a.reverse();b=void 0;k=[];for(g=0;g<a.length;g++)switch(a[g]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=Sc(e,0));b.aa++;e++;b.X.push(c[f]);f++;break;case 2:b||(b=Sc(e,
0));b.aa++;e++;break;case 3:b||(b=Sc(e,0)),b.X.push(c[f]),f++}b&&k.push(b);return k}function Uc(a,b){return a===b};var Vc=Q({dispatchEvent:Hc,addEventListener:Ic,removeEventListener:Kc});var Wc=null;function Xc(){Wc||(Wc=window.ShadyCSS&&window.ShadyCSS.ScopingShim);return Wc||null}function Yc(a,b,c){var d=Xc();return d&&"class"===b?(d.setElementClass(a,c),!0):!1}function Zc(a,b){var c=Xc();c&&c.unscopeNode(a,b)}function $c(a,b){var c=Xc();if(!c)return!0;if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE){c=!0;for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)c=c&&$c(a,b);return c}return a.nodeType!==Node.ELEMENT_NODE?!0:c.currentScopeForNode(a)===b}
function ad(a){if(a.nodeType!==Node.ELEMENT_NODE)return"";var b=Xc();return b?b.currentScopeForNode(a):""}function bd(a,b){if(a)for(a.nodeType===Node.ELEMENT_NODE&&b(a),a=a.__shady_firstChild;a;a=a.__shady_nextSibling)a.nodeType===Node.ELEMENT_NODE&&bd(a,b)};var cd=window.document,dd=M.ma,ed=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),fd=ed&&ed.get;function gd(a){for(var b;b=a.__shady_firstChild;)a.__shady_removeChild(b)}function hd(a){var b=L(a);if(b&&void 0!==b.da)for(b=a.__shady_firstChild;b;b=b.__shady_nextSibling)hd(b);if(a=L(a))a.da=void 0}function id(a){var b=a;a&&"slot"===a.localName&&(b=(b=(b=L(a))&&b.T)&&b.length?b[0]:id(a.__shady_nextSibling));return b}
function jd(a,b,c){if(a=(a=L(a))&&a.W){if(b)if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE)for(var d=0,e=b.childNodes.length;d<e;d++)a.addedNodes.push(b.childNodes[d]);else a.addedNodes.push(b);c&&a.removedNodes.push(c);Mb(a)}}
var qd=Q({get parentNode(){var a=L(this);a=a&&a.parentNode;return void 0!==a?a:this.__shady_native_parentNode},get firstChild(){var a=L(this);a=a&&a.firstChild;return void 0!==a?a:this.__shady_native_firstChild},get lastChild(){var a=L(this);a=a&&a.lastChild;return void 0!==a?a:this.__shady_native_lastChild},get nextSibling(){var a=L(this);a=a&&a.nextSibling;return void 0!==a?a:this.__shady_native_nextSibling},get previousSibling(){var a=L(this);a=a&&a.previousSibling;return void 0!==a?a:this.__shady_native_previousSibling},
get childNodes(){if(rb(this)){var a=L(this);if(!a.childNodes){a.childNodes=[];for(var b=this.__shady_firstChild;b;b=b.__shady_nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=this.__shady_native_childNodes;c.item=function(d){return c[d]};return c},get parentElement(){var a=L(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:this.__shady_native_parentElement},get isConnected(){if(fd&&fd.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;
var a=this.ownerDocument;if(Ab){if(a.__shady_native_contains(this))return!0}else if(a.documentElement&&a.documentElement.__shady_native_contains(this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.__shady_parentNode||(O(a)?a.host:void 0);return!!(a&&a instanceof Document)},get textContent(){if(rb(this)){for(var a=[],b=this.__shady_firstChild;b;b=b.__shady_nextSibling)b.nodeType!==Node.COMMENT_NODE&&a.push(b.__shady_textContent);return a.join("")}return this.__shady_native_textContent},set textContent(a){if("undefined"===
typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!rb(this)&&M.D){var b=this.__shady_firstChild;(b!=this.__shady_lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&gd(this);this.__shady_native_textContent=a}else gd(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_insertBefore(document.createTextNode(a));break;default:this.nodeValue=a}},insertBefore:function(a,b){if(this.ownerDocument!==cd&&a.ownerDocument!==cd)return this.__shady_native_insertBefore(a,
b),a;if(a===this)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(b){var c=L(b);c=c&&c.parentNode;if(void 0!==c&&c!==this||void 0===c&&b.__shady_native_parentNode!==this)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(b===a)return a;jd(this,a);var d=[],e=(c=kd(this))?c.host.localName:ad(this),f=a.__shady_parentNode;if(f){var g=ad(a);var h=!!c||!kd(a)||
dd&&void 0!==this.__noInsertionPoint;f.__shady_removeChild(a,h)}f=!0;var k=(!dd||void 0===a.__noInsertionPoint&&void 0===this.__noInsertionPoint)&&!$c(a,e),l=c&&!a.__noInsertionPoint&&(!dd||a.nodeType===Node.DOCUMENT_FRAGMENT_NODE);if(l||k)k&&(g=g||ad(a)),bd(a,function(m){l&&"slot"===m.localName&&d.push(m);if(k){var q=g;Xc()&&(q&&Zc(m,q),(q=Xc())&&q.scopeNode(m,e))}});d.length&&(ld(c),c.c.push.apply(c.c,d instanceof Array?d:da(ca(d))),md(c));rb(this)&&(nd(a,this,b),c=L(this),sb(this)?(md(c.root),
f=!1):c.root&&(f=!1));f?(c=O(this)?this.host:this,b?(b=id(b),c.__shady_native_insertBefore(a,b)):c.__shady_native_appendChild(a)):a.ownerDocument!==this.ownerDocument&&this.ownerDocument.adoptNode(a);return a},appendChild:function(a){if(this!=a||!O(a))return this.__shady_insertBefore(a)},removeChild:function(a,b){b=void 0===b?!1:b;if(this.ownerDocument!==cd)return this.__shady_native_removeChild(a);if(a.__shady_parentNode!==this)throw Error("The node to be removed is not a child of this node: "+a);
jd(this,null,a);var c=kd(a),d=c&&od(c,a),e=L(this);if(rb(this)&&(pd(a,this),sb(this))){md(e.root);var f=!0}if(Xc()&&!b&&c&&a.nodeType!==Node.TEXT_NODE){var g=ad(a);bd(a,function(h){Zc(h,g)})}hd(a);c&&((b=this&&"slot"===this.localName)&&(f=!0),(d||b)&&md(c));f||(f=O(this)?this.host:this,(!e.root&&"slot"!==a.localName||f===a.__shady_native_parentNode)&&f.__shady_native_removeChild(a));return a},replaceChild:function(a,b){this.__shady_insertBefore(a,b);this.__shady_removeChild(b);return a},cloneNode:function(a){if("template"==
this.localName)return this.__shady_native_cloneNode(a);var b=this.__shady_native_cloneNode(!1);if(a&&b.nodeType!==Node.ATTRIBUTE_NODE){a=this.__shady_firstChild;for(var c;a;a=a.__shady_nextSibling)c=a.__shady_cloneNode(!0),b.__shady_appendChild(c)}return b},getRootNode:function(a){if(this&&this.nodeType){var b=B(this),c=b.da;void 0===c&&(O(this)?(c=this,b.da=c):(c=(c=this.__shady_parentNode)?c.__shady_getRootNode(a):this,document.documentElement.__shady_native_contains(this)&&(b.da=c)));return c}},
contains:function(a){return Bb(this,a)}});var sd=Q({get assignedSlot(){var a=this.__shady_parentNode;(a=a&&a.__shady_shadowRoot)&&rd(a);return(a=L(this))&&a.assignedSlot||null}});function td(a,b,c){var d=[];vd(a,b,c,d);return d}function vd(a,b,c,d){for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling){var e;if(e=a.nodeType===Node.ELEMENT_NODE){e=a;var f=b,g=c,h=d,k=f(e);k&&h.push(e);g&&g(k)?e=k:(vd(e,f,g,h),e=void 0)}if(e)break}}
var wd=Q({get firstElementChild(){var a=L(this);if(a&&void 0!==a.firstChild){for(a=this.__shady_firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_firstElementChild},get lastElementChild(){var a=L(this);if(a&&void 0!==a.lastChild){for(a=this.__shady_lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_lastElementChild},get children(){return rb(this)?Cb(Array.prototype.filter.call(Eb(this),
function(a){return a.nodeType===Node.ELEMENT_NODE})):this.__shady_native_children},get childElementCount(){var a=this.__shady_children;return a?a.length:0}}),xd=Q({querySelector:function(a){return td(this,function(b){return vb.call(b,a)},function(b){return!!b})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(this.__shady_native_querySelectorAll(a));var c=this.__shady_getRootNode();return Cb(b.filter(function(d){return d.__shady_getRootNode()==c}))}return Cb(td(this,function(d){return vb.call(d,
a)}))}}),yd=M.ma&&!M.G?Object.assign({},wd):wd;Object.assign(wd,xd);var zd=window.document;function Ad(a,b){if("slot"===b)a=a.__shady_parentNode,sb(a)&&md(L(a).root);else if("slot"===a.localName&&"name"===b&&(b=kd(a))){if(b.a){Bd(b);var c=a.Ba,d=Cd(a);if(d!==c){c=b.b[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.b[d]||(b.b[d]=[]);c.push(a);1<c.length&&(b.b[d]=Dd(c))}}md(b)}}
var Ed=Q({get previousElementSibling(){var a=L(this);if(a&&void 0!==a.previousSibling){for(a=this.__shady_previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_previousElementSibling},get nextElementSibling(){var a=L(this);if(a&&void 0!==a.nextSibling){for(a=this.__shady_nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_nextElementSibling},get slot(){return this.getAttribute("slot")},
set slot(a){this.__shady_setAttribute("slot",a)},get className(){return this.getAttribute("class")||""},set className(a){this.__shady_setAttribute("class",a)},setAttribute:function(a,b){this.ownerDocument!==zd?this.__shady_native_setAttribute(a,b):Yc(this,a,b)||(this.__shady_native_setAttribute(a,b),Ad(this,a))},removeAttribute:function(a){this.ownerDocument!==zd?this.__shady_native_removeAttribute(a):Yc(this,a,"")?""===this.getAttribute(a)&&this.__shady_native_removeAttribute(a):(this.__shady_native_removeAttribute(a),
Ad(this,a))}}),Jd=Q({attachShadow:function(a){if(!this)throw Error("Must provide a host.");if(!a)throw Error("Not enough arguments.");if(a.shadyUpgradeFragment&&!M.ya){var b=a.shadyUpgradeFragment;b.__proto__=ShadowRoot.prototype;Fd(b,this,a);Gd(b,b);a=b.__noInsertionPoint?null:b.querySelectorAll("slot");b.__noInsertionPoint=void 0;if(a&&a.length){var c=b;ld(c);c.c.push.apply(c.c,a instanceof Array?a:da(ca(a)));md(b)}b.host.__shady_native_appendChild(b)}else b=new Hd(Id,this,a);return this.__CE_shadowRoot=
b},get shadowRoot(){var a=L(this);return a&&a.Sa||null}});Object.assign(Ed,Jd);var Kd=document.implementation.createHTMLDocument("inert"),Ld=Q({get innerHTML(){return rb(this)?Wb("template"===this.localName?this.content:this,Eb):this.__shady_native_innerHTML},set innerHTML(a){if("template"===this.localName)this.__shady_native_innerHTML=a;else{gd(this);var b=this.localName||"div";b=this.namespaceURI&&this.namespaceURI!==Kd.namespaceURI?Kd.createElementNS(this.namespaceURI,b):Kd.createElement(b);for(M.D?b.__shady_native_innerHTML=a:b.innerHTML=a;a=b.__shady_firstChild;)this.__shady_insertBefore(a)}}});var Md=Q({blur:function(){var a=L(this);(a=(a=a&&a.root)&&a.activeElement)?a.__shady_blur():this.__shady_native_blur()}});M.ma||Rc.forEach(function(a){Md[a]={set:function(b){var c=B(this),d=a.substring(2);c.N||(c.N={});c.N[a]&&this.removeEventListener(d,c.N[a]);this.__shady_addEventListener(d,b);c.N[a]=b},get:function(){var b=L(this);return b&&b.N&&b.N[a]},configurable:!0}});var Nd=Q({assignedNodes:function(a){if("slot"===this.localName){var b=this.__shady_getRootNode();b&&O(b)&&rd(b);return(b=L(this))?(a&&a.flatten?b.T:b.assignedNodes)||[]:[]}},addEventListener:function(a,b,c){if("slot"!==this.localName||"slotchange"===a)Ic.call(this,a,b,c);else{"object"!==typeof c&&(c={capture:!!c});var d=this.__shady_parentNode;if(!d)throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");c.O=this;d.__shady_addEventListener(a,b,c)}},removeEventListener:function(a,
b,c){if("slot"!==this.localName||"slotchange"===a)Kc.call(this,a,b,c);else{"object"!==typeof c&&(c={capture:!!c});var d=this.__shady_parentNode;if(!d)throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");c.O=this;d.__shady_removeEventListener(a,b,c)}}});var Od=Q({getElementById:function(a){return""===a?null:td(this,function(b){return b.id==a},function(b){return!!b})[0]||null}});var Pd=Q({get activeElement(){var a=M.D?document.__shady_native_activeElement:document.activeElement;if(!a||!a.nodeType)return null;var b=!!O(this);if(!(this===document||b&&this.host!==a&&this.host.__shady_native_contains(a)))return null;for(b=kd(a);b&&b!==this;)a=b.host,b=kd(a);return this===document?b?null:a:b===this?a:null}});var Qd=window.document,Rd=Q({importNode:function(a,b){if(a.ownerDocument!==Qd||"template"===a.localName)return this.__shady_native_importNode(a,b);var c=this.__shady_native_importNode(a,!1);if(b)for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)b=this.__shady_importNode(a,!0),c.__shady_appendChild(b);return c}});var Sd=Q({dispatchEvent:Hc,addEventListener:Ic.bind(window),removeEventListener:Kc.bind(window)});var Td={};Object.getOwnPropertyDescriptor(HTMLElement.prototype,"parentElement")&&(Td.parentElement=qd.parentElement);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"contains")&&(Td.contains=qd.contains);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"children")&&(Td.children=wd.children);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"innerHTML")&&(Td.innerHTML=Ld.innerHTML);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"className")&&(Td.className=Ed.className);
var Ud={EventTarget:[Vc],Node:[qd,window.EventTarget?null:Vc],Text:[sd],Comment:[sd],CDATASection:[sd],ProcessingInstruction:[sd],Element:[Ed,wd,sd,!M.D||"innerHTML"in Element.prototype?Ld:null,window.HTMLSlotElement?null:Nd],HTMLElement:[Md,Td],HTMLSlotElement:[Nd],DocumentFragment:[yd,Od],Document:[Rd,yd,Od,Pd],Window:[Sd]},Vd=M.D?null:["innerHTML","textContent"];function Wd(a,b,c,d){b.forEach(function(e){return a&&e&&P(a,e,c,d)})}
function Xd(a){var b=a?null:Vd,c;for(c in Ud)Wd(window[c]&&window[c].prototype,Ud[c],a,b)}["Text","Comment","CDATASection","ProcessingInstruction"].forEach(function(a){var b=window[a],c=Object.create(b.prototype);c.__shady_protoIsPatched=!0;Wd(c,Ud.EventTarget);Wd(c,Ud.Node);Ud[a]&&Wd(c,Ud[a]);b.prototype.__shady_patchedProto=c});function Yd(a){a.__shady_protoIsPatched=!0;Wd(a,Ud.EventTarget);Wd(a,Ud.Node);Wd(a,Ud.Element);Wd(a,Ud.HTMLElement);Wd(a,Ud.HTMLSlotElement);return a};var Zd=M.la,$d=M.D;function ae(a,b){if(Zd&&!a.__shady_protoIsPatched&&!O(a)){var c=Object.getPrototypeOf(a),d=c.hasOwnProperty("__shady_patchedProto")&&c.__shady_patchedProto;d||(d=Object.create(c),Yd(d),c.__shady_patchedProto=d);Object.setPrototypeOf(a,d)}$d||(1===b?pc(a):2===b&&qc(a))}
function be(a,b,c,d){ae(a,1);d=d||null;var e=B(a),f=d?B(d):null;e.previousSibling=d?f.previousSibling:b.__shady_lastChild;if(f=L(e.previousSibling))f.nextSibling=a;if(f=L(e.nextSibling=d))f.previousSibling=a;e.parentNode=b;d?d===c.firstChild&&(c.firstChild=a):(c.lastChild=a,c.firstChild||(c.firstChild=a));c.childNodes=null}
function nd(a,b,c){ae(b,2);var d=B(b);void 0!==d.firstChild&&(d.childNodes=null);if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE)for(a=a.__shady_native_firstChild;a;a=a.__shady_native_nextSibling)be(a,b,d,c);else be(a,b,d,c)}
function pd(a,b){var c=B(a);b=B(b);a===b.firstChild&&(b.firstChild=c.nextSibling);a===b.lastChild&&(b.lastChild=c.previousSibling);a=c.previousSibling;var d=c.nextSibling;a&&(B(a).nextSibling=d);d&&(B(d).previousSibling=a);c.parentNode=c.previousSibling=c.nextSibling=void 0;void 0!==b.childNodes&&(b.childNodes=null)}
function Gd(a,b){var c=B(a);if(b||void 0===c.firstChild){c.childNodes=null;var d=c.firstChild=a.__shady_native_firstChild;c.lastChild=a.__shady_native_lastChild;ae(a,2);c=d;for(d=void 0;c;c=c.__shady_native_nextSibling){var e=B(c);e.parentNode=b||a;e.nextSibling=c.__shady_native_nextSibling;e.previousSibling=d||null;d=c;ae(c,1)}}};var ce=Q({addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.O=c.O||this;this.host.__shady_addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.O=c.O||this;this.host.__shady_removeEventListener(a,b,c)}});function de(a,b){P(a,ce,b);P(a,Pd,b);P(a,Ld,b);P(a,wd,b);M.G&&!b?(P(a,qd,b),P(a,Od,b)):M.D||(P(a,mc),P(a,kc),P(a,lc))};var Id={},ee=M.deferConnectionCallbacks&&"loading"===document.readyState,fe;function ge(a){var b=[];do b.unshift(a);while(a=a.__shady_parentNode);return b}function Hd(a,b,c){if(a!==Id)throw new TypeError("Illegal constructor");this.a=null;Fd(this,b,c)}
function Fd(a,b,c){a.host=b;a.mode=c&&c.mode;Gd(a.host);b=B(a.host);b.root=a;b.Sa="closed"!==a.mode?a:null;b=B(a);b.firstChild=b.lastChild=b.parentNode=b.nextSibling=b.previousSibling=null;if(M.preferPerformance)for(;b=a.host.__shady_native_firstChild;)a.host.__shady_native_removeChild(b);else md(a)}function md(a){a.R||(a.R=!0,Jb(function(){return rd(a)}))}
function rd(a){var b;if(b=a.R){for(var c;a;)a:{a.R&&(c=a),b=a;a=b.host.__shady_getRootNode();if(O(a)&&(b=L(b.host))&&0<b.Z)break a;a=void 0}b=c}(c=b)&&c._renderSelf()}
Hd.prototype._renderSelf=function(){var a=ee;ee=!0;this.R=!1;if(this.a){Bd(this);for(var b=0,c;b<this.a.length;b++){c=this.a[b];var d=L(c),e=d.assignedNodes;d.assignedNodes=[];d.T=[];if(d.ra=e)for(d=0;d<e.length;d++){var f=L(e[d]);f.fa=f.assignedSlot;f.assignedSlot===c&&(f.assignedSlot=null)}}for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)he(this,b);for(b=0;b<this.a.length;b++){c=this.a[b];e=L(c);if(!e.assignedNodes.length)for(d=c.__shady_firstChild;d;d=d.__shady_nextSibling)he(this,
d,c);(d=(d=L(c.__shady_parentNode))&&d.root)&&(tb(d)||d.R)&&d._renderSelf();ie(this,e.T,e.assignedNodes);if(d=e.ra){for(f=0;f<d.length;f++)L(d[f]).fa=null;e.ra=null;d.length>e.assignedNodes.length&&(e.ha=!0)}e.ha&&(e.ha=!1,je(this,c))}c=this.a;b=[];for(e=0;e<c.length;e++)d=c[e].__shady_parentNode,(f=L(d))&&f.root||!(0>b.indexOf(d))||b.push(d);for(c=0;c<b.length;c++){f=b[c];e=f===this?this.host:f;d=[];for(f=f.__shady_firstChild;f;f=f.__shady_nextSibling)if("slot"==f.localName)for(var g=L(f).T,h=0;h<
g.length;h++)d.push(g[h]);else d.push(f);f=Db(e);g=Tc(d,d.length,f,f.length);for(var k=h=0,l=void 0;h<g.length&&(l=g[h]);h++){for(var m=0,q=void 0;m<l.X.length&&(q=l.X[m]);m++)q.__shady_native_parentNode===e&&e.__shady_native_removeChild(q),f.splice(l.index+k,1);k-=l.aa}k=0;for(l=void 0;k<g.length&&(l=g[k]);k++)for(h=f[l.index],m=l.index;m<l.index+l.aa;m++)q=d[m],e.__shady_native_insertBefore(q,h),f.splice(m,0,q)}}if(!M.preferPerformance&&!this.qa)for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)c=
L(b),b.__shady_native_parentNode!==this.host||"slot"!==b.localName&&c.assignedSlot||this.host.__shady_native_removeChild(b);this.qa=!0;ee=a;fe&&fe()};function he(a,b,c){var d=B(b),e=d.fa;d.fa=null;c||(c=(a=a.b[b.__shady_slot||"__catchall"])&&a[0]);c?(B(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(B(d.assignedSlot).ha=!0)}
function ie(a,b,c){for(var d=0,e=void 0;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=L(e).assignedNodes;f&&f.length&&ie(a,b,f)}else b.push(c[d])}function je(a,b){b.__shady_native_dispatchEvent(new Event("slotchange"));b=L(b);b.assignedSlot&&je(a,b.assignedSlot)}function ld(a){a.c=a.c||[];a.a=a.a||[];a.b=a.b||{}}
function Bd(a){if(a.c&&a.c.length){for(var b=a.c,c,d=0;d<b.length;d++){var e=b[d];Gd(e);var f=e.__shady_parentNode;Gd(f);f=L(f);f.Z=(f.Z||0)+1;f=Cd(e);a.b[f]?(c=c||{},c[f]=!0,a.b[f].push(e)):a.b[f]=[e];a.a.push(e)}if(c)for(var g in c)a.b[g]=Dd(a.b[g]);a.c=[]}}function Cd(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.Ba=b}
function Dd(a){return a.sort(function(b,c){b=ge(b);for(var d=ge(c),e=0;e<b.length;e++){c=b[e];var f=d[e];if(c!==f)return b=Eb(c.__shady_parentNode),b.indexOf(c)-b.indexOf(f)}})}
function od(a,b){if(a.a){Bd(a);var c=a.b,d;for(d in c)for(var e=c[d],f=0;f<e.length;f++){var g=e[f];if(Bb(b,g)){e.splice(f,1);var h=a.a.indexOf(g);0<=h&&(a.a.splice(h,1),(h=L(g.__shady_parentNode))&&h.Z&&h.Z--);f--;g=L(g);if(h=g.T)for(var k=0;k<h.length;k++){var l=h[k],m=l.__shady_native_parentNode;m&&m.__shady_native_removeChild(l)}g.T=[];g.assignedNodes=[];h=!0}}return h}}function tb(a){Bd(a);return!(!a.a||!a.a.length)}
(function(a){a.__proto__=DocumentFragment.prototype;de(a,"__shady_");de(a);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
configurable:!0})})})(Hd.prototype);
if(window.customElements&&M.ia&&!M.preferPerformance){var ke=new Map;fe=function(){var a=[];ke.forEach(function(d,e){a.push([e,d])});ke.clear();for(var b=0;b<a.length;b++){var c=a[b][0];a[b][1]?c.__shadydom_connectedCallback():c.__shadydom_disconnectedCallback()}};ee&&document.addEventListener("readystatechange",function(){ee=!1;fe()},{once:!0});var le=function(a,b,c){var d=0,e="__isConnected"+d++;if(b||c)a.prototype.connectedCallback=a.prototype.__shadydom_connectedCallback=function(){ee?ke.set(this,
!0):this[e]||(this[e]=!0,b&&b.call(this))},a.prototype.disconnectedCallback=a.prototype.__shadydom_disconnectedCallback=function(){ee?this.isConnected||ke.set(this,!1):this[e]&&(this[e]=!1,c&&c.call(this))};return a},me=window.customElements.define,define=function(a,b){var c=b.prototype.connectedCallback,d=b.prototype.disconnectedCallback;me.call(window.customElements,a,le(b,c,d));b.prototype.connectedCallback=c;b.prototype.disconnectedCallback=d};window.customElements.define=define;Object.defineProperty(window.CustomElementRegistry.prototype,
"define",{value:define,configurable:!0})}function kd(a){a=a.__shady_getRootNode();if(O(a))return a};function ne(a){this.node=a}w=ne.prototype;w.addEventListener=function(a,b,c){return this.node.__shady_addEventListener(a,b,c)};w.removeEventListener=function(a,b,c){return this.node.__shady_removeEventListener(a,b,c)};w.appendChild=function(a){return this.node.__shady_appendChild(a)};w.insertBefore=function(a,b){return this.node.__shady_insertBefore(a,b)};w.removeChild=function(a){return this.node.__shady_removeChild(a)};w.replaceChild=function(a,b){return this.node.__shady_replaceChild(a,b)};
w.cloneNode=function(a){return this.node.__shady_cloneNode(a)};w.getRootNode=function(a){return this.node.__shady_getRootNode(a)};w.contains=function(a){return this.node.__shady_contains(a)};w.dispatchEvent=function(a){return this.node.__shady_dispatchEvent(a)};w.setAttribute=function(a,b){this.node.__shady_setAttribute(a,b)};w.getAttribute=function(a){return this.node.__shady_native_getAttribute(a)};w.hasAttribute=function(a){return this.node.__shady_native_hasAttribute(a)};w.removeAttribute=function(a){this.node.__shady_removeAttribute(a)};
w.attachShadow=function(a){return this.node.__shady_attachShadow(a)};w.focus=function(){this.node.__shady_native_focus()};w.blur=function(){this.node.__shady_blur()};w.importNode=function(a,b){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_importNode(a,b)};w.getElementById=function(a){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_getElementById(a)};w.querySelector=function(a){return this.node.__shady_querySelector(a)};
w.querySelectorAll=function(a,b){return this.node.__shady_querySelectorAll(a,b)};w.assignedNodes=function(a){if("slot"===this.node.localName)return this.node.__shady_assignedNodes(a)};
ea.Object.defineProperties(ne.prototype,{activeElement:{configurable:!0,enumerable:!0,get:function(){if(O(this.node)||this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_activeElement}},_activeElement:{configurable:!0,enumerable:!0,get:function(){return this.activeElement}},host:{configurable:!0,enumerable:!0,get:function(){if(O(this.node))return this.node.host}},parentNode:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_parentNode}},firstChild:{configurable:!0,
enumerable:!0,get:function(){return this.node.__shady_firstChild}},lastChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_lastChild}},nextSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_nextSibling}},previousSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_previousSibling}},childNodes:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_childNodes}},parentElement:{configurable:!0,enumerable:!0,
get:function(){return this.node.__shady_parentElement}},firstElementChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_firstElementChild}},lastElementChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_lastElementChild}},nextElementSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_nextElementSibling}},previousElementSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_previousElementSibling}},
children:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_children}},childElementCount:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_childElementCount}},shadowRoot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_shadowRoot}},assignedSlot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_assignedSlot}},isConnected:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_isConnected}},innerHTML:{configurable:!0,
enumerable:!0,get:function(){return this.node.__shady_innerHTML},set:function(a){this.node.__shady_innerHTML=a}},textContent:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_textContent},set:function(a){this.node.__shady_textContent=a}},slot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_slot},set:function(a){this.node.__shady_slot=a}},className:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_className},set:function(a){return this.node.__shady_className=
a}}});Rc.forEach(function(a){Object.defineProperty(ne.prototype,a,{get:function(){return this.node["__shady_"+a]},set:function(b){this.node["__shady_"+a]=b},configurable:!0})});var oe=new WeakMap;function pe(a){if(O(a)||a instanceof ne)return a;var b=oe.get(a);b||(b=new ne(a),oe.set(a,b));return b};if(M.ia){var qe=M.D?function(a){return a}:function(a){qc(a);pc(a);return a},ShadyDOM={inUse:M.ia,patch:qe,isShadyRoot:O,enqueue:Jb,flush:Kb,flushInitial:function(a){!a.qa&&a.R&&rd(a)},settings:M,filterMutations:Pb,observeChildren:Nb,unobserveChildren:Ob,deferConnectionCallbacks:M.deferConnectionCallbacks,preferPerformance:M.preferPerformance,handlesDynamicScoping:!0,wrap:M.G?pe:qe,wrapIfNeeded:!0===M.G?pe:function(a){return a},Wrapper:ne,composedPath:zc,noPatch:M.G,patchOnDemand:M.la,nativeMethods:$b,
nativeTree:ac,patchElementProto:Yd};window.ShadyDOM=ShadyDOM;jc();Xd("__shady_");Object.defineProperty(document,"_activeElement",Pd.activeElement);P(Window.prototype,Sd,"__shady_");M.G?M.la&&P(Element.prototype,Jd):(Xd(),Qc());Lc();window.Event=Nc;window.CustomEvent=Oc;window.MouseEvent=Pc;window.ShadowRoot=Hd};var re=window.Document.prototype.createElement,se=window.Document.prototype.createElementNS,te=window.Document.prototype.importNode,ue=window.Document.prototype.prepend,ve=window.Document.prototype.append,we=window.DocumentFragment.prototype.prepend,xe=window.DocumentFragment.prototype.append,ye=window.Node.prototype.cloneNode,ze=window.Node.prototype.appendChild,Ae=window.Node.prototype.insertBefore,Be=window.Node.prototype.removeChild,Ce=window.Node.prototype.replaceChild,De=Object.getOwnPropertyDescriptor(window.Node.prototype,
"textContent"),Ee=window.Element.prototype.attachShadow,Fe=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),Ge=window.Element.prototype.getAttribute,He=window.Element.prototype.setAttribute,Ie=window.Element.prototype.removeAttribute,Je=window.Element.prototype.getAttributeNS,Ke=window.Element.prototype.setAttributeNS,Le=window.Element.prototype.removeAttributeNS,Me=window.Element.prototype.insertAdjacentElement,Ne=window.Element.prototype.insertAdjacentHTML,Oe=window.Element.prototype.prepend,
Pe=window.Element.prototype.append,Qe=window.Element.prototype.before,Re=window.Element.prototype.after,Se=window.Element.prototype.replaceWith,Te=window.Element.prototype.remove,Ue=window.HTMLElement,Ve=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),We=window.HTMLElement.prototype.insertAdjacentElement,Xe=window.HTMLElement.prototype.insertAdjacentHTML;var Ye=new Set;"annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" ").forEach(function(a){return Ye.add(a)});function Ze(a){var b=Ye.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return!b&&a}var $e=document.contains?document.contains.bind(document):document.documentElement.contains.bind(document.documentElement);
function T(a){var b=a.isConnected;if(void 0!==b)return b;if($e(a))return!0;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}function af(a){var b=a.children;if(b)return Array.prototype.slice.call(b);b=[];for(a=a.firstChild;a;a=a.nextSibling)a.nodeType===Node.ELEMENT_NODE&&b.push(a);return b}
function bf(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
function cf(a,b,c){for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;void 0===c&&(c=new Set);if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)cf(d,b,c);d=bf(a,e);continue}else if("template"===f){d=bf(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)cf(e,b,c)}d=d.firstChild?d.firstChild:bf(a,d)}}function U(a,b,c){a[b]=c};function df(a){var b=document;this.b=a;this.a=b;this.P=void 0;ef(this.b,this.a);"loading"===this.a.readyState&&(this.P=new MutationObserver(this.c.bind(this)),this.P.observe(this.a,{childList:!0,subtree:!0}))}function ff(a){a.P&&a.P.disconnect()}df.prototype.c=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||ff(this);for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)ef(this.b,c[d])};function gf(){var a=this;this.a=this.w=void 0;this.b=new Promise(function(b){a.a=b;a.w&&b(a.w)})}gf.prototype.resolve=function(a){if(this.w)throw Error("Already resolved.");this.w=a;this.a&&this.a(a)};function V(a){this.f=new Map;this.u=new Map;this.ta=new Map;this.U=!1;this.b=a;this.ja=new Map;this.c=function(b){return b()};this.a=!1;this.F=[];this.va=a.f?new df(a):void 0}w=V.prototype;w.Qa=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructor getters must be functions.");hf(this,a);this.f.set(a,b);this.F.push(a);this.a||(this.a=!0,this.c(function(){return jf(c)}))};
w.define=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");hf(this,a);kf(this,a,b);this.F.push(a);this.a||(this.a=!0,this.c(function(){return jf(c)}))};function hf(a,b){if(!Ze(b))throw new SyntaxError("The element name '"+b+"' is not valid.");if(lf(a,b))throw Error("A custom element with name '"+b+"' has already been defined.");if(a.U)throw Error("A custom element is already being defined.");}
function kf(a,b,c){a.U=!0;var d;try{var e=function(m){var q=f[m];if(void 0!==q&&!(q instanceof Function))throw Error("The '"+m+"' callback must be a function.");return q},f=c.prototype;if(!(f instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var g=e("connectedCallback");var h=e("disconnectedCallback");var k=e("adoptedCallback");var l=(d=e("attributeChangedCallback"))&&c.observedAttributes||[]}catch(m){throw m;}finally{a.U=!1}c={localName:b,constructorFunction:c,
connectedCallback:g,disconnectedCallback:h,adoptedCallback:k,attributeChangedCallback:d,observedAttributes:l,constructionStack:[]};a.u.set(b,c);a.ta.set(c.constructorFunction,c);return c}w.upgrade=function(a){ef(this.b,a)};
function jf(a){if(!1!==a.a){a.a=!1;for(var b=[],c=a.F,d=new Map,e=0;e<c.length;e++)d.set(c[e],[]);ef(a.b,document,{upgrade:function(k){if(void 0===k.__CE_state){var l=k.localName,m=d.get(l);m?m.push(k):a.u.has(l)&&b.push(k)}}});for(e=0;e<b.length;e++)mf(a.b,b[e]);for(e=0;e<c.length;e++){for(var f=c[e],g=d.get(f),h=0;h<g.length;h++)mf(a.b,g[h]);(f=a.ja.get(f))&&f.resolve(void 0)}c.length=0}}w.get=function(a){if(a=lf(this,a))return a.constructorFunction};
w.whenDefined=function(a){if(!Ze(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.ja.get(a);if(b)return b.b;b=new gf;this.ja.set(a,b);var c=this.u.has(a)||this.f.has(a);a=-1===this.F.indexOf(a);c&&a&&b.resolve(void 0);return b.b};w.polyfillWrapFlushCallback=function(a){this.va&&ff(this.va);var b=this.c;this.c=function(c){return a(function(){return b(c)})}};
function lf(a,b){var c=a.u.get(b);if(c)return c;if(c=a.f.get(b)){a.f.delete(b);try{return kf(a,b,c())}catch(d){nf(d)}}}window.CustomElementRegistry=V;V.prototype.define=V.prototype.define;V.prototype.upgrade=V.prototype.upgrade;V.prototype.get=V.prototype.get;V.prototype.whenDefined=V.prototype.whenDefined;V.prototype.polyfillDefineLazy=V.prototype.Qa;V.prototype.polyfillWrapFlushCallback=V.prototype.polyfillWrapFlushCallback;function of(){var a=pf&&pf.noDocumentConstructionObserver,b=pf&&pf.shadyDomFastWalk;this.b=[];this.c=[];this.a=!1;this.shadyDomFastWalk=b;this.f=!a}function qf(a,b,c,d){var e=window.ShadyDOM;if(a.shadyDomFastWalk&&e&&e.inUse){if(b.nodeType===Node.ELEMENT_NODE&&c(b),b.querySelectorAll)for(a=e.nativeMethods.querySelectorAll.call(b,"*"),b=0;b<a.length;b++)c(a[b])}else cf(b,c,d)}function rf(a,b){a.a=!0;a.b.push(b)}function sf(a,b){a.a=!0;a.c.push(b)}
function tf(a,b){a.a&&qf(a,b,function(c){return uf(a,c)})}function uf(a,b){if(a.a&&!b.__CE_patched){b.__CE_patched=!0;for(var c=0;c<a.b.length;c++)a.b[c](b);for(c=0;c<a.c.length;c++)a.c[c](b)}}function vf(a,b){var c=[];qf(a,b,function(e){return c.push(e)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):mf(a,d)}}function wf(a,b){var c=[];qf(a,b,function(e){return c.push(e)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
function ef(a,b,c){c=void 0===c?{}:c;var d=c.Za,e=c.upgrade||function(g){return mf(a,g)},f=[];qf(a,b,function(g){a.a&&uf(a,g);if("link"===g.localName&&"import"===g.getAttribute("rel")){var h=g.import;h instanceof Node&&(h.__CE_isImportDocument=!0,h.__CE_registry=document.__CE_registry);h&&"complete"===h.readyState?h.__CE_documentLoadHandled=!0:g.addEventListener("load",function(){var k=g.import;if(!k.__CE_documentLoadHandled){k.__CE_documentLoadHandled=!0;var l=new Set;d&&(d.forEach(function(m){return l.add(m)}),
l.delete(k));ef(a,k,{Za:l,upgrade:e})}})}else f.push(g)},d);for(b=0;b<f.length;b++)e(f[b])}
function mf(a,b){try{var c=b.ownerDocument,d=c.__CE_registry;var e=d&&(c.defaultView||c.__CE_isImportDocument)?lf(d,b.localName):void 0;if(e&&void 0===b.__CE_state){e.constructionStack.push(b);try{try{if(new e.constructorFunction!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{e.constructionStack.pop()}}catch(k){throw b.__CE_state=2,k;}b.__CE_state=1;b.__CE_definition=e;if(e.attributeChangedCallback&&b.hasAttributes()){var f=e.observedAttributes;
for(e=0;e<f.length;e++){var g=f[e],h=b.getAttribute(g);null!==h&&a.attributeChangedCallback(b,g,null,h,null)}}T(b)&&a.connectedCallback(b)}}catch(k){nf(k)}}of.prototype.connectedCallback=function(a){var b=a.__CE_definition;if(b.connectedCallback)try{b.connectedCallback.call(a)}catch(c){nf(c)}};of.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;if(b.disconnectedCallback)try{b.disconnectedCallback.call(a)}catch(c){nf(c)}};
of.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;if(f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b))try{f.attributeChangedCallback.call(a,b,c,d,e)}catch(g){nf(g)}};
function xf(a,b,c,d){var e=b.__CE_registry;if(e&&(null===d||"http://www.w3.org/1999/xhtml"===d)&&(e=lf(e,c)))try{var f=new e.constructorFunction;if(void 0===f.__CE_state||void 0===f.__CE_definition)throw Error("Failed to construct '"+c+"': The returned value was not constructed with the HTMLElement constructor.");if("http://www.w3.org/1999/xhtml"!==f.namespaceURI)throw Error("Failed to construct '"+c+"': The constructed element's namespace must be the HTML namespace.");if(f.hasAttributes())throw Error("Failed to construct '"+
c+"': The constructed element must not have any attributes.");if(null!==f.firstChild)throw Error("Failed to construct '"+c+"': The constructed element must not have any children.");if(null!==f.parentNode)throw Error("Failed to construct '"+c+"': The constructed element must not have a parent node.");if(f.ownerDocument!==b)throw Error("Failed to construct '"+c+"': The constructed element's owner document is incorrect.");if(f.localName!==c)throw Error("Failed to construct '"+c+"': The constructed element's local name is incorrect.");
return f}catch(g){return nf(g),b=null===d?re.call(b,c):se.call(b,d,c),Object.setPrototypeOf(b,HTMLUnknownElement.prototype),b.__CE_state=2,b.__CE_definition=void 0,uf(a,b),b}b=null===d?re.call(b,c):se.call(b,d,c);uf(a,b);return b}
function nf(a){var b=a.message,c=a.sourceURL||a.fileName||"",d=a.line||a.lineNumber||0,e=a.column||a.columnNumber||0,f=void 0;void 0===ErrorEvent.prototype.initErrorEvent?f=new ErrorEvent("error",{cancelable:!0,message:b,filename:c,lineno:d,colno:e,error:a}):(f=document.createEvent("ErrorEvent"),f.initErrorEvent("error",!1,!0,b,c,d),f.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{configurable:!0,get:function(){return!0}})});void 0===f.error&&Object.defineProperty(f,"error",
{configurable:!0,enumerable:!0,get:function(){return a}});window.dispatchEvent(f);f.defaultPrevented||console.error(a)};var yf=new function(){};function zf(a){window.HTMLElement=function(){function b(){var c=this.constructor;var d=document.__CE_registry.ta.get(c);if(!d)throw Error("Failed to construct a custom element: The constructor was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=re.call(document,d.localName),Object.setPrototypeOf(e,c.prototype),e.__CE_state=1,e.__CE_definition=d,uf(a,e),e;var f=e.length-1,g=e[f];if(g===yf)throw Error("Failed to construct '"+d.localName+"': This element was already constructed.");
e[f]=yf;Object.setPrototypeOf(g,c.prototype);uf(a,g);return g}b.prototype=Ue.prototype;Object.defineProperty(b.prototype,"constructor",{writable:!0,configurable:!0,enumerable:!1,value:b});return b}()};function Af(a,b,c){function d(e){return function(f){for(var g=[],h=0;h<arguments.length;++h)g[h]=arguments[h];h=[];for(var k=[],l=0;l<g.length;l++){var m=g[l];m instanceof Element&&T(m)&&k.push(m);if(m instanceof DocumentFragment)for(m=m.firstChild;m;m=m.nextSibling)h.push(m);else h.push(m)}e.apply(this,g);for(g=0;g<k.length;g++)wf(a,k[g]);if(T(this))for(g=0;g<h.length;g++)k=h[g],k instanceof Element&&vf(a,k)}}void 0!==c.prepend&&U(b,"prepend",d(c.prepend));void 0!==c.append&&U(b,"append",d(c.append))}
;function Bf(a){U(Document.prototype,"createElement",function(b){return xf(a,this,b,null)});U(Document.prototype,"importNode",function(b,c){b=te.call(this,b,!!c);this.__CE_registry?ef(a,b):tf(a,b);return b});U(Document.prototype,"createElementNS",function(b,c){return xf(a,this,c,b)});Af(a,Document.prototype,{prepend:ue,append:ve})};function Cf(a){function b(c,d){Object.defineProperty(c,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(e){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,e);else{var f=void 0;if(this.firstChild){var g=this.childNodes,h=g.length;if(0<h&&T(this)){f=Array(h);for(var k=0;k<h;k++)f[k]=g[k]}}d.set.call(this,e);if(f)for(e=0;e<f.length;e++)wf(a,f[e])}}})}U(Node.prototype,"insertBefore",function(c,d){if(c instanceof DocumentFragment){var e=af(c);c=Ae.call(this,c,d);if(T(this))for(d=
0;d<e.length;d++)vf(a,e[d]);return c}e=c instanceof Element&&T(c);d=Ae.call(this,c,d);e&&wf(a,c);T(this)&&vf(a,c);return d});U(Node.prototype,"appendChild",function(c){if(c instanceof DocumentFragment){var d=af(c);c=ze.call(this,c);if(T(this))for(var e=0;e<d.length;e++)vf(a,d[e]);return c}d=c instanceof Element&&T(c);e=ze.call(this,c);d&&wf(a,c);T(this)&&vf(a,c);return e});U(Node.prototype,"cloneNode",function(c){c=ye.call(this,!!c);this.ownerDocument.__CE_registry?ef(a,c):tf(a,c);return c});U(Node.prototype,
"removeChild",function(c){var d=c instanceof Element&&T(c),e=Be.call(this,c);d&&wf(a,c);return e});U(Node.prototype,"replaceChild",function(c,d){if(c instanceof DocumentFragment){var e=af(c);c=Ce.call(this,c,d);if(T(this))for(wf(a,d),d=0;d<e.length;d++)vf(a,e[d]);return c}e=c instanceof Element&&T(c);var f=Ce.call(this,c,d),g=T(this);g&&wf(a,d);e&&wf(a,c);g&&vf(a,c);return f});De&&De.get?b(Node.prototype,De):rf(a,function(c){b(c,{enumerable:!0,configurable:!0,get:function(){for(var d=[],e=this.firstChild;e;e=
e.nextSibling)e.nodeType!==Node.COMMENT_NODE&&d.push(e.textContent);return d.join("")},set:function(d){for(;this.firstChild;)Be.call(this,this.firstChild);null!=d&&""!==d&&ze.call(this,document.createTextNode(d))}})})};function Df(a){function b(d){return function(e){for(var f=[],g=0;g<arguments.length;++g)f[g]=arguments[g];g=[];for(var h=[],k=0;k<f.length;k++){var l=f[k];l instanceof Element&&T(l)&&h.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)g.push(l);else g.push(l)}d.apply(this,f);for(f=0;f<h.length;f++)wf(a,h[f]);if(T(this))for(f=0;f<g.length;f++)h=g[f],h instanceof Element&&vf(a,h)}}var c=Element.prototype;void 0!==Qe&&U(c,"before",b(Qe));void 0!==Re&&U(c,"after",b(Re));void 0!==
Se&&U(c,"replaceWith",function(d){for(var e=[],f=0;f<arguments.length;++f)e[f]=arguments[f];f=[];for(var g=[],h=0;h<e.length;h++){var k=e[h];k instanceof Element&&T(k)&&g.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)f.push(k);else f.push(k)}h=T(this);Se.apply(this,e);for(e=0;e<g.length;e++)wf(a,g[e]);if(h)for(wf(a,this),e=0;e<f.length;e++)g=f[e],g instanceof Element&&vf(a,g)});void 0!==Te&&U(c,"remove",function(){var d=T(this);Te.call(this);d&&wf(a,this)})};function Ef(a){function b(e,f){Object.defineProperty(e,"innerHTML",{enumerable:f.enumerable,configurable:!0,get:f.get,set:function(g){var h=this,k=void 0;T(this)&&(k=[],qf(a,this,function(q){q!==h&&k.push(q)}));f.set.call(this,g);if(k)for(var l=0;l<k.length;l++){var m=k[l];1===m.__CE_state&&a.disconnectedCallback(m)}this.ownerDocument.__CE_registry?ef(a,this):tf(a,this);return g}})}function c(e,f){U(e,"insertAdjacentElement",function(g,h){var k=T(h);g=f.call(this,g,h);k&&wf(a,h);T(g)&&vf(a,h);return g})}
function d(e,f){function g(h,k){for(var l=[];h!==k;h=h.nextSibling)l.push(h);for(k=0;k<l.length;k++)ef(a,l[k])}U(e,"insertAdjacentHTML",function(h,k){h=h.toLowerCase();if("beforebegin"===h){var l=this.previousSibling;f.call(this,h,k);g(l||this.parentNode.firstChild,this)}else if("afterbegin"===h)l=this.firstChild,f.call(this,h,k),g(this.firstChild,l);else if("beforeend"===h)l=this.lastChild,f.call(this,h,k),g(l||this.firstChild,null);else if("afterend"===h)l=this.nextSibling,f.call(this,h,k),g(this.nextSibling,
l);else throw new SyntaxError("The value provided ("+String(h)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");})}Ee&&U(Element.prototype,"attachShadow",function(e){e=Ee.call(this,e);if(a.a&&!e.__CE_patched){e.__CE_patched=!0;for(var f=0;f<a.b.length;f++)a.b[f](e)}return this.__CE_shadowRoot=e});Fe&&Fe.get?b(Element.prototype,Fe):Ve&&Ve.get?b(HTMLElement.prototype,Ve):sf(a,function(e){b(e,{enumerable:!0,configurable:!0,get:function(){return ye.call(this,!0).innerHTML},
set:function(f){var g="template"===this.localName,h=g?this.content:this,k=se.call(document,this.namespaceURI,this.localName);for(k.innerHTML=f;0<h.childNodes.length;)Be.call(h,h.childNodes[0]);for(f=g?k.content:k;0<f.childNodes.length;)ze.call(h,f.childNodes[0])}})});U(Element.prototype,"setAttribute",function(e,f){if(1!==this.__CE_state)return He.call(this,e,f);var g=Ge.call(this,e);He.call(this,e,f);f=Ge.call(this,e);a.attributeChangedCallback(this,e,g,f,null)});U(Element.prototype,"setAttributeNS",
function(e,f,g){if(1!==this.__CE_state)return Ke.call(this,e,f,g);var h=Je.call(this,e,f);Ke.call(this,e,f,g);g=Je.call(this,e,f);a.attributeChangedCallback(this,f,h,g,e)});U(Element.prototype,"removeAttribute",function(e){if(1!==this.__CE_state)return Ie.call(this,e);var f=Ge.call(this,e);Ie.call(this,e);null!==f&&a.attributeChangedCallback(this,e,f,null,null)});U(Element.prototype,"removeAttributeNS",function(e,f){if(1!==this.__CE_state)return Le.call(this,e,f);var g=Je.call(this,e,f);Le.call(this,
e,f);var h=Je.call(this,e,f);g!==h&&a.attributeChangedCallback(this,f,g,h,e)});We?c(HTMLElement.prototype,We):Me&&c(Element.prototype,Me);Xe?d(HTMLElement.prototype,Xe):Ne&&d(Element.prototype,Ne);Af(a,Element.prototype,{prepend:Oe,append:Pe});Df(a)};var pf=window.customElements;function Ff(){var a=new of;zf(a);Bf(a);Af(a,DocumentFragment.prototype,{prepend:we,append:xe});Cf(a);Ef(a);a=new V(a);document.__CE_registry=a;Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:a})}pf&&!pf.forcePolyfill&&"function"==typeof pf.define&&"function"==typeof pf.get||Ff();window.__CE_installPolyfill=Ff;function Gf(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
function Hf(a){var b=a=a.replace(If,"").replace(Jf,""),c=new Gf;c.start=0;c.end=b.length;for(var d=c,e=0,f=b.length;e<f;e++)if("{"===b[e]){d.rules||(d.rules=[]);var g=d,h=g.rules[g.rules.length-1]||null;d=new Gf;d.start=e+1;d.parent=g;d.previous=h;g.rules.push(d)}else"}"===b[e]&&(d.end=e+1,d=d.parent||c);return Kf(c,a)}
function Kf(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=Lf(c),c=c.replace(Mf," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=Nf:c.match(Of)&&(a.type=Pf,a.keyframesName=a.selector.split(Mf).pop()):a.type=0===c.indexOf("--")?Qf:Rf);if(c=a.rules)for(var d=0,e=c.length,f=void 0;d<e&&(f=c[d]);d++)Kf(f,
b);return a}function Lf(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(b,c){b=c;for(c=6-b.length;c--;)b="0"+b;return"\\"+b})}
function Sf(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var g=e.length,h=void 0;f<g&&(h=e[f]);f++)d=Sf(h,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(Tf,"").replace(Uf,""),b=b.replace(Vf,"").replace(Wf,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
var Rf=1,Pf=7,Nf=4,Qf=1E3,If=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,Jf=/@import[^;]*;/gim,Tf=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,Uf=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,Vf=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,Wf=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,Of=/^@[^\s]*keyframes/,Mf=/\s+/g;var W=!(window.ShadyDOM&&window.ShadyDOM.inUse),Xf;function Yf(a){Xf=a&&a.shimcssproperties?!1:W||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}var Zf;window.ShadyCSS&&void 0!==window.ShadyCSS.cssBuild&&(Zf=window.ShadyCSS.cssBuild);var $f=!(!window.ShadyCSS||!window.ShadyCSS.disableRuntime);
window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?Xf=window.ShadyCSS.nativeCss:window.ShadyCSS?(Yf(window.ShadyCSS),window.ShadyCSS=void 0):Yf(window.WebComponents&&window.WebComponents.flags);var Y=Xf;var ag=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,bg=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,dg=/(--[\w-]+)\s*([:,;)]|$)/gi,eg=/(animation\s*:)|(animation-name\s*:)/,fg=/@media\s(.*)/,gg=/\{[^}]*\}/g;var hg=new Set;function ig(a,b){if(!a)return"";"string"===typeof a&&(a=Hf(a));b&&jg(a,b);return Sf(a,Y)}function kg(a){!a.__cssRules&&a.textContent&&(a.__cssRules=Hf(a.textContent));return a.__cssRules||null}function lg(a){return!!a.parent&&a.parent.type===Pf}function jg(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===Nf){var g=a.selector.match(fg);g&&(window.matchMedia(g[1]).matches||(e=!0))}f===Rf?b(a):c&&f===Pf?c(a):f===Qf&&(e=!0);if((a=a.rules)&&!e)for(e=0,f=a.length,g=void 0;e<f&&(g=a[e]);e++)jg(g,b,c,d)}}
function mg(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;ng(e,c,d);return e}var og=null;function pg(a){a=document.createComment(" Shady DOM styles for "+a+" ");var b=document.head;b.insertBefore(a,(og?og.nextSibling:null)||b.firstChild);return og=a}function ng(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);og?a.compareDocumentPosition(og)===Node.DOCUMENT_POSITION_PRECEDING&&(og=a):og=a}
function qg(a,b){for(var c=0,d=a.length;b<d;b++)if("("===a[b])c++;else if(")"===a[b]&&0===--c)return b;return-1}function rg(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");var d=qg(a,c+3),e=a.substring(c+4,d);c=a.substring(0,c);a=rg(a.substring(d+1),b);d=e.indexOf(",");return-1===d?b(c,e.trim(),"",a):b(c,e.substring(0,d).trim(),e.substring(d+1).trim(),a)}function sg(a,b){W?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
var tg=window.ShadyDOM&&window.ShadyDOM.wrap||function(a){return a};function ug(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,Y:c}}function vg(a){for(var b=[],c="",d=0;0<=d&&d<a.length;d++)if("("===a[d]){var e=qg(a,d);c+=a.slice(d,e+1);d=e}else","===a[d]?(b.push(c),c=""):c+=a[d];c&&b.push(c);return b}
function wg(a){if(void 0!==Zf)return Zf;if(void 0===a.__cssBuild){var b=a.getAttribute("css-build");if(b)a.__cssBuild=b;else{a:{b="template"===a.localName?a.content.firstChild:a.firstChild;if(b instanceof Comment&&(b=b.textContent.trim().split(":"),"css-build"===b[0])){b=b[1];break a}b=""}if(""!==b){var c="template"===a.localName?a.content.firstChild:a.firstChild;c.parentNode.removeChild(c)}a.__cssBuild=b}}return a.__cssBuild||""}
function xg(a){a=void 0===a?"":a;return""!==a&&Y?W?"shadow"===a:"shady"===a:!1};function yg(){}function zg(a,b){Ag(Bg,a,function(c){Cg(c,b||"")})}function Ag(a,b,c){b.nodeType===Node.ELEMENT_NODE&&c(b);var d;"template"===b.localName?d=(b.content||b._content||b).childNodes:d=b.children||b.childNodes;if(d)for(b=0;b<d.length;b++)Ag(a,d[b],c)}
function Cg(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute("class");c?d&&(b=d.replace("style-scope","").replace(b,""),sg(a,b)):sg(a,(d?d+" ":"")+"style-scope "+b)}}function Dg(a,b,c){Ag(Bg,a,function(d){Cg(d,b,!0);Cg(d,c)})}function Eg(a,b){Ag(Bg,a,function(c){Cg(c,b||"",!0)})}
function Fg(a,b,c,d,e){var f=Bg;e=void 0===e?"":e;""===e&&(W||"shady"===(void 0===d?"":d)?e=ig(b,c):(a=ug(a),e=Gg(f,b,a.is,a.Y,c)+"\n\n"));return e.trim()}function Gg(a,b,c,d,e){var f=Hg(c,d);c=c?"."+c:"";return ig(b,function(g){g.c||(g.selector=g.B=Ig(a,g,a.b,c,f),g.c=!0);e&&e(g,c,f)})}function Hg(a,b){return b?"[is="+a+"]":a}
function Ig(a,b,c,d,e){var f=vg(b.selector);if(!lg(b)){b=0;for(var g=f.length,h=void 0;b<g&&(h=f[b]);b++)f[b]=c.call(a,h,d,e)}return f.filter(function(k){return!!k}).join(",")}function Jg(a){return a.replace(Kg,function(b,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
function Lg(a){for(var b=[],c;c=a.match(Mg);){var d=c.index,e=qg(a,d);if(-1===e)throw Error(c.input+" selector missing ')'");c=a.slice(d,e+1);a=a.replace(c,"\ue000");b.push(c)}return{oa:a,matches:b}}function Ng(a,b){var c=a.split("\ue000");return b.reduce(function(d,e,f){return d+e+c[f+1]},c[0])}
yg.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=Kg.test(a);e&&(a=a.replace(Kg,function(h,k,l){return":"+k+"("+l.replace(/\s/g,"")+")"}),a=Jg(a));var f=Mg.test(a);if(f){var g=Lg(a);a=g.oa;g=g.matches}a=a.replace(Og,":host $1");a=a.replace(Pg,function(h,k,l){d||(h=Qg(l,k,b,c),d=d||h.stop,k=h.Ga,l=h.value);return k+l});f&&(a=Ng(a,g));e&&(a=Jg(a));return a=a.replace(Rg,function(h,k,l,m){return'[dir="'+l+'"] '+k+m+", "+k+'[dir="'+l+'"]'+m})};
function Qg(a,b,c,d){var e=a.indexOf("::slotted");0<=a.indexOf(":host")?a=Sg(a,d):0!==e&&(a=c?Tg(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Ug,function(g,h){return" > "+h}))}return{value:a,Ga:b,stop:f}}function Tg(a,b){a=a.split(/(\[.+?\])/);for(var c=[],d=0;d<a.length;d++)if(1===d%2)c.push(a[d]);else{var e=a[d];if(""!==e||d!==a.length-1)e=e.split(":"),e[0]+=b,c.push(e.join(":"))}return c.join("")}
function Sg(a,b){var c=a.match(Vg);return(c=c&&c[2].trim()||"")?c[0].match(Wg)?a.replace(Vg,function(d,e,f){return b+f}):c.split(Wg)[0]===b?c:"should_not_match":a.replace(":host",b)}function Xg(a){":root"===a.selector&&(a.selector="html")}yg.prototype.c=function(a){return a.match(":host")?"":a.match("::slotted")?this.b(a,":not(.style-scope)"):Tg(a.trim(),":not(.style-scope)")};ea.Object.defineProperties(yg.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
var Kg=/:(nth[-\w]+)\(([^)]+)\)/,Pg=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,Wg=/[[.:#*]/,Og=/^(::slotted)/,Vg=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Ug=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Rg=/(.*):dir\((?:(ltr|rtl))\)(.*)/,Mg=/:(?:matches|any|-(?:webkit|moz)-any)/,Bg=new yg;function Yg(a,b,c,d,e){this.J=a||null;this.b=b||null;this.ka=c||[];this.H=null;this.cssBuild=e||"";this.Y=d||"";this.a=this.I=this.M=null}function Zg(a){return a?a.__styleInfo:null}function $g(a,b){return a.__styleInfo=b}Yg.prototype.c=function(){return this.J};Yg.prototype._getStyleRules=Yg.prototype.c;function ah(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var bh=/:host\s*>\s*/,ch=navigator.userAgent.match("Trident");function dh(){}function eh(a){var b={},c=[],d=0;jg(a,function(f){fh(f);f.index=d++;f=f.A.cssText;for(var g;g=dg.exec(f);){var h=g[1];":"!==g[2]&&(b[h]=!0)}},function(f){c.push(f)});a.b=c;a=[];for(var e in b)a.push(e);return a}
function fh(a){if(!a.A){var b={},c={};gh(a,c)&&(b.L=c,a.rules=null);b.cssText=a.parsedCssText.replace(gg,"").replace(ag,"");a.A=b}}function gh(a,b){var c=a.A;if(c){if(c.L)return Object.assign(b,c.L),!0}else{c=a.parsedCssText;for(var d;a=ag.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
function hh(a,b,c){b&&(b=0<=b.indexOf(";")?ih(a,b,c):rg(b,function(d,e,f,g){if(!e)return d+g;(e=hh(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=hh(a,c[f]||f,c)||f;return d+(e||"")+g}));return b&&b.trim()||""}
function ih(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){bg.lastIndex=0;if(f=bg.exec(e))e=hh(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var g=e.substring(f);g=g.trim();g=hh(a,g,c)||g;e=e.substring(0,f)+g}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
function jh(a,b){var c={},d=[];jg(a,function(e){e.A||fh(e);var f=e.B||e.parsedSelector;b&&e.A.L&&f&&ah.call(b,f)&&(gh(e,c),e=e.index,f=parseInt(e/32,10),d[f]=(d[f]||0)|1<<e%32)},null,!0);return{L:c,key:d}}
function kh(a,b,c,d){b.A||fh(b);if(b.A.L){var e=ug(a);a=e.is;e=e.Y;e=a?Hg(a,e):"html";var f=b.parsedSelector;var g=!!f.match(bh)||"html"===e&&-1<f.indexOf("html");var h=0===f.indexOf(":host")&&!g;"shady"===c&&(g=f===e+" > *."+e||-1!==f.indexOf("html"),h=!g&&0===f.indexOf(e));if(g||h)c=e,h&&(b.B||(b.B=Ig(Bg,b,Bg.b,a?"."+a:"",e)),c=b.B||e),g&&"html"===e&&(c=b.B||b.u),d({oa:c,Na:h,ab:g})}}
function lh(a,b,c){var d={},e={};jg(b,function(f){kh(a,f,c,function(g){ah.call(a._element||a,g.oa)&&(g.Na?gh(f,d):gh(f,e))})},null,!0);return{Ta:e,La:d}}
function mh(a,b,c,d){var e=ug(b),f=Hg(e.is,e.Y),g=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])"),h=Zg(b);e=h.J;h=h.cssBuild;var k=nh(e,d);return Fg(b,e,function(l){var m="";l.A||fh(l);l.A.cssText&&(m=ih(a,l.A.cssText,c));l.cssText=m;if(!W&&!lg(l)&&l.cssText){var q=m=l.cssText;null==l.sa&&(l.sa=eg.test(m));if(l.sa)if(null==l.ca){l.ca=[];for(var H in k)q=k[H],q=q(m),m!==q&&(m=q,l.ca.push(H))}else{for(H=0;H<l.ca.length;++H)q=k[l.ca[H]],m=q(m);q=m}l.cssText=q;l.B=
l.B||l.selector;m="."+d;H=vg(l.B);q=0;for(var E=H.length,r=void 0;q<E&&(r=H[q]);q++)H[q]=r.match(g)?r.replace(f,m):m+" "+r;l.selector=H.join(",")}},h)}function nh(a,b){a=a.b;var c={};if(!W&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,g=b;f.f=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+g;f.B=f.B||f.selector;f.selector=f.B.replace(f.keyframesName,f.a);c[e.keyframesName]=oh(e)}return c}function oh(a){return function(b){return b.replace(a.f,a.a)}}
function ph(a,b){var c=qh,d=kg(a);a.textContent=ig(d,function(e){var f=e.cssText=e.parsedCssText;e.A&&e.A.cssText&&(f=f.replace(Tf,"").replace(Uf,""),e.cssText=ih(c,f,b))})}ea.Object.defineProperties(dh.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var qh=new dh;var rh={},sh=window.customElements;if(sh&&!W&&!$f){var th=sh.define;sh.define=function(a,b,c){rh[a]||(rh[a]=pg(a));th.call(sh,a,b,c)}};function uh(){this.cache={}}uh.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({L:b,styleElement:c,I:d});100<e.length&&e.shift();this.cache[a]=e};function vh(){}var wh=new RegExp(Bg.a+"\\s*([^\\s]*)");function xh(a){return(a=(a.classList&&a.classList.value?a.classList.value:a.getAttribute("class")||"").match(wh))?a[1]:""}function yh(a){var b=tg(a).getRootNode();return b===a||b===a.ownerDocument?"":(a=b.host)?ug(a).is:""}
function zh(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode(),g=xh(e);if(g&&f===e.ownerDocument&&("style"!==e.localName&&"template"!==e.localName||""===wg(e)))Eg(e,g);else if(f instanceof ShadowRoot)for(f=yh(e),f!==g&&Dg(e,g,f),e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+Bg.a+")"),g=0;g<e.length;g++){f=e[g];
var h=yh(f);h&&Cg(f,h)}}}}}
if(!(W||window.ShadyDOM&&window.ShadyDOM.handlesDynamicScoping)){var Ah=new MutationObserver(zh),Bh=function(a){Ah.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)Bh(document);else{var Ch=function(){Bh(document.body)};window.HTMLImports?window.HTMLImports.whenReady(Ch):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){Ch();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",
a)}else Ch()})}vh=function(){zh(Ah.takeRecords())}};var Dh={};var Eh=Promise.resolve();function Fh(a){if(a=Dh[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Gh(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Hh(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a._validating||(a._validating=!0,Eh.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a._validating=!1}))};var Ih={},Jh=new uh;function Z(){this.F={};this.c=document.documentElement;var a=new Gf;a.rules=[];this.f=$g(this.c,new Yg(a));this.u=!1;this.a=this.b=null}w=Z.prototype;w.flush=function(){vh()};w.Ja=function(a){return kg(a)};w.Xa=function(a){return ig(a)};w.prepareTemplate=function(a,b,c){this.prepareTemplateDom(a,b);this.prepareTemplateStyles(a,b,c)};
w.prepareTemplateStyles=function(a,b,c){if(!a._prepared&&!$f){W||rh[b]||(rh[b]=pg(b));a._prepared=!0;a.name=b;a.extends=c;Dh[b]=a;var d=wg(a),e=xg(d);c={is:b,extends:c};for(var f=[],g=a.content.querySelectorAll("style"),h=0;h<g.length;h++){var k=g[h];if(k.hasAttribute("shady-unscoped")){if(!W){var l=k.textContent;hg.has(l)||(hg.add(l),l=k.cloneNode(!0),document.head.appendChild(l));k.parentNode.removeChild(k)}}else f.push(k.textContent),k.parentNode.removeChild(k)}f=f.join("").trim()+(Ih[b]||"");
Kh(this);if(!e){if(g=!d)g=bg.test(f)||ag.test(f),bg.lastIndex=0,ag.lastIndex=0;h=Hf(f);g&&Y&&this.b&&this.b.transformRules(h,b);a._styleAst=h}g=[];Y||(g=eh(a._styleAst));if(!g.length||Y)h=W?a.content:null,b=rh[b]||null,d=Fg(c,a._styleAst,null,d,e?f:""),d=d.length?mg(d,c.is,h,b):null,a._style=d;a.a=g}};w.Ra=function(a,b){Ih[b]=a.join(" ")};w.prepareTemplateDom=function(a,b){if(!$f){var c=wg(a);W||"shady"===c||a._domPrepared||(a._domPrepared=!0,zg(a.content,b))}};
function Lh(a){var b=ug(a),c=b.is;b=b.Y;var d=rh[c]||null,e=Dh[c];if(e){c=e._styleAst;var f=e.a;e=wg(e);b=new Yg(c,d,f,b,e);$g(a,b);return b}}function Mh(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.a=window.ShadyCSS.CustomStyleInterface,a.a.transformCallback=function(b){a.xa(b)},a.a.validateCallback=function(){requestAnimationFrame(function(){(a.a.enqueued||a.u)&&a.flushCustomStyles()})})}
function Kh(a){if(!a.b&&window.ShadyCSS&&window.ShadyCSS.ApplyShim){a.b=window.ShadyCSS.ApplyShim;a.b.invalidCallback=Fh;var b=!0}else b=!1;Mh(a);return b}
w.flushCustomStyles=function(){if(!$f){var a=Kh(this);if(this.a){var b=this.a.processStyles();if((a||this.a.enqueued)&&!xg(this.f.cssBuild)){if(Y){if(!this.f.cssBuild)for(a=0;a<b.length;a++){var c=this.a.getStyleForCustomStyle(b[a]);if(c&&Y&&this.b){var d=kg(c);Kh(this);this.b.transformRules(d);c.textContent=ig(d)}}}else{Nh(this,b);Oh(this,this.c,this.f);for(a=0;a<b.length;a++)(c=this.a.getStyleForCustomStyle(b[a]))&&ph(c,this.f.M);this.u&&this.styleDocument()}this.a.enqueued=!1}}}};
function Nh(a,b){b=b.map(function(c){return a.a.getStyleForCustomStyle(c)}).filter(function(c){return!!c});b.sort(function(c,d){c=d.compareDocumentPosition(c);return c&Node.DOCUMENT_POSITION_FOLLOWING?1:c&Node.DOCUMENT_POSITION_PRECEDING?-1:0});a.f.J.rules=b.map(function(c){return kg(c)})}
w.styleElement=function(a,b){if($f){if(b){Zg(a)||$g(a,new Yg(null));var c=Zg(a);c.H=c.H||{};Object.assign(c.H,b);Ph(this,a,c)}}else if(c=Zg(a)||Lh(a))if(a!==this.c&&(this.u=!0),b&&(c.H=c.H||{},Object.assign(c.H,b)),Y)Ph(this,a,c);else if(this.flush(),Oh(this,a,c),c.ka&&c.ka.length){b=ug(a).is;var d;a:{if(d=Jh.cache[b])for(var e=d.length-1;0<=e;e--){var f=d[e];b:{var g=c.ka;for(var h=0;h<g.length;h++){var k=g[h];if(f.L[k]!==c.M[k]){g=!1;break b}}g=!0}if(g){d=f;break a}}d=void 0}g=d?d.styleElement:
null;e=c.I;(f=d&&d.I)||(f=this.F[b]=(this.F[b]||0)+1,f=b+"-"+f);c.I=f;f=c.I;h=qh;h=g?g.textContent||"":mh(h,a,c.M,f);k=Zg(a);var l=k.a;l&&!W&&l!==g&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));W?k.a?(k.a.textContent=h,g=k.a):h&&(g=mg(h,f,a.shadowRoot,k.b)):g?g.parentNode||(ch&&-1<h.indexOf("@media")&&(g.textContent=h),ng(g,null,k.b)):h&&(g=mg(h,f,null,k.b));g&&(g._useCount=g._useCount||0,k.a!=g&&g._useCount++,k.a=g);f=g;W||(g=c.I,k=h=a.getAttribute("class")||"",e&&(k=
h.replace(new RegExp("\\s*x-scope\\s*"+e+"\\s*","g")," ")),k+=(k?" ":"")+"x-scope "+g,h!==k&&sg(a,k));d||Jh.store(b,c.M,f,c.I)}};
function Ph(a,b,c){var d=ug(b).is;if(c.H){var e=c.H,f;for(f in e)null===f?b.style.removeProperty(f):b.style.setProperty(f,e[f])}e=Dh[d];if(!(!e&&b!==a.c||e&&""!==wg(e))&&e&&e._style&&!Gh(e)){if(Gh(e)||e._applyShimValidatingVersion!==e._applyShimNextVersion)Kh(a),a.b&&a.b.transformRules(e._styleAst,d),e._style.textContent=Fg(b,c.J),Hh(e);W&&(a=b.shadowRoot)&&(a=a.querySelector("style"))&&(a.textContent=Fg(b,c.J));c.J=e._styleAst}}
function Qh(a,b){return(b=tg(b).getRootNode().host)?Zg(b)||Lh(b)?b:Qh(a,b):a.c}function Oh(a,b,c){var d=Qh(a,b),e=Zg(d),f=e.M;d===a.c||f||(Oh(a,d,e),f=e.M);a=Object.create(f||null);d=lh(b,c.J,c.cssBuild);b=jh(e.J,b).L;Object.assign(a,d.La,b,d.Ta);b=c.H;for(var g in b)if((e=b[g])||0===e)a[g]=e;g=qh;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=hh(g,a[d],a);c.M=a}w.styleDocument=function(a){this.styleSubtree(this.c,a)};
w.styleSubtree=function(a,b){var c=tg(a),d=c.shadowRoot,e=a===this.c;(d||e)&&this.styleElement(a,b);if(a=e?c:d)for(a=Array.from(a.querySelectorAll("*")).filter(function(f){return tg(f).shadowRoot}),b=0;b<a.length;b++)this.styleSubtree(a[b])};
w.xa=function(a){var b=this,c=wg(a);c!==this.f.cssBuild&&(this.f.cssBuild=c);if(!xg(c)){var d=kg(a);jg(d,function(e){if(W)Xg(e);else{var f=Bg;e.selector=e.parsedSelector;Xg(e);e.selector=e.B=Ig(f,e,f.c,void 0,void 0)}Y&&""===c&&(Kh(b),b.b&&b.b.transformRule(e))});Y?a.textContent=ig(d):this.f.J.rules.push(d)}};w.getComputedStyleValue=function(a,b){var c;Y||(c=(Zg(a)||Zg(Qh(this,a))).M[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};
w.Wa=function(a,b){var c=tg(a).getRootNode(),d;b?d=("string"===typeof b?b:String(b)).split(/\s/):d=[];b=c.host&&c.host.localName;if(!b&&(c=a.getAttribute("class"))){c=c.split(/\s/);for(var e=0;e<c.length;e++)if(c[e]===Bg.a){b=c[e+1];break}}b&&d.push(Bg.a,b);Y||(b=Zg(a))&&b.I&&d.push(qh.a,b.I);sg(a,d.join(" "))};w.Ea=function(a){return Zg(a)};w.Va=function(a,b){Cg(a,b)};w.Ya=function(a,b){Cg(a,b,!0)};w.Ua=function(a){return yh(a)};w.Ha=function(a){return xh(a)};Z.prototype.flush=Z.prototype.flush;
Z.prototype.prepareTemplate=Z.prototype.prepareTemplate;Z.prototype.styleElement=Z.prototype.styleElement;Z.prototype.styleDocument=Z.prototype.styleDocument;Z.prototype.styleSubtree=Z.prototype.styleSubtree;Z.prototype.getComputedStyleValue=Z.prototype.getComputedStyleValue;Z.prototype.setElementClass=Z.prototype.Wa;Z.prototype._styleInfoForNode=Z.prototype.Ea;Z.prototype.transformCustomStyleForDocument=Z.prototype.xa;Z.prototype.getStyleAst=Z.prototype.Ja;Z.prototype.styleAstToString=Z.prototype.Xa;
Z.prototype.flushCustomStyles=Z.prototype.flushCustomStyles;Z.prototype.scopeNode=Z.prototype.Va;Z.prototype.unscopeNode=Z.prototype.Ya;Z.prototype.scopeForNode=Z.prototype.Ua;Z.prototype.currentScopeForNode=Z.prototype.Ha;Z.prototype.prepareAdoptedCssText=Z.prototype.Ra;Object.defineProperties(Z.prototype,{nativeShadow:{get:function(){return W}},nativeCss:{get:function(){return Y}}});var Rh=new Z,Sh,Th;window.ShadyCSS&&(Sh=window.ShadyCSS.ApplyShim,Th=window.ShadyCSS.CustomStyleInterface);
window.ShadyCSS={ScopingShim:Rh,prepareTemplate:function(a,b,c){Rh.flushCustomStyles();Rh.prepareTemplate(a,b,c)},prepareTemplateDom:function(a,b){Rh.prepareTemplateDom(a,b)},prepareTemplateStyles:function(a,b,c){Rh.flushCustomStyles();Rh.prepareTemplateStyles(a,b,c)},styleSubtree:function(a,b){Rh.flushCustomStyles();Rh.styleSubtree(a,b)},styleElement:function(a){Rh.flushCustomStyles();Rh.styleElement(a)},styleDocument:function(a){Rh.flushCustomStyles();Rh.styleDocument(a)},flushCustomStyles:function(){Rh.flushCustomStyles()},
getComputedStyleValue:function(a,b){return Rh.getComputedStyleValue(a,b)},nativeCss:Y,nativeShadow:W,cssBuild:Zf,disableRuntime:$f};Sh&&(window.ShadyCSS.ApplyShim=Sh);Th&&(window.ShadyCSS.CustomStyleInterface=Th);(function(a){function b(r){""==r&&(f.call(this),this.i=!0);return r.toLowerCase()}function c(r){var F=r.charCodeAt(0);return 32<F&&127>F&&-1==[34,35,60,62,63,96].indexOf(F)?r:encodeURIComponent(r)}function d(r){var F=r.charCodeAt(0);return 32<F&&127>F&&-1==[34,35,60,62,96].indexOf(F)?r:encodeURIComponent(r)}function e(r,F,C){function N(la){sa.push(la)}var y=F||"scheme start",X=0,v="",ra=!1,fa=!1,sa=[];a:for(;(void 0!=r[X-1]||0==X)&&!this.i;){var n=r[X];switch(y){case "scheme start":if(n&&q.test(n))v+=
n.toLowerCase(),y="scheme";else if(F){N("Invalid scheme.");break a}else{v="";y="no scheme";continue}break;case "scheme":if(n&&H.test(n))v+=n.toLowerCase();else if(":"==n){this.h=v;v="";if(F)break a;void 0!==l[this.h]&&(this.C=!0);y="file"==this.h?"relative":this.C&&C&&C.h==this.h?"relative or authority":this.C?"authority first slash":"scheme data"}else if(F){void 0!=n&&N("Code point not allowed in scheme: "+n);break a}else{v="";X=0;y="no scheme";continue}break;case "scheme data":"?"==n?(this.o="?",
y="query"):"#"==n?(this.v="#",y="fragment"):void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.ga+=c(n));break;case "no scheme":if(C&&void 0!==l[C.h]){y="relative";continue}else N("Missing scheme."),f.call(this),this.i=!0;break;case "relative or authority":if("/"==n&&"/"==r[X+1])y="authority ignore slashes";else{N("Expected /, got: "+n);y="relative";continue}break;case "relative":this.C=!0;"file"!=this.h&&(this.h=C.h);if(void 0==n){this.j=C.j;this.m=C.m;this.l=C.l.slice();this.o=C.o;this.s=C.s;this.g=C.g;
break a}else if("/"==n||"\\"==n)"\\"==n&&N("\\ is an invalid code point."),y="relative slash";else if("?"==n)this.j=C.j,this.m=C.m,this.l=C.l.slice(),this.o="?",this.s=C.s,this.g=C.g,y="query";else if("#"==n)this.j=C.j,this.m=C.m,this.l=C.l.slice(),this.o=C.o,this.v="#",this.s=C.s,this.g=C.g,y="fragment";else{y=r[X+1];var I=r[X+2];if("file"!=this.h||!q.test(n)||":"!=y&&"|"!=y||void 0!=I&&"/"!=I&&"\\"!=I&&"?"!=I&&"#"!=I)this.j=C.j,this.m=C.m,this.s=C.s,this.g=C.g,this.l=C.l.slice(),this.l.pop();y=
"relative path";continue}break;case "relative slash":if("/"==n||"\\"==n)"\\"==n&&N("\\ is an invalid code point."),y="file"==this.h?"file host":"authority ignore slashes";else{"file"!=this.h&&(this.j=C.j,this.m=C.m,this.s=C.s,this.g=C.g);y="relative path";continue}break;case "authority first slash":if("/"==n)y="authority second slash";else{N("Expected '/', got: "+n);y="authority ignore slashes";continue}break;case "authority second slash":y="authority ignore slashes";if("/"!=n){N("Expected '/', got: "+
n);continue}break;case "authority ignore slashes":if("/"!=n&&"\\"!=n){y="authority";continue}else N("Expected authority, got: "+n);break;case "authority":if("@"==n){ra&&(N("@ already seen."),v+="%40");ra=!0;for(n=0;n<v.length;n++)I=v[n],"\t"==I||"\n"==I||"\r"==I?N("Invalid whitespace in authority."):":"==I&&null===this.g?this.g="":(I=c(I),null!==this.g?this.g+=I:this.s+=I);v=""}else if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n){X-=v.length;v="";y="host";continue}else v+=n;break;case "file host":if(void 0==
n||"/"==n||"\\"==n||"?"==n||"#"==n){2!=v.length||!q.test(v[0])||":"!=v[1]&&"|"!=v[1]?(0!=v.length&&(this.j=b.call(this,v),v=""),y="relative path start"):y="relative path";continue}else"\t"==n||"\n"==n||"\r"==n?N("Invalid whitespace in file host."):v+=n;break;case "host":case "hostname":if(":"!=n||fa)if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n){this.j=b.call(this,v);v="";y="relative path start";if(F)break a;continue}else"\t"!=n&&"\n"!=n&&"\r"!=n?("["==n?fa=!0:"]"==n&&(fa=!1),v+=n):N("Invalid code point in host/hostname: "+
n);else if(this.j=b.call(this,v),v="",y="port","hostname"==F)break a;break;case "port":if(/[0-9]/.test(n))v+=n;else if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n||F){""!=v&&(v=parseInt(v,10),v!=l[this.h]&&(this.m=v+""),v="");if(F)break a;y="relative path start";continue}else"\t"==n||"\n"==n||"\r"==n?N("Invalid code point in port: "+n):(f.call(this),this.i=!0);break;case "relative path start":"\\"==n&&N("'\\' not allowed in path.");y="relative path";if("/"!=n&&"\\"!=n)continue;break;case "relative path":if(void 0!=
n&&"/"!=n&&"\\"!=n&&(F||"?"!=n&&"#"!=n))"\t"!=n&&"\n"!=n&&"\r"!=n&&(v+=c(n));else{"\\"==n&&N("\\ not allowed in relative path.");if(I=m[v.toLowerCase()])v=I;".."==v?(this.l.pop(),"/"!=n&&"\\"!=n&&this.l.push("")):"."==v&&"/"!=n&&"\\"!=n?this.l.push(""):"."!=v&&("file"==this.h&&0==this.l.length&&2==v.length&&q.test(v[0])&&"|"==v[1]&&(v=v[0]+":"),this.l.push(v));v="";"?"==n?(this.o="?",y="query"):"#"==n&&(this.v="#",y="fragment")}break;case "query":F||"#"!=n?void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.o+=
d(n)):(this.v="#",y="fragment");break;case "fragment":void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.v+=n)}X++}}function f(){this.s=this.ga=this.h="";this.g=null;this.m=this.j="";this.l=[];this.v=this.o="";this.C=this.i=!1}function g(r,F){void 0===F||F instanceof g||(F=new g(String(F)));this.a=r;f.call(this);e.call(this,this.a.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,""),null,F)}var h=!1;try{var k=new URL("b","http://a");k.pathname="c%20d";h="http://a/c%20d"===k.href}catch(r){}if(!h){var l=Object.create(null);
l.ftp=21;l.file=0;l.gopher=70;l.http=80;l.https=443;l.ws=80;l.wss=443;var m=Object.create(null);m["%2e"]=".";m[".%2e"]="..";m["%2e."]="..";m["%2e%2e"]="..";var q=/[a-zA-Z]/,H=/[a-zA-Z0-9\+\-\.]/;g.prototype={toString:function(){return this.href},get href(){if(this.i)return this.a;var r="";if(""!=this.s||null!=this.g)r=this.s+(null!=this.g?":"+this.g:"")+"@";return this.protocol+(this.C?"//"+r+this.host:"")+this.pathname+this.o+this.v},set href(r){f.call(this);e.call(this,r)},get protocol(){return this.h+
":"},set protocol(r){this.i||e.call(this,r+":","scheme start")},get host(){return this.i?"":this.m?this.j+":"+this.m:this.j},set host(r){!this.i&&this.C&&e.call(this,r,"host")},get hostname(){return this.j},set hostname(r){!this.i&&this.C&&e.call(this,r,"hostname")},get port(){return this.m},set port(r){!this.i&&this.C&&e.call(this,r,"port")},get pathname(){return this.i?"":this.C?"/"+this.l.join("/"):this.ga},set pathname(r){!this.i&&this.C&&(this.l=[],e.call(this,r,"relative path start"))},get search(){return this.i||
!this.o||"?"==this.o?"":this.o},set search(r){!this.i&&this.C&&(this.o="?","?"==r[0]&&(r=r.slice(1)),e.call(this,r,"query"))},get hash(){return this.i||!this.v||"#"==this.v?"":this.v},set hash(r){this.i||(r?(this.v="#","#"==r[0]&&(r=r.slice(1)),e.call(this,r,"fragment")):this.v="")},get origin(){var r;if(this.i||!this.h)return"";switch(this.h){case "data":case "file":case "javascript":case "mailto":return"null"}return(r=this.host)?this.h+"://"+r:""}};var E=a.URL;E&&(g.createObjectURL=function(r){return E.createObjectURL.apply(E,
arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(window);Object.getOwnPropertyDescriptor(Node.prototype,"baseURI")||Object.defineProperty(Node.prototype,"baseURI",{get:function(){var a=(this.ownerDocument||this).querySelector("base[href]");return a&&a.href||window.location.href},configurable:!0,enumerable:!0});var Uh=document.createElement("style");Uh.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var Vh=document.querySelector("head");Vh.insertBefore(Uh,Vh.firstChild);var Wh=window.customElements,Xh=!1,Yh=null;Wh.polyfillWrapFlushCallback&&Wh.polyfillWrapFlushCallback(function(a){Yh=a;Xh&&a()});function Zh(){window.HTMLTemplateElement.bootstrap&&window.HTMLTemplateElement.bootstrap(window.document);Yh&&Yh();Xh=!0;window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))}
"complete"!==document.readyState?(window.addEventListener("load",Zh),window.addEventListener("DOMContentLoaded",function(){window.removeEventListener("load",Zh);Zh()})):Zh();}).call(this);
//# sourceMappingURL=webcomponents-bundle.js.map

View File

@ -0,0 +1,703 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Wayback Machine</title>
<script>
/*
@licstart The following is the entire license notice for the JavaScript code in this page.
Copyright (C) 2020 Internet Archive
The JavaScript code in this page is free software: you can
redistribute it and/or modify it under the terms of the GNU Affero
General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU AGPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU AGPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice for the JavaScript code in this page.
*/
</script>
<script type="text/javascript">
window.webComponentLoaderConfig = {
baseUrl: 'https://archive.org',
version: '29e56e87'
}
</script>
<script src="//archive.org/includes/jquery-1.10.2.min.js?v1.10.2" type="text/javascript"></script>
<script src="//archive.org/includes/analytics.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/npm/jquery-ui.min.js?v1.12.1" type="text/javascript"></script>
<script src="//archive.org/includes/bootstrap.min.js?v3.0.0" type="text/javascript"></script>
<script src="//archive.org/components/npm/clipboard/dist/clipboard.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/regenerator-runtime-polyfill.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/ie-dom-node-remove-polyfill.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/polyfill.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/components/npm/@webcomponents/webcomponentsjs/webcomponents-bundle.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/more-facets.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/radio-player-controller.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/mobile-top-nav.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/npm/react/umd/react.production.min.js?v16.7.0" type="text/javascript"></script>
<script src="//archive.org/includes/build/npm/react-dom/umd/react-dom.production.min.js?v16.7.0" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/archive.min.js?v=f5605dd7" type="text/javascript"></script>
<script src="//archive.org/includes/build/js/areact.min.js?v=f5605dd7" type="text/javascript"></script>
<link href="//archive.org/includes/build/css/archive.min.css?v=f5605dd7" rel="stylesheet" type="text/css"/>
<meta property="braintree_token" content="production_w3jccm3z_pqd7hz44swp6zvvw">
<meta property="environment" content="production">
<meta property="venmo_id" content="2878003111190856236">
<script src="/_static/js/raven.min.js" crossorigin="anonymous"></script>
<script>Raven.config('https://5588e3adb3e545248e893d6f2fc41ba2@wwwb-sentry.us.archive.org/3').install();</script>
<script type="text/javascript">if('archive_analytics' in window){var v=archive_analytics.values;v.path='/web';v.service='wb';v.server_name='wwwb-app101.us.archive.org';v.server_ms=327;archive_analytics.send_pageview_on_load()}</script>
<link href="/_static/images/archive.ico" rel="shortcut icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="/_static/css/styles.css?v=mMQ6uJY1" />
<script type="text/javascript" src="/_static/js/ui.js?v=EGgwKSpP" charset="utf-8"></script>
<base target="_top">
<link rel="stylesheet" type="text/css" href="/_static/css/web.css">
<script type="text/javascript">
if (window!=window.top) {
$(document).ready(function(){ document.body.classList.add('wb_embedded') });
}
</script>
</head>
<body class="navia">
<div class="ia-banners">
<div class="ia-banner info" data-campaign="new-lending-mechanism">
<p><a href="http://blog.archive.org/2020/06/10/temporary-national-emergency-library-to-close-2-weeks-early-returning-to-traditional-controlled-digital-lending/" rel="nofollow">See what's new with book lending at the Internet Archive</a></p>
<form class="banner-close" action="" method="get" data-action="ia-banner-close">
<fieldset>
<button type="submit"></button>
</fieldset>
</form>
</div>
</div>
<topnav-element config='{"baseHost":"archive.org","waybackUrl":"web.archive.org","screenName":false,"username":"","eventCategory":"MobileTopNav","waybackPagesArchived":"446 billion","isAdmin":0,"identifier":false,"hiddenSearchOptions":["RADIO"],"hideSearch":false,"baseUrl":"archive.org"}'></topnav-element>
<div id="navwrap1" class="">
<div id="navwrap2">
<div class="navbar navbar-inverse navbar-static-top" role="navigation">
<div id="nav-tophat-helper" class="hidden-xs"></div>
<ul class="nav navbar-nav navbar-main">
<li class="pull-left">
<a title="Home" class="navia-link home" href="https://archive.org" target="_top">
<span class="iconochive-logo"></span>
<div class="archive-wordmark">
<img src="https://archive.org/images/wordmark-narrow-spacing.svg" alt="Internet Archive Logo">
</div>
</a>
</li>
<li class="dropdown dropdown-ia pull-left">
<a title="Web" class="navia-link web"
data-top-kind="web"
href="https://archive.org/web/"
target="_top"><span class="iconochive-web" aria-hidden="true"></span><span>web</span></a>
</li>
<li class="dropdown dropdown-ia pull-left">
<a title="Texts" class="navia-link texts"
data-top-kind="texts"
href="https://archive.org/details/texts"
target="_top"><span class="iconochive-texts" aria-hidden="true"></span><span>books</span></a>
</li>
<li class="dropdown dropdown-ia pull-left">
<a title="Video" class="navia-link movies"
data-top-kind="movies"
href="https://archive.org/details/movies"
target="_top"><span class="iconochive-movies" aria-hidden="true"></span><span>video</span></a>
</li>
<li class="dropdown dropdown-ia pull-left">
<a title="Audio" class="navia-link audio"
data-top-kind="audio"
href="https://archive.org/details/audio"
target="_top"><span class="iconochive-audio" aria-hidden="true"></span><span>audio</span></a>
</li>
<li class="dropdown dropdown-ia pull-left">
<a title="Software" class="navia-link software"
data-top-kind="software"
href="https://archive.org/details/software"
target="_top"><span class="iconochive-software" aria-hidden="true"></span><span>software</span></a>
</li>
<li class="dropdown dropdown-ia pull-left rightmost">
<a title="Image" class="navia-link image"
data-top-kind="image"
href="https://archive.org/details/image"
target="_top"><span class="iconochive-image" aria-hidden="true"></span><span>images</span></a>
</li>
<li class="nav-right-tool nav-hamburger pull-right hidden-sm hidden-md hidden-lg">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#nav-hamburger-menu" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-collapse collapse" id="nav-hamburger-menu" aria-expanded="false">
<ul id="" class="nav navbar-nav">
<li><a target="_top" data-event-click-tracking="TopNav|AboutLink" href="https://archive.org/about/">ABOUT</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|ContactLink" href="https://archive.org/about/contact.php">CONTACT</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|BlogLink" href="//blog.archive.org">BLOG</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|ProjectsLink" href="https://archive.org/projects">PROJECTS</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|HelpLink" href="https://archive.org/about/faqs.php">HELP</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|DonateLink" href="https://archive.org/donate">DONATE <span class="iconochive-heart"></span></a></li>
<li><a target="_top" data-event-click-tracking="TopNav|JobsLink" href="https://archive.org/about/jobs.php">JOBS</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|VolunteerLink" href="https://archive.org/about/volunteerpositions.php">VOLUNTEER</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|PeopleLink" href="https://archive.org/about/bios.php">PEOPLE</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div>
</div><!-- /.container-fluid -->
</li>
<li class="nav-right-tool pull-right" id="nav-search" >
<a class="nav-search-button" href="https://archive.org/search.php"
onclick="$(this).parents('#nav-search').find('form').submit(); return false"
aria-hidden="true"
><span class="iconochive-search" aria-hidden="true"></span><span class="sr-only">search</span></a>
<div class="searchbar">
<form
class="search-form js-search-form"
method="get"
role="search"
action="https://archive.org/searchresults.php"
target="_top"
data-event-form-tracking="TopNav|SearchForm"
data-wayback-machine-search-url="https://web.archive.org/web/*/"
>
<input
id="search-bar-2"
class="js-search-bar"
data-autocomplete-format="right"
placeholder="Search"
type="text"
name="search"
value=""
aria-controls="navbar_search_options"
aria-label="Search the Archive. Filters and Advanced Search available below."
/>
<div
id="navbar_search_options"
class="search-options js-search-options"
aria-expanded="false"
aria-label="Search Options"
data-keep-open-when-changed="false"
>
<div class="pre-search-options"></div>
<fieldset>
<label>
<input
type="radio"
name="sin"
value=""
checked
>
<span>Search metadata</span>
</label>
<label>
<input
type="radio"
name="sin"
value="TXT"
>
<span>Search text contents</span>
</label>
<label>
<input
type="radio"
name="sin"
value="TV"
>
<span>Search TV news captions</span>
</label>
<label>
<input
type="radio"
name="sin"
value="WEB"
>
<span>Search archived web sites</span>
</label>
</fieldset>
<a
href="https://archive.org/advancedsearch.php"
class="search-options__advanced-search-link"
onclick="return AJS.advanced_search(this)"
>Advanced Search</a>
</div>
<input class="js-tvsearch" type="hidden" value='{"ands":[],"minday":"06/04/2009","maxday":"06/24/2020"}'/>
<input type="submit" value="Search"/>
</form>
</div><!--/.searchbar -->
</li>
<li class="nav-right-tool pull-right">
<a class="nav-upload" href="https://archive.org/create" _target="top"
data-event-click-tracking="TopNav|UploadIcon"
><span class="iconochive-upload" aria-hidden="true"></span><span class="sr-only">upload</span><span class="hidden-xs-span hidden-sm-span">UPLOAD</span></a>
</li>
<li class="nav-right-tool pull-right leftmost dropdown-ia">
<div class="nav-user dropdown-ia">
<span class="ghost80 person-icon"
id="guest-menu"
data-handler="dropdown"
><span class="iconochive-person" aria-hidden="true"></span><span class="sr-only">person</span> </span>
<ul class="dropdown-menu guest mydrop" role="menu" aria-labelledby="guest">
<li><a
href="https://archive.org/account/signup"
data-event-click-tracking="TopNav|AvatarMenu-Signup"
>Sign up for free</a></li>
<li><a
href="https://archive.org/account/login"
data-event-click-tracking="TopNav|AvatarMenu-Login"
>Log in</a></li>
</ul>
<a href="https://archive.org/account/signup"
class="nav-user-link hidden-xs-span hidden-sm-span"
_target="top"
data-event-click-tracking="TopNav|SignupIcon"
><span>SIGN UP</span></a>
<span class="hidden-xs-span hidden-sm-span pipe-separate">|</span>
<a href="https://archive.org/account/login"
class="nav-user-link hidden-xs-span hidden-sm-span"
_target="top"
data-event-click-tracking="TopNav|LoginIcon"
><span>LOG IN</span></a>
</div>
</li>
</ul>
<ul id="nav-abouts" class="">
<li><a target="_top" data-event-click-tracking="TopNav|AboutLink" href="https://archive.org/about/">ABOUT</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|ContactLink" href="https://archive.org/about/contact.php">CONTACT</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|BlogLink" href="//blog.archive.org">BLOG</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|ProjectsLink" href="https://archive.org/projects">PROJECTS</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|HelpLink" href="https://archive.org/about/faqs.php">HELP</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|DonateLink" href="https://archive.org/donate">DONATE <span class="iconochive-heart"></span></a></li>
<li><a target="_top" data-event-click-tracking="TopNav|JobsLink" href="https://archive.org/about/jobs.php">JOBS</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|VolunteerLink" href="https://archive.org/about/volunteerpositions.php">VOLUNTEER</a></li>
<li><a target="_top" data-event-click-tracking="TopNav|PeopleLink" href="https://archive.org/about/bios.php">PEOPLE</a></li>
</ul>
</div><!--/.navbar-->
<div id="nav-tophat" class="collapse">
<div class="row toprow web" style="max-width:1000px;margin:auto;display:block;">
<div class="col-xs-12">
<div class="wayback-txt">
Search the history of over 446 billion <a style="display:inline"
data-event-click-tracking="TopNav|WaybackMachineStatsLink"
href="https://blog.archive.org/2016/10/23/defining-web-pages-web-sites-and-web-captures/"
>web pages</a> on the Internet.
</div>
<div class="roundbox7 wayback-main">
<div class="row">
<div class="col-sm-6" style="padding-left:0; padding-right:0;">
<a style="padding-bottom:0"
data-event-click-tracking="TopNav|WaybackMachineLogoLink"
href="https://archive.org/web/"
><img src="https://archive.org/images/WaybackLogoSmall.png" alt="Wayback Machine"/></a>
</div>
<div class="col-sm-6" style="padding-top:13px;">
<form style="position:relative;">
<span class="iconochive-search" aria-hidden="true"></span><span class="sr-only">search</span> <label for="nav-wb-url" class="sr-only">Search the Wayback Machine</label>
<input id="nav-wb-url" class="form-control input-sm roundbox20" type="text"
placeholder="enter URL or keywords" name="url" autocomplete="off"
onclick="$(this).css('padding-left','').parent().find('.iconochive-search').hide()"/>
</form>
</div>
</div><!--/.row-->
</div><!--/.wayback-main-->
</div>
</div><!--./row-->
<div class="row toprow fivecolumns texts">
<div class="col-sm-2 col-xs-7 col-sm-push-4">
<div class="linx">
<h5>Featured</h5>
<a
href="https://archive.org/details/books"
data-event-click-tracking="TopNav|FeaturedLink-AllBooks"
><span class="iconochive-texts" aria-hidden="true"></span><span class="sr-only">texts</span> All Books</a>
<a
href="https://archive.org/details/texts"
data-event-click-tracking="TopNav|FeaturedLink-AllTexts"
>All Texts</a>
<a
href="https://archive.org/search.php?query=mediatype:texts&sort=-publicdate"
data-event-click-tracking="TopNav|FeaturedLink-ThisJustInTexts"
><span class="iconochive-latest" aria-hidden="true"></span><span class="sr-only">latest</span> This Just In</a>
<a href="https://archive.org/details/smithsonian" title="Smithsonian Libraries" data-event-click-tracking="TopNav|FeaturedLink-SmithsonianLibraries">Smithsonian Libraries</a> <a href="https://archive.org/details/fedlink" title="FEDLINK (US)" data-event-click-tracking="TopNav|FeaturedLink-FEDLINKUS">FEDLINK (US)</a> <a href="https://archive.org/details/genealogy" title="Genealogy" data-event-click-tracking="TopNav|FeaturedLink-Genealogy">Genealogy</a> <a href="https://archive.org/details/lincolncollection" title="Lincoln Collection" data-event-click-tracking="TopNav|FeaturedLink-LincolnCollection">Lincoln Collection</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-2">
<div class="widgets">
<center class="items_list">
<div class="items_list_img">
<a
href="https://archive.org/details/inlibrary"
style="background-image: url('https://archive.org/images/book-lend.png');"
aria-hidden="true"
data-event-click-tracking="TopNav|CircleWidget-BooksToBorrow"
></a>
</div>
<a
class="stealth boxy-label"
data-event-click-tracking="TopNav|CircleWidget-BooksToBorrow"
href="https://archive.org/details/inlibrary"
>Books to Borrow</a>
</center>
</div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7 col-sm-push-2">
<div class="linx ">
<h5>Top</h5>
<a href="https://archive.org/details/americana" title="American Libraries" data-event-click-tracking="TopNav|TopLink-AmericanLibraries">American Libraries</a> <a href="https://archive.org/details/toronto" title="Canadian Libraries" data-event-click-tracking="TopNav|TopLink-CanadianLibraries">Canadian Libraries</a> <a href="https://archive.org/details/universallibrary" title="Universal Library" data-event-click-tracking="TopNav|TopLink-UniversalLibrary">Universal Library</a> <a href="https://archive.org/details/opensource" title="Community Texts" data-event-click-tracking="TopNav|TopLink-CommunityTexts">Community Texts</a> <a href="https://archive.org/details/gutenberg" title="Project Gutenberg" data-event-click-tracking="TopNav|TopLink-ProjectGutenberg">Project Gutenberg</a> <a href="https://archive.org/details/biodiversity" title="Biodiversity Heritage Library" data-event-click-tracking="TopNav|TopLink-BiodiversityHeritageLibrary">Biodiversity Heritage Library</a> <a href="https://archive.org/details/iacl" title="Children's Library" data-event-click-tracking="TopNav|TopLink-ChildrenSLibrary">Children's Library</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-4">
<div class="widgets">
<center class="items_list">
<div class="items_list_img">
<a
href="https://openlibrary.org"
style="background-image: url('https://archive.org/images/widgetOL.png');"
aria-hidden="true"
data-event-click-tracking="TopNav|CircleWidget-OpenLibrary"
></a>
</div>
<a
class="stealth boxy-label"
data-event-click-tracking="TopNav|CircleWidget-OpenLibrary"
href="https://openlibrary.org"
>Open Library</a>
</center>
</div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7">
<div class="linx linx-topped">
</div>
</div><!--/.col-sm-2-->
</div><!--/.row-->
<div class="row toprow fivecolumns movies">
<div class="col-sm-2 col-xs-7 col-sm-push-4">
<div class="linx">
<h5>Featured</h5>
<a
href="https://archive.org/details/movies"
data-event-click-tracking="TopNav|FeaturedLink-AllVideo"
><span class="iconochive-movies" aria-hidden="true"></span><span class="sr-only">movies</span> All video</a>
<a
href="https://archive.org/search.php?query=mediatype:movies&sort=-publicdate"
data-event-click-tracking="TopNav|FeaturedLink-ThisJustInVideo"
><span class="iconochive-latest" aria-hidden="true"></span><span class="sr-only">latest</span> This Just In</a>
<a href="https://archive.org/details/prelinger" title="Prelinger Archives" data-event-click-tracking="TopNav|FeaturedLink-PrelingerArchives">Prelinger Archives</a> <a href="https://archive.org/details/democracy_now_vid" title="Democracy Now!" data-event-click-tracking="TopNav|FeaturedLink-DemocracyNow">Democracy Now!</a> <a href="https://archive.org/details/occupywallstreet" title="Occupy Wall Street" data-event-click-tracking="TopNav|FeaturedLink-OccupyWallStreet">Occupy Wall Street</a> <a href="https://archive.org/details/nsa" title="TV NSA Clip Library" data-event-click-tracking="TopNav|FeaturedLink-TVNSAClipLibrary">TV NSA Clip Library</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-2">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/tv"
style="background-image: url('https://archive.org/services/img/tv');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/tv">TV News</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7 col-sm-push-2">
<div class="linx ">
<h5>Top</h5>
<a href="https://archive.org/details/animationandcartoons" title="Animation &amp; Cartoons" data-event-click-tracking="TopNav|TopLink-AnimationCartoons">Animation & Cartoons</a> <a href="https://archive.org/details/artsandmusicvideos" title="Arts &amp; Music" data-event-click-tracking="TopNav|TopLink-ArtsMusic">Arts & Music</a> <a href="https://archive.org/details/computersandtechvideos" title="Computers &amp; Technology" data-event-click-tracking="TopNav|TopLink-ComputersTechnology">Computers & Technology</a> <a href="https://archive.org/details/culturalandacademicfilms" title="Cultural &amp; Academic Films" data-event-click-tracking="TopNav|TopLink-CulturalAcademicFilms">Cultural & Academic Films</a> <a href="https://archive.org/details/ephemera" title="Ephemeral Films" data-event-click-tracking="TopNav|TopLink-EphemeralFilms">Ephemeral Films</a> <a href="https://archive.org/details/moviesandfilms" title="Movies" data-event-click-tracking="TopNav|TopLink-Movies">Movies</a> <a href="https://archive.org/details/newsandpublicaffairs" title="News &amp; Public Affairs" data-event-click-tracking="TopNav|TopLink-NewsPublicAffairs">News & Public Affairs</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-4">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/911"
style="background-image: url('https://archive.org/services/img/911');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/911">Understanding 9/11</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7">
<div class="linx linx-topped">
<a href="https://archive.org/details/spiritualityandreligion" title="Spirituality &amp; Religion" data-event-click-tracking="TopNav|TopLink-SpiritualityReligion">Spirituality & Religion</a> <a href="https://archive.org/details/sports" title="Sports Videos" data-event-click-tracking="TopNav|TopLink-SportsVideos">Sports Videos</a> <a href="https://archive.org/details/television" title="Television" data-event-click-tracking="TopNav|TopLink-Television">Television</a> <a href="https://archive.org/details/gamevideos" title="Videogame Videos" data-event-click-tracking="TopNav|TopLink-VideogameVideos">Videogame Videos</a> <a href="https://archive.org/details/vlogs" title="Vlogs" data-event-click-tracking="TopNav|TopLink-Vlogs">Vlogs</a> <a href="https://archive.org/details/youth_media" title="Youth Media" data-event-click-tracking="TopNav|TopLink-YouthMedia">Youth Media</a> </div>
</div><!--/.col-sm-2-->
</div><!--/.row-->
<div class="row toprow fivecolumns audio">
<div class="col-sm-2 col-xs-7 col-sm-push-4">
<div class="linx">
<h5>Featured</h5>
<a
href="https://archive.org/details/audio"
data-event-click-tracking="TopNav|FeaturedLink-AllAudio"
><span class="iconochive-audio" aria-hidden="true"></span><span class="sr-only">audio</span> All audio</a>
<a
href="https://archive.org/search.php?query=mediatype:audio&sort=-publicdate"
data-event-click-tracking="TopNav|FeaturedLink-ThisJustInAudio"
><span class="iconochive-latest" aria-hidden="true"></span><span class="sr-only">latest</span> This Just In</a>
<a href="https://archive.org/details/GratefulDead" title="Grateful Dead" data-event-click-tracking="TopNav|FeaturedLink-GratefulDead">Grateful Dead</a> <a href="https://archive.org/details/netlabels" title="Netlabels" data-event-click-tracking="TopNav|FeaturedLink-Netlabels">Netlabels</a> <a href="https://archive.org/details/oldtimeradio" title="Old Time Radio" data-event-click-tracking="TopNav|FeaturedLink-OldTimeRadio">Old Time Radio</a> <a href="https://archive.org/details/78rpm" title="78 RPMs and Cylinder Recordings" data-event-click-tracking="TopNav|FeaturedLink-78RPMsAndCylinderRecordings">78 RPMs and Cylinder Recordings</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-2">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/etree"
style="background-image: url('https://archive.org/services/img/etree');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/etree">Live Music Archive</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7 col-sm-push-2">
<div class="linx ">
<h5>Top</h5>
<a href="https://archive.org/details/audio_bookspoetry" title="Audio Books &amp; Poetry" data-event-click-tracking="TopNav|TopLink-AudioBooksPoetry">Audio Books & Poetry</a> <a href="https://archive.org/details/opensource_audio" title="Community Audio" data-event-click-tracking="TopNav|TopLink-CommunityAudio">Community Audio</a> <a href="https://archive.org/details/audio_tech" title="Computers, Technology and Science" data-event-click-tracking="TopNav|TopLink-ComputersTechnologyAndScience">Computers, Technology and Science</a> <a href="https://archive.org/details/audio_music" title="Music, Arts &amp; Culture" data-event-click-tracking="TopNav|TopLink-MusicArtsCulture">Music, Arts & Culture</a> <a href="https://archive.org/details/audio_news" title="News &amp; Public Affairs" data-event-click-tracking="TopNav|TopLink-NewsPublicAffairs">News & Public Affairs</a> <a href="https://archive.org/details/audio_foreign" title="Non-English Audio" data-event-click-tracking="TopNav|TopLink-NonEnglishAudio">Non-English Audio</a> <a href="https://archive.org/details/audio_religion" title="Spirituality &amp; Religion" data-event-click-tracking="TopNav|TopLink-SpiritualityReligion">Spirituality & Religion</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-4">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/librivoxaudio"
style="background-image: url('https://archive.org/services/img/librivoxaudio');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/librivoxaudio">Librivox Free Audiobook</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7">
<div class="linx linx-topped">
<a href="https://archive.org/details/podcast_analisis-financiero_503881684" title="Análisis Financiero" data-event-click-tracking="TopNav|TopLink-AnLisisFinanciero">Análisis Financiero</a> <a href="https://archive.org/details/podcast_inn-the-heat-of-the-night-pod_1451228162" title="INN THE HEAT OF THE NIGHT POD CAST" data-event-click-tracking="TopNav|TopLink-INNTHEHEATOFTHENIGHTPODCAST">INN THE HEAT OF THE NIGHT POD CAST</a> <a href="https://archive.org/details/podcast_family-adventure-podcast-with_806349037" title="Family Adventure Podcast with Erik Hemingway" data-event-click-tracking="TopNav|TopLink-FamilyAdventurePodcastWithErikHemingway">Family Adventure Podcast with Erik Hemingway</a> <a href="https://archive.org/details/podcast_film-frenzy-radio-podcast_489184357" title="Film Frenzy Radio Podcast" data-event-click-tracking="TopNav|TopLink-FilmFrenzyRadioPodcast">Film Frenzy Radio Podcast</a> <a href="https://archive.org/details/podcast_integrative-complementary-me_431759965" title="Integrative &amp; Complementary Medicine" data-event-click-tracking="TopNav|TopLink-IntegrativeComplementaryMedicine">Integrative & Complementary Medicine</a> <a href="https://archive.org/details/podcast_my-first-podcast_1455671115" title="My first podcast!" data-event-click-tracking="TopNav|TopLink-MyFirstPodcast">My first podcast!</a> <a href="https://archive.org/details/podcast_tafseer-surah-hud-11_713518064" title="Tafseer-Surah-Hud-11" data-event-click-tracking="TopNav|TopLink-TafseerSurahHud11">Tafseer-Surah-Hud-11</a> </div>
</div><!--/.col-sm-2-->
</div><!--/.row-->
<div class="row toprow fivecolumns software">
<div class="col-sm-2 col-xs-7 col-sm-push-4">
<div class="linx">
<h5>Featured</h5>
<a
href="https://archive.org/details/software"
data-event-click-tracking="TopNav|FeaturedLink-AllSoftware"
><span class="iconochive-software" aria-hidden="true"></span><span class="sr-only">software</span> All software</a>
<a
href="https://archive.org/search.php?query=mediatype:software&sort=-publicdate"
data-event-click-tracking="TopNav|FeaturedLink-ThisJustInSoftware"
><span class="iconochive-latest" aria-hidden="true"></span><span class="sr-only">latest</span> This Just In</a>
<a href="https://archive.org/details/tosec" title="Old School Emulation" data-event-click-tracking="TopNav|FeaturedLink-OldSchoolEmulation">Old School Emulation</a> <a href="https://archive.org/details/softwarelibrary_msdos_games" title="MS-DOS Games" data-event-click-tracking="TopNav|FeaturedLink-MSDOSGames">MS-DOS Games</a> <a href="https://archive.org/details/historicalsoftware" title="Historical Software" data-event-click-tracking="TopNav|FeaturedLink-HistoricalSoftware">Historical Software</a> <a href="https://archive.org/details/classicpcgames" title="Classic PC Games" data-event-click-tracking="TopNav|FeaturedLink-ClassicPCGames">Classic PC Games</a> <a href="https://archive.org/details/softwarelibrary" title="Software Library" data-event-click-tracking="TopNav|FeaturedLink-SoftwareLibrary">Software Library</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-2">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/internetarcade"
style="background-image: url('https://archive.org/services/img/internetarcade');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/internetarcade">Internet Arcade</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7 col-sm-push-2">
<div class="linx ">
<h5>Top</h5>
<a href="https://archive.org/details/kodi_archive" title="Kodi Archive and Support File" data-event-click-tracking="TopNav|TopLink-KodiArchiveAndSupportFile">Kodi Archive and Support File</a> <a href="https://archive.org/details/vintagesoftware" title="Vintage Software" data-event-click-tracking="TopNav|TopLink-VintageSoftware">Vintage Software</a> <a href="https://archive.org/details/apkarchive" title="APK" data-event-click-tracking="TopNav|TopLink-APK">APK</a> <a href="https://archive.org/details/open_source_software" title="Community Software" data-event-click-tracking="TopNav|TopLink-CommunitySoftware">Community Software</a> <a href="https://archive.org/details/softwarelibrary_msdos" title="MS-DOS" data-event-click-tracking="TopNav|TopLink-MSDOS">MS-DOS</a> <a href="https://archive.org/details/cd-roms" title="CD-ROM Software" data-event-click-tracking="TopNav|TopLink-CDROMSoftware">CD-ROM Software</a> <a href="https://archive.org/details/cdromsoftware" title="CD-ROM Software Library" data-event-click-tracking="TopNav|TopLink-CDROMSoftwareLibrary">CD-ROM Software Library</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-4">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/consolelivingroom"
style="background-image: url('https://archive.org/services/img/consolelivingroom');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/consolelivingroom">Console Living Room</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7">
<div class="linx linx-topped">
<a href="https://archive.org/details/softwaresites" title="Software Sites" data-event-click-tracking="TopNav|TopLink-SoftwareSites">Software Sites</a> <a href="https://archive.org/details/softwarecapsules" title="Software Capsules Compilation" data-event-click-tracking="TopNav|TopLink-SoftwareCapsulesCompilation">Software Capsules Compilation</a> <a href="https://archive.org/details/tucows" title="Tucows Software Library" data-event-click-tracking="TopNav|TopLink-TucowsSoftwareLibrary">Tucows Software Library</a> <a href="https://archive.org/details/cdromimages" title="CD-ROM Images" data-event-click-tracking="TopNav|TopLink-CDROMImages">CD-ROM Images</a> <a href="https://archive.org/details/cdbbsarchive" title="Shareware CD-ROMs" data-event-click-tracking="TopNav|TopLink-SharewareCDROMs">Shareware CD-ROMs</a> <a href="https://archive.org/details/softwarelibrary_zx_spectrum" title="ZX Spectrum" data-event-click-tracking="TopNav|TopLink-ZXSpectrum">ZX Spectrum</a> <a href="https://archive.org/details/doom-cds" title="DOOM Level CD" data-event-click-tracking="TopNav|TopLink-DOOMLevelCD">DOOM Level CD</a> </div>
</div><!--/.col-sm-2-->
</div><!--/.row-->
<div class="row toprow fivecolumns image">
<div class="col-sm-2 col-xs-7 col-sm-push-4">
<div class="linx">
<h5>Featured</h5>
<a
href="https://archive.org/details/image"
data-event-click-tracking="TopNav|FeaturedLink-AllImage"
><span class="iconochive-image" aria-hidden="true"></span><span class="sr-only">image</span> All images</a>
<a
href="https://archive.org/search.php?query=mediatype:image&sort=-publicdate"
data-event-click-tracking="TopNav|FeaturedLink-ThisJustInImage"
><span class="iconochive-latest" aria-hidden="true"></span><span class="sr-only">latest</span> This Just In</a>
<a href="https://archive.org/details/flickrcommons" title="Flickr Commons" data-event-click-tracking="TopNav|FeaturedLink-FlickrCommons">Flickr Commons</a> <a href="https://archive.org/details/flickr-ows" title="Occupy Wall Street Flickr" data-event-click-tracking="TopNav|FeaturedLink-OccupyWallStreetFlickr">Occupy Wall Street Flickr</a> <a href="https://archive.org/details/coverartarchive" title="Cover Art" data-event-click-tracking="TopNav|FeaturedLink-CoverArt">Cover Art</a> <a href="https://archive.org/details/maps_usgs" title="USGS Maps" data-event-click-tracking="TopNav|FeaturedLink-USGSMaps">USGS Maps</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-2">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/metropolitanmuseumofart-gallery"
style="background-image: url('https://archive.org/services/img/metropolitanmuseumofart-gallery');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/metropolitanmuseumofart-gallery">Metropolitan Museum</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7 col-sm-push-2">
<div class="linx ">
<h5>Top</h5>
<a href="https://archive.org/details/nasa" data-event-click-tracking="TopNav|TopLink-NASAImages">NASA Images</a> <a href="https://archive.org/details/solarsystemcollection" data-event-click-tracking="TopNav|TopLink-SolarSystemCollection">Solar System Collection</a> <a href="https://archive.org/details/amesresearchcenterimagelibrary" data-event-click-tracking="TopNav|TopLink-AmesResearchCenter">Ames Research Center</a> </div>
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-5 col-sm-pull-4">
<div class="widgets">
<center class="items_list"> <div class="items_list_img">
<a
href="https://archive.org/details/brooklynmuseum"
style="background-image: url('https://archive.org/services/img/brooklynmuseum');"
aria-hidden="true"
data-event-click-tracking="ItemList|ItemListLink"
></a>
</div>
<a class="stealth boxy-label" data-event-click-tracking="ItemList|ItemListLink" href="https://archive.org/details/brooklynmuseum">Brooklyn Museum</a></center> </div><!--/.widgets-->
</div><!--/.col-sm-2-->
<div class="col-sm-2 col-xs-7">
<div class="linx linx-topped">
</div>
</div><!--/.col-sm-2-->
</div><!--/.row-->
</div><!--/#nav-tophat-->
</div><!--#navwrap2-->
</div><!--#navwrap1-->
<script type="text/javascript">show_donation_banner();</script>
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-md-4 col-sm-4 col-xs-4 text-right">
<div id="donation-link" class="web_message">
<a href="http://archive.org/donate/" data-event-click-tracking="Wayback|DonateButton" class="beta_button">DONATE</a>
</div>
</div>
<div class="col-md-4 col-sm-4 col-xs-4 text-center">
<div id="logoHome">
<a href="/web/"><h1><span>Internet Archive's Wayback Machine</span></h1></a>
</div>
</div>
</div>
<div id="errorBorder">
<div id="positionHome">
<div id="searchHome">
<form name="form1" method="get" action="/web/submit">
<input type="text" name="url" value="http://crosbymichael.disqus.com/embed.js" size="40" onfocus="javascript:this.focus();this.select();" >
<button type="submit" name="type" value="replay">Latest</button>
<button type="submit" name="type" value="urlquery">Show All</button>
</form>
</div>
<div id="error">
<h2>Hrm.</h2>
<p>The Wayback Machine has not archived that URL.</p>
<div id="livewebInfo" class="available">
<h2 class="blue">This page is available on the web!</h2>
<p>Help make the Wayback Machine more complete!</p>
<form name="spn-form" id="spn-form" action="/save" method="POST">
<p><b><a href="#" onclick="$('#spn-form').submit();">Save this url in the Wayback Machine</a></b></p>
<input name="url_preload" type="hidden" value="http://crosbymichael.disqus.com/embed.js" />
</form>
</div>
</div>
<p>Click here to search for all archived pages under
<a href="http://web.archive.org/web/*/http://crosbymichael.disqus.com/*">http://crosbymichael.disqus.com/</a>.
</p>
</div>
</div>
</div>
</div>
<noscript>
<div class="no-script-message">
The Wayback Machine requires your browser to support JavaScript, please email <a href="mailto:info@archive.org">info@archive.org</a><br/>if you have any questions about this.
</div>
</noscript>
<footer>
<div id="footerHome">
<p>
The Wayback Machine is an initiative of the
<a href="//archive.org/">Internet Archive</a>,
a 501(c)(3) non-profit, building a digital library of
Internet sites and other cultural artifacts in digital form.
<br/>Other <a href="//archive.org/projects/">projects</a> include
<a href="https://openlibrary.org/">Open Library</a> &amp;
<a href="https://archive-it.org">archive-it.org</a>.
</p>
<p>
Your use of the Wayback Machine is subject to the Internet Archive's
<a href="//archive.org/about/terms.php">Terms of Use</a>.
</p>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,119 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
(function(){var E;var g=window,n=document,p=function(a){var b=g._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===g["ga-disable-"+a])return!0;try{var c=g.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(f){}a=[];b=n.cookie.split(";");c=/^\s*AMP_TOKEN=\s*(.*?)\s*$/;for(var d=0;d<b.length;d++){var e=b[d].match(c);e&&a.push(e[1])}for(b=0;b<a.length;b++)if("$OPT_OUT"==decodeURIComponent(a[b]))return!0;return!1};var q=function(a){return encodeURIComponent?encodeURIComponent(a).replace(/\(/g,"%28").replace(/\)/g,"%29"):a},r=/^(www\.)?google(\.com?)?(\.[a-z]{2})?$/,u=/(^|\.)doubleclick\.net$/i;function Aa(a,b){switch(b){case 0:return""+a;case 1:return 1*a;case 2:return!!a;case 3:return 1E3*a}return a}function Ba(a){return"function"==typeof a}function Ca(a){return void 0!=a&&-1<(a.constructor+"").indexOf("String")}function F(a,b){return void 0==a||"-"==a&&!b||""==a}function Da(a){if(!a||""==a)return"";for(;a&&-1<" \n\r\t".indexOf(a.charAt(0));)a=a.substring(1);for(;a&&-1<" \n\r\t".indexOf(a.charAt(a.length-1));)a=a.substring(0,a.length-1);return a}
function Ea(){return Math.round(2147483647*Math.random())}function Fa(){}function G(a,b){if(encodeURIComponent instanceof Function)return b?encodeURI(a):encodeURIComponent(a);H(68);return escape(a)}function I(a){a=a.split("+").join(" ");if(decodeURIComponent instanceof Function)try{return decodeURIComponent(a)}catch(b){H(17)}else H(68);return unescape(a)}var Ga=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)};
function Ia(a,b){if(a){var c=J.createElement("script");c.type="text/javascript";c.async=!0;c.src=a;c.id=b;a=J.getElementsByTagName("script")[0];a.parentNode.insertBefore(c,a);return c}}function K(a){return a&&0<a.length?a[0]:""}function L(a){var b=a?a.length:0;return 0<b?a[b-1]:""}var nf=function(){this.prefix="ga.";this.values={}};nf.prototype.set=function(a,b){this.values[this.prefix+a]=b};nf.prototype.get=function(a){return this.values[this.prefix+a]};
nf.prototype.contains=function(a){return void 0!==this.get(a)};function Ka(a){0==a.indexOf("www.")&&(a=a.substring(4));return a.toLowerCase()}
function La(a,b){var c={url:a,protocol:"http",host:"",path:"",R:new nf,anchor:""};if(!a)return c;var d=a.indexOf("://");0<=d&&(c.protocol=a.substring(0,d),a=a.substring(d+3));d=a.search("/|\\?|#");if(0<=d)c.host=a.substring(0,d).toLowerCase(),a=a.substring(d);else return c.host=a.toLowerCase(),c;d=a.indexOf("#");0<=d&&(c.anchor=a.substring(d+1),a=a.substring(0,d));d=a.indexOf("?");0<=d&&(Na(c.R,a.substring(d+1)),a=a.substring(0,d));c.anchor&&b&&Na(c.R,c.anchor);a&&"/"==a.charAt(0)&&(a=a.substring(1));
c.path=a;return c}
function Oa(a,b){function c(a){var b=(a.hostname||"").split(":")[0].toLowerCase(),c=(a.protocol||"").toLowerCase();c=1*a.port||("http:"==c?80:"https:"==c?443:"");a=a.pathname||"";0==a.indexOf("/")||(a="/"+a);return[b,""+c,a]}b=b||J.createElement("a");b.href=J.location.href;var d=(b.protocol||"").toLowerCase(),e=c(b),f=b.search||"",Be=d+"//"+e[0]+(e[1]?":"+e[1]:"");0==a.indexOf("//")?a=d+a:0==a.indexOf("/")?a=Be+a:a&&0!=a.indexOf("?")?0>a.split("/")[0].indexOf(":")&&(a=Be+e[2].substring(0,e[2].lastIndexOf("/"))+
"/"+a):a=Be+e[2]+(a||f);b.href=a;d=c(b);return{protocol:(b.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:b.search||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b).push(c)}b=Da(b).split("&");for(var d=0;d<b.length;d++)if(b[d]){var e=b[d].indexOf("=");0>e?c(b[d],"1"):c(b[d].substring(0,e),b[d].substring(e+1))}}
function Pa(a,b){return F(a)||"["==a.charAt(0)&&"]"==a.charAt(a.length-1)?"-":a.indexOf(J.domain+(b&&"/"!=b?b:""))==(0==a.indexOf("http://")?7:0==a.indexOf("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){1<=Qa||1<=100*Math.random()||ld()||(a=["utmt=error","utmerr="+a,"utmwv=5.7.2","utmn="+Ea(),"utmsp=1"],b&&a.push("api="+b),c&&a.push("msg="+G(c.substring(0,100))),M.w&&a.push("aip=1"),Sa(a.join("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a}
var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(!0),Gb=Va("currencyCode"),v=Va("storeGac"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(!0),Sb=N(!0),Tb=N(!0),Ub=N(!0),Vb=N(!0),Wb=N(!0),Zb=N(!0),$b=N(!0),ac=N(!0),bc=N(!0),cc=N(!0),
R=N(!0),dc=N(!0),ec=N(!0),fc=N(!0),gc=N(!0),hc=N(!0),ic=N(!0),jc=N(!0),S=N(!0),kc=N(!0),lc=N(!0),mc=N(!0),nc=N(!0),oc=N(!0),pc=N(!0),qc=N(!0),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();
var Mc=N(),Nc=N(),Yb=N(),Jc=N(),Kc=N(),Lc=Va("utmtCookieName"),Cd=Va("displayFeatures"),Oc=N(),of=Va("gtmid"),Oe=Va("uaName"),Pe=Va("uaDomain"),Qe=Va("uaPath"),pf=Va("linkid"),w=N(),x=N(),y=N(),z=N();var Re=function(){function a(a,c,d){T(qf.prototype,a,c,d)}a("_createTracker",qf.prototype.hb,55);a("_getTracker",qf.prototype.oa,0);a("_getTrackerByName",qf.prototype.u,51);a("_getTrackers",qf.prototype.pa,130);a("_anonymizeIp",qf.prototype.aa,16);a("_forceSSL",qf.prototype.la,125);a("_getPlugin",Pc,120)},Se=function(){function a(a,c,d){T(U.prototype,a,c,d)}Qc("_getName",$a,58);Qc("_getAccount",Wa,64);Qc("_visitCode",Q,54);Qc("_getClientInfo",ib,53,1);Qc("_getDetectTitle",lb,56,1);Qc("_getDetectFlash",
jb,65,1);Qc("_getLocalGifPath",wb,57);Qc("_getServiceMode",xb,59);V("_setClientInfo",ib,66,2);V("_setAccount",Wa,3);V("_setNamespace",Ya,48);V("_setAllowLinker",fb,11,2);V("_setDetectFlash",jb,61,2);V("_setDetectTitle",lb,62,2);V("_setLocalGifPath",wb,46,0);V("_setLocalServerMode",xb,92,void 0,0);V("_setRemoteServerMode",xb,63,void 0,1);V("_setLocalRemoteServerMode",xb,47,void 0,2);V("_setSampleRate",vb,45,1);V("_setCampaignTrack",kb,36,2);V("_setAllowAnchor",gb,7,2);V("_setCampNameKey",ob,41);V("_setCampContentKey",
tb,38);V("_setCampIdKey",nb,39);V("_setCampMediumKey",rb,40);V("_setCampNOKey",ub,42);V("_setCampSourceKey",qb,43);V("_setCampTermKey",sb,44);V("_setCampCIdKey",pb,37);V("_setCookiePath",P,9,0);V("_setMaxCustomVariables",yb,0,1);V("_setVisitorCookieTimeout",cb,28,1);V("_setSessionCookieTimeout",db,26,1);V("_setCampaignCookieTimeout",eb,29,1);V("_setReferrerOverride",Jb,49);V("_setSiteSpeedSampleRate",Dc,132);V("_storeGac",v,143);a("_trackPageview",U.prototype.Fa,1);a("_trackEvent",U.prototype.F,4);
a("_trackPageLoadTime",U.prototype.Ea,100);a("_trackSocial",U.prototype.Ga,104);a("_trackTrans",U.prototype.Ia,18);a("_sendXEvent",U.prototype.ib,78);a("_createEventTracker",U.prototype.ia,74);a("_getVersion",U.prototype.qa,60);a("_setDomainName",U.prototype.B,6);a("_setAllowHash",U.prototype.va,8);a("_getLinkerUrl",U.prototype.na,52);a("_link",U.prototype.link,101);a("_linkByPost",U.prototype.ua,102);a("_setTrans",U.prototype.za,20);a("_addTrans",U.prototype.$,21);a("_addItem",U.prototype.Y,19);
a("_clearTrans",U.prototype.ea,105);a("_setTransactionDelim",U.prototype.Aa,82);a("_setCustomVar",U.prototype.wa,10);a("_deleteCustomVar",U.prototype.ka,35);a("_getVisitorCustomVar",U.prototype.ra,50);a("_setXKey",U.prototype.Ca,83);a("_setXValue",U.prototype.Da,84);a("_getXKey",U.prototype.sa,76);a("_getXValue",U.prototype.ta,77);a("_clearXKey",U.prototype.fa,72);a("_clearXValue",U.prototype.ga,73);a("_createXObj",U.prototype.ja,75);a("_addIgnoredOrganic",U.prototype.W,15);a("_clearIgnoredOrganic",
U.prototype.ba,97);a("_addIgnoredRef",U.prototype.X,31);a("_clearIgnoredRef",U.prototype.ca,32);a("_addOrganic",U.prototype.Z,14);a("_clearOrganic",U.prototype.da,70);a("_cookiePathCopy",U.prototype.ha,30);a("_get",U.prototype.ma,106);a("_set",U.prototype.xa,107);a("_addEventListener",U.prototype.addEventListener,108);a("_removeEventListener",U.prototype.removeEventListener,109);a("_addDevId",U.prototype.V);a("_getPlugin",Pc,122);a("_setPageGroup",U.prototype.ya,126);a("_trackTiming",U.prototype.Ha,
124);a("_initData",U.prototype.initData,2);a("_setVar",U.prototype.Ba,22);V("_setSessionTimeout",db,27,3);V("_setCookieTimeout",eb,25,3);V("_setCookiePersistence",cb,24,1);a("_setAutoTrackOutbound",Fa,79);a("_setTrackOutboundSubdomains",Fa,81);a("_setHrefExamineLimit",Fa,80)};function Pc(a){var b=this.plugins_;if(b)return b.get(a)}
var T=function(a,b,c,d){a[b]=function(){try{return void 0!=d&&H(d),c.apply(this,arguments)}catch(e){throw Ra("exc",b,e&&e.name),e;}}},Qc=function(a,b,c,d){U.prototype[a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e.name),e;}}},V=function(a,b,c,d,e){U.prototype[a]=function(f){try{H(c),void 0==e?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(Be){throw Ra("exc",a,Be&&Be.name),Be;}}},Te=function(a,b){return{type:b,target:a,stopPropagation:function(){throw"aborted";}}};var Rc=new RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc.test(J.location.hostname)?!0:"/"!==b?!1:0!=a.indexOf("www.google.")&&0!=a.indexOf(".google.")&&0!=a.indexOf("google.")||-1<a.indexOf("google.org")?!1:!0},Tc=function(a){var b=a.get(bb),c=a.c(P,"/");Sc(b,c)&&a.stopPropagation()};var Zc=function(){var a={},b={},c=new Uc;this.g=function(a,b){c.add(a,b)};var d=new Uc;this.v=function(a,b){d.add(a,b)};var e=!1,f=!1,Be=!0;this.T=function(){e=!0};this.j=function(a){this.load();this.set(sc,a,!0);a=new Vc(this);e=!1;d.cb(this);e=!0;b={};this.store();a.Ja()};this.load=function(){e&&(e=!1,this.Ka(),Wc(this),f||(f=!0,c.cb(this),Xc(this),Wc(this)),e=!0)};this.store=function(){e&&(f?(e=!1,Xc(this),e=!0):this.load())};this.get=function(c){Ua[c]&&this.load();return void 0!==b[c]?b[c]:a[c]};
this.set=function(c,d,e){Ua[c]&&this.load();e?b[c]=d:a[c]=d;Ua[c]&&this.store()};this.Za=function(b){a[b]=this.b(b,0)+1};this.b=function(a,b){a=this.get(a);return void 0==a||""===a?b:1*a};this.c=function(a,b){a=this.get(a);return void 0==a?b:a+""};this.Ka=function(){if(Be){var b=this.c(bb,""),c=this.c(P,"/");Sc(b,c)||(a[O]=a[hb]&&""!=b?Yc(b):1,Be=!1)}}};Zc.prototype.stopPropagation=function(){throw"aborted";};
var Vc=function(a){var b=this;this.fb=0;var c=a.get(tc);this.Ua=function(){0<b.fb&&c&&(b.fb--,b.fb||c())};this.Ja=function(){!b.fb&&c&&setTimeout(c,10)};a.set(uc,b,!0)};function $c(a,b){b=b||[];for(var c=0;c<b.length;c++){var d=b[c];if(""+a==d||0==d.indexOf(a+"."))return d}return"-"}
var bd=function(a,b,c){c=c?"":a.c(O,"1");b=b.split(".");if(6!==b.length||ad(b[0],c))return!1;c=1*b[1];var d=1*b[2],e=1*b[3],f=1*b[4];b=1*b[5];if(!(0<=c&&0<d&&0<e&&0<f&&0<=b))return!1;a.set(Q,c);a.set(Vb,d);a.set(Wb,e);a.set(Zb,f);a.set($b,b);return!0},cd=function(a){var b=a.get(Q),c=a.get(Vb),d=a.get(Wb),e=a.get(Zb),f=a.b($b,1);return[a.b(O,1),void 0!=b?b:"-",c||"-",d||"-",e||"-",f].join(".")},dd=function(a){return[a.b(O,1),a.b(cc,0),a.b(R,1),a.b(dc,0)].join(".")},ed=function(a,b,c){c=c?"":a.c(O,
"1");var d=b.split(".");if(4!==d.length||ad(d[0],c))d=null;a.set(cc,d?1*d[1]:0);a.set(R,d?1*d[2]:10);a.set(dc,d?1*d[3]:a.get(ab));return null!=d||!ad(b,c)},fd=function(a,b){var c=G(a.c(Tb,"")),d=[],e=a.get(Fb);if(!b&&e){for(b=0;b<e.length;b++){var f=e[b];f&&1==f.scope&&d.push(b+"="+G(f.name)+"="+G(f.value)+"=1")}0<d.length&&(c+="|"+d.join("^"))}return c?a.b(O,1)+"."+c:null},gd=function(a,b,c){c=c?"":a.c(O,"1");b=b.split(".");if(2>b.length||ad(b[0],c))return!1;b=b.slice(1).join(".").split("|");0<b.length&&
a.set(Tb,I(b[0]));if(1>=b.length)return!0;b=b[1].split(-1==b[1].indexOf(",")?"^":",");for(c=0;c<b.length;c++){var d=b[c].split("=");if(4==d.length){var e={};e.name=I(d[1]);e.value=I(d[2]);e.scope=1;a.get(Fb)[d[0]]=e}}return!0},hd=function(a,b){return(b=Ue(a,b))?[a.b(O,1),a.b(ec,0),a.b(fc,1),a.b(gc,1),b].join("."):""},Ue=function(a){function b(b,e){F(a.get(b))||(b=a.c(b,""),b=b.split(" ").join("%20"),b=b.split("+").join("%20"),c.push(e+"="+b))}var c=[];b(ic,"utmcid");b(nc,"utmcsr");b(S,"utmgclid");
b(kc,"utmgclsrc");b(lc,"utmdclid");b(mc,"utmdsid");b(jc,"utmccn");b(oc,"utmcmd");b(pc,"utmctr");b(qc,"utmcct");return c.join("|")},id=function(a,b,c){c=c?"":a.c(O,"1");b=b.split(".");if(5>b.length||ad(b[0],c))return a.set(ec,void 0),a.set(fc,void 0),a.set(gc,void 0),a.set(ic,void 0),a.set(jc,void 0),a.set(nc,void 0),a.set(oc,void 0),a.set(pc,void 0),a.set(qc,void 0),a.set(S,void 0),a.set(kc,void 0),a.set(lc,void 0),a.set(mc,void 0),!1;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]);Ve(a,b.slice(4).join("."));
return!0},Ve=function(a,b){function c(a){return(a=b.match(a+"=(.*?)(?:\\|utm|$)"))&&2==a.length?a[1]:void 0}function d(b,c){c?(c=e?I(c):c.split("%20").join(" "),a.set(b,c)):a.set(b,void 0)}-1==b.indexOf("=")&&(b=I(b));var e="2"==c("utmcvr");d(ic,c("utmcid"));d(jc,c("utmccn"));d(nc,c("utmcsr"));d(oc,c("utmcmd"));d(pc,c("utmctr"));d(qc,c("utmcct"));d(S,c("utmgclid"));d(kc,c("utmgclsrc"));d(lc,c("utmdclid"));d(mc,c("utmdsid"))},ad=function(a,b){return b?a!=b:!/^\d+$/.test(a)};var Uc=function(){this.filters=[]};Uc.prototype.add=function(a,b){this.filters.push({name:a,s:b})};Uc.prototype.cb=function(a){try{for(var b=0;b<this.filters.length;b++)this.filters[b].s.call(W,a)}catch(c){}};function jd(a){100!=a.get(vb)&&a.get(Q)%1E4>=100*a.get(vb)&&a.stopPropagation()}function kd(a){ld(a.get(Wa))&&a.stopPropagation()}function md(a){"file:"==J.location.protocol&&a.stopPropagation()}function Ge(a){He()&&a.stopPropagation()}
function nd(a){a.get(Ib)||a.set(Ib,J.title,!0);a.get(Hb)||a.set(Hb,J.location.pathname+J.location.search,!0)}function lf(a){a.get(Wa)&&"UA-XXXXX-X"!=a.get(Wa)||a.stopPropagation()};var od=new function(){var a=[];this.set=function(b){a[b]=!0};this.encode=function(){for(var b=[],c=0;c<a.length;c++)a[c]&&(b[Math.floor(c/6)]^=1<<c%6);for(c=0;c<b.length;c++)b[c]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(b[c]||0);return b.join("")+"~"}};function H(a){od.set(a)};var W=window,J=document,ld=function(a){var b=W._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===W["ga-disable-"+a])return!0;try{var c=W.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(d){}return!1},He=function(){return W.navigator&&"preview"==W.navigator.loadPurpose},We=function(a,b){setTimeout(a,b)},pd=function(a){var b=[],c=J.cookie.split(";");a=new RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push(e[1])}return b},X=function(a,b,c,d,e,f){e=
ld(e)?!1:Sc(d,c)?!1:He()?!1:!0;e&&((b=mf(b))&&2E3<b.length&&(b=b.substring(0,2E3),H(69)),a=a+"="+b+"; path="+c+"; ",f&&(a+="expires="+(new Date((new Date).getTime()+f)).toGMTString()+"; "),d&&(a+="domain="+d+";"),J.cookie=a)},mf=function(a){if(!a)return a;var b=a.indexOf(";");-1!=b&&(a=a.substring(0,b),H(141));if(!(0<=W.navigator.userAgent.indexOf("Firefox")))return a;a=a.replace(/\n|\r/g," ");b=0;for(var c=a.length;b<c;++b){var d=a.charCodeAt(b)&255;if(10==d||13==d)a=a.substring(0,b)+"?"+a.substring(b+
1)}return a};var A,B=/^.*Version\/?(\d+)[^\d].*$/i;var qd,rd,sd=function(){if(!qd){var a={},b=W.navigator,c=W.screen;a.jb=c?c.width+"x"+c.height:"-";a.P=c?c.colorDepth+"-bit":"-";a.language=(b&&(b.language||b.browserLanguage)||"-").toLowerCase();a.javaEnabled=b&&b.javaEnabled()?1:0;a.characterSet=J.characterSet||J.charset||"-";try{var d=J.documentElement,e=J.body,f=e&&e.clientWidth&&e.clientHeight;b=[];d&&d.clientWidth&&d.clientHeight&&("CSS1Compat"===J.compatMode||!f)?b=[d.clientWidth,d.clientHeight]:f&&(b=[e.clientWidth,e.clientHeight]);var Be=
0>=b[0]||0>=b[1]?"":b.join("x");a.Wa=Be}catch(k){H(135)}qd=a}},td=function(){sd();var a=qd,b=W.navigator;a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.jb+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:"");b=a.length;for(var c=W.history.length;0<c;)a+=c--^b++;return Yc(a)},ud=function(a){sd();var b=qd;a.set(Lb,b.jb);a.set(Mb,b.P);a.set(Pb,b.language);a.set(Qb,b.characterSet);a.set(Nb,b.javaEnabled);a.set(Rb,b.Wa);if(a.get(ib)&&a.get(jb)){if(!(b=rd)){var c,d;var e="ShockwaveFlash";
if((b=(b=W.navigator)?b.plugins:void 0)&&0<b.length)for(c=0;c<b.length&&!d;c++)e=b[c],-1<e.name.indexOf("Shockwave Flash")&&(d=e.description.split("Shockwave Flash ")[1]);else{e=e+"."+e;try{c=new ActiveXObject(e+".7"),d=c.GetVariable("$version")}catch(f){}if(!d)try{c=new ActiveXObject(e+".6"),d="WIN 6,0,21,0",c.AllowScriptAccess="always",d=c.GetVariable("$version")}catch(f){}if(!d)try{c=new ActiveXObject(e),d=c.GetVariable("$version")}catch(f){}d&&(d=d.split(" ")[1].split(","),d=d[0]+"."+d[1]+" r"+
d[2])}b=d?d:"-"}rd=b;a.set(Ob,rd)}else a.set(Ob,"-")};var vd=function(a){if(Ba(a))this.s=a;else{var b=a[0],c=b.lastIndexOf(":"),d=b.lastIndexOf(".");this.h=this.i=this.l="";-1==c&&-1==d?this.h=b:-1==c&&-1!=d?(this.i=b.substring(0,d),this.h=b.substring(d+1)):-1!=c&&-1==d?(this.l=b.substring(0,c),this.h=b.substring(c+1)):c>d?(this.i=b.substring(0,d),this.l=b.substring(d+1,c),this.h=b.substring(c+1)):(this.i=b.substring(0,d),this.h=b.substring(d+1));this.Xa=a.slice(1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y.prototype,
"push",Y.prototype.push,5);T(Y.prototype,"_getPlugin",Pc,121);T(Y.prototype,"_createAsyncTracker",Y.prototype.Sa,33);T(Y.prototype,"_getAsyncTracker",Y.prototype.Ta,34);this.I=new nf;this.eb=[]};E=Y.prototype;E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return!1;b.plugins_=b.plugins_||new nf;b.plugins_.set(a,new d(b,c||{}));return!0};E.push=function(a){var b=Z.Va.apply(this,arguments);b=Z.eb.concat(b);for(Z.eb=[];0<b.length&&!Z.O(b[0])&&!(b.shift(),0<Z.eb.length););Z.eb=Z.eb.concat(b);return 0};
E.Va=function(a){for(var b=[],c=0;c<arguments.length;c++)try{var d=new vd(arguments[c]);d.J?this.O(d):b.push(d)}catch(e){}return b};
E.O=function(a){try{if(a.s)a.s.apply(W);else if(a.J)this.I.set(a.Xa[0],a.Xa[1]);else{var b="_gat"==a.i?M:"_gaq"==a.i?Z:M.u(a.i);if(a.Ma){if(!this.Na(a.Xa[0],b,a.Xa[2])){if(!a.Pa){var c=Oa(""+a.Xa[1]);var d=c.protocol,e=J.location.protocol;var f;if(f="https:"==d||d==e?!0:"http:"!=d?!1:"http:"==e)a:{var Be=Oa(J.location.href);if(!(c.query||0<=c.url.indexOf("?")||0<=c.path.indexOf("://")||c.host==Be.host&&c.port==Be.port)){var k="http:"==c.protocol?80:443,Ja=M.S;for(b=0;b<Ja.length;b++)if(c.host==Ja[b][0]&&
(c.port||k)==(Ja[b][1]||k)&&0==c.path.indexOf(Ja[b][2])){f=!0;break a}}f=!1}f&&!ld()&&(a.Pa=Ia(c.url))}return!0}}else a.l&&(b=b.plugins_.get(a.l)),b[a.h].apply(b,a.Xa)}}catch(t){}};E.Sa=function(a,b){return M.hb(a,b||"")};E.Ta=function(a){return M.u(a)};var yd=function(){function a(a,b,c,d){void 0==f[a]&&(f[a]={});void 0==f[a][b]&&(f[a][b]=[]);f[a][b][c]=d}function b(a,b,c){if(void 0!=f[a]&&void 0!=f[a][b])return f[a][b][c]}function c(a,b){if(void 0!=f[a]&&void 0!=f[a][b]){f[a][b]=void 0;b=!0;var c;for(c=0;c<Be.length;c++)if(void 0!=f[a][Be[c]]){b=!1;break}b&&(f[a]=void 0)}}function d(a){var b="",c=!1,d;for(d=0;d<Be.length;d++){var e=a[Be[d]];if(void 0!=e){c&&(b+=Be[d]);var f=e,Ja=[];for(e=0;e<f.length;e++)if(void 0!=f[e]){c="";1!=e&&void 0==f[e-
1]&&(c+=e.toString()+"!");var fa,Ke=f[e],Le="";for(fa=0;fa<Ke.length;fa++){var Me=Ke.charAt(fa);var m=k[Me];Le+=void 0!=m?m:Me}c+=Le;Ja.push(c)}b+="("+Ja.join("*")+")";c=!1}else c=!0}return b}var e=this,f=[],Be=["k","v"],k={"'":"'0",")":"'1","*":"'2","!":"'3"};e.Ra=function(a){return void 0!=f[a]};e.A=function(){for(var a="",b=0;b<f.length;b++)void 0!=f[b]&&(a+=b.toString()+d(f[b]));return a};e.Qa=function(a){if(void 0==a)return e.A();for(var b=a.A(),c=0;c<f.length;c++)void 0==f[c]||a.Ra(c)||(b+=
c.toString()+d(f[c]));return b};e.f=function(b,c,d){if(!wd(d))return!1;a(b,"k",c,d);return!0};e.o=function(b,c,d){if(!xd(d))return!1;a(b,"v",c,d.toString());return!0};e.getKey=function(a,c){return b(a,"k",c)};e.N=function(a,c){return b(a,"v",c)};e.L=function(a){c(a,"k")};e.M=function(a){c(a,"v")};T(e,"_setKey",e.f,89);T(e,"_setValue",e.o,90);T(e,"_getKey",e.getKey,87);T(e,"_getValue",e.N,88);T(e,"_clearKey",e.L,85);T(e,"_clearValue",e.M,86)};function wd(a){return"string"==typeof a}
function xd(a){return!("number"==typeof a||void 0!=Number&&a instanceof Number)||Math.round(a)!=a||isNaN(a)||Infinity==a?!1:!0};var zd=function(a){var b=W.gaGlobal;a&&!b&&(W.gaGlobal=b={});return b},Ad=function(){var a=zd(!0).hid;null==a&&(a=Ea(),zd(!0).hid=a);return a},Dd=function(a){a.set(Kb,Ad());var b=zd();if(b&&b.dh==a.get(O)){var c=b.sid;c&&(a.get(ac)?H(112):H(132),a.set(Zb,c),a.get(Sb)&&a.set(Wb,c));b=b.vid;a.get(Sb)&&b&&(b=b.split("."),a.set(Q,1*b[0]),a.set(Vb,1*b[1]))}};var Ed,Fd=function(a,b,c,d){var e=a.c(bb,""),f=a.c(P,"/");d=void 0!=d?d:a.b(cb,0);a=a.c(Wa,"");X(b,c,f,e,a,d)},Xc=function(a){var b=a.c(bb,""),c=a.c(P,"/"),d=a.c(Wa,"");X("__utma",cd(a),c,b,d,a.get(cb));X("__utmb",dd(a),c,b,d,a.get(db));X("__utmc",""+a.b(O,1),c,b,d);var e=hd(a,!0);e?X("__utmz",e,c,b,d,a.get(eb)):X("__utmz","",c,b,"",-1);(e=fd(a,!1))?X("__utmv",e,c,b,d,a.get(cb)):X("__utmv","",c,b,"",-1);if(1==a.get(v)&&(e=a.get(w))){var f=a.get(x);b=a.c(bb,"");c=a.c(P,"/");d=a.c(Wa,"");var Be=a.b(y,
0);a=Math.min(a.b(cb,7776E6),a.b(eb,7776E6),7776E6);a=Math.min(a,1E3*Be+a-(new Date).getTime());if(!f||"aw.ds"==f)if(f=["1",Be+"",q(e)].join("."),0<a&&(e="_gac_"+q(d),!(p(d)||u.test(J.location.hostname)||"/"==c&&r.test(b))&&((d=f)&&1200<d.length&&(d=d.substring(0,1200)),c=e+"="+d+"; path="+c+"; ",a&&(c+="expires="+(new Date((new Date).getTime()+a)).toGMTString()+"; "),b&&"none"!==b&&(c+="domain="+b+";"),b=J.cookie,J.cookie=c,b==J.cookie)))for(b=[],c=J.cookie.split(";"),a=new RegExp("^\\s*"+e+"=\\s*(.*?)\\s*$"),
d=0;d<c.length;d++)(e=c[d].match(a))&&b.push(e[1])}},Wc=function(a){var b=a.b(O,1);if(!bd(a,$c(b,pd("__utma"))))return a.set(Ub,!0),!1;var c=!ed(a,$c(b,pd("__utmb")));a.set(bc,c);id(a,$c(b,pd("__utmz")));gd(a,$c(b,pd("__utmv")));if(1==a.get(v)){b=a.get(w);var d=a.get(x);if(!b||d&&"aw.ds"!=d){if(J){b=[];d=J.cookie.split(";");for(var e=/^\s*_gac_(UA-\d+-\d+)=\s*(.+?)\s*$/,f=0;f<d.length;f++){var Be=d[f].match(e);Be&&b.push({Oa:Be[1],value:Be[2]})}d={};if(b&&b.length)for(e=0;e<b.length;e++)f=b[e].value.split("."),
"1"==f[0]&&3==f.length&&f[1]&&(d[b[e].Oa]||(d[b[e].Oa]=[]),d[b[e].Oa].push({timestamp:f[1],kb:f[2]}));b=d}else b={};(b=b[a.get(Wa)])&&0<b.length&&(b=b[0],a.set(y,b.timestamp),a.set(w,b.kb),a.set(x,void 0))}}Ed=!c;return!0},Gd=function(a){Ed||0<pd("__utmb").length||(X("__utmd","1",a.c(P,"/"),a.c(bb,""),a.c(Wa,""),1E4),0==pd("__utmd").length&&a.stopPropagation())};var h=0,Jd=function(a){void 0==a.get(Q)?Hd(a):a.get(Ub)&&!a.get(Mc)?Hd(a):a.get(bc)&&Id(a)},Kd=function(a){a.get(hc)&&!a.get(ac)&&(Id(a),a.set(fc,a.get($b)))},Hd=function(a){h++;1<h&&H(137);var b=a.get(ab);a.set(Sb,!0);a.set(Q,Ea()^td(a)&2147483647);a.set(Tb,"");a.set(Vb,b);a.set(Wb,b);a.set(Zb,b);a.set($b,1);a.set(ac,!0);a.set(cc,0);a.set(R,10);a.set(dc,b);a.set(Fb,[]);a.set(Ub,!1);a.set(bc,!1)},Id=function(a){h++;1<h&&H(137);a.set(Wb,a.get(Zb));a.set(Zb,a.get(ab));a.Za($b);a.set(ac,!0);a.set(cc,
0);a.set(R,10);a.set(dc,a.get(ab));a.set(bc,!1)};var Ld="daum:q eniro:search_word naver:query pchome:q images.google:q google:q yahoo:p yahoo:q msn:q bing:q aol:query aol:q lycos:q lycos:query ask:q cnn:query virgilio:qs baidu:wd baidu:word alice:qs yandex:text najdi:q seznam:q rakuten:qt biglobe:q goo.ne:MT search.smt.docomo:MT onet:qt onet:q kvasir:q terra:query rambler:query conduit:q babylon:q search-results:q avg:q comcast:q incredimail:q startsiden:q go.mail.ru:q centrum.cz:q 360.cn:q sogou:query tut.by:query globo:q ukr:q so.com:q haosou.com:q auone:q".split(" "),
Sd=function(a){if(a.get(kb)&&!a.get(Mc)){var b=!F(a.get(ic))||!F(a.get(nc))||!F(a.get(S))||!F(a.get(lc));for(var c={},d=0;d<Md.length;d++){var e=Md[d];c[e]=a.get(e)}(d=a.get(rc))?(H(149),e=new nf,Na(e,d),d=e):d=La(J.location.href,a.get(gb)).R;if("1"!=L(d.get(a.get(ub)))||!b)if(d=Xe(a,d)||Qd(a),d||b||!a.get(ac)||(Pd(a,void 0,"(direct)",void 0,void 0,void 0,"(direct)","(none)",void 0,void 0),d=!0),d&&(a.set(hc,Rd(a,c)),b="(direct)"==a.get(nc)&&"(direct)"==a.get(jc)&&"(none)"==a.get(oc),a.get(hc)||a.get(ac)&&
!b))a.set(ec,a.get(ab)),a.set(fc,a.get($b)),a.Za(gc)}},Xe=function(a,b){function c(c,d){d=d||"-";return(c=L(b.get(a.get(c))))&&"-"!=c?I(c):d}var d=L(b.get(a.get(nb)))||"-",e=L(b.get(a.get(qb)))||"-",f=L(b.get(a.get(pb)))||"-",Be=L(b.get("gclsrc"))||"-",k=L(b.get("dclid"))||"-";"-"!=f&&a.set(w,f);"-"!=Be&&a.set(x,Be);var Ja=c(ob,"(not set)"),t=c(rb,"(not set)"),Za=c(sb),Ma=c(tb);if(F(d)&&F(f)&&F(k)&&F(e))return!1;var mb=!F(f)&&!F(Be);mb=F(e)&&(!F(k)||mb);var Xb=F(Za);if(mb||Xb){var Bd=Nd(a);Bd=La(Bd,
!0);(Bd=Od(a,Bd))&&!F(Bd[1]&&!Bd[2])&&(mb&&(e=Bd[0]),Xb&&(Za=Bd[1]))}Pd(a,d,e,f,Be,k,Ja,t,Za,Ma);return!0},Qd=function(a){var b=Nd(a),c=La(b,!0);(b=!(void 0!=b&&null!=b&&""!=b&&"0"!=b&&"-"!=b&&0<=b.indexOf("://")))||(b=c&&-1<c.host.indexOf("google")&&c.R.contains("q")&&"cse"==c.path);if(b)return!1;if((b=Od(a,c))&&!b[2])return Pd(a,void 0,b[0],void 0,void 0,void 0,"(organic)","organic",b[1],void 0),!0;if(b||!a.get(ac))return!1;a:{b=a.get(Bb);for(var d=Ka(c.host),e=0;e<b.length;++e)if(-1<d.indexOf(b[e])){a=
!1;break a}Pd(a,void 0,d,void 0,void 0,void 0,"(referral)","referral",void 0,"/"+c.path);a=!0}return a},Od=function(a,b){for(var c=a.get(zb),d=0;d<c.length;++d){var e=c[d].split(":");if(-1<b.host.indexOf(e[0].toLowerCase())){var f=b.R.get(e[1]);if(f&&(f=K(f),!f&&-1<b.host.indexOf("google.")&&(f="(not provided)"),!e[3]||-1<b.url.indexOf(e[3]))){f||H(151);a:{b=f;a=a.get(Ab);b=I(b).toLowerCase();for(c=0;c<a.length;++c)if(b==a[c]){a=!0;break a}a=!1}return[e[2]||e[0],f,a]}}}return null},Pd=function(a,
b,c,d,e,f,Be,k,Ja,t){a.set(ic,b);a.set(nc,c);a.set(S,d);a.set(kc,e);a.set(lc,f);a.set(jc,Be);a.set(oc,k);a.set(pc,Ja);a.set(qc,t)},Md=[jc,ic,S,lc,nc,oc,pc,qc],Rd=function(a,b){function c(a){a=(""+a).split("+").join("%20");return a=a.split(" ").join("%20")}function d(c){var d=""+(a.get(c)||"");c=""+(b[c]||"");return 0<d.length&&d==c}if(d(S)||d(lc))return H(131),!1;for(var e=0;e<Md.length;e++){var f=Md[e],Be=b[f]||"-";f=a.get(f)||"-";if(c(Be)!=c(f))return!0}return!1},Td=new RegExp(/^https?:\/\/(www\.)?google(\.com?)?(\.[a-z]{2}t?)?\/?$/i),
jf=/^https?:\/\/(r\.)?search\.yahoo\.com?(\.jp)?\/?[^?]*$/i,rf=/^https?:\/\/(www\.)?bing\.com\/?$/i,Nd=function(a){a=Pa(a.get(Jb),a.get(P));try{if(Td.test(a))return H(136),a+"?q=";if(jf.test(a))return H(150),a+"?p=(not provided)";if(rf.test(a))return a+"?q=(not provided)"}catch(b){H(145)}return a};var Ud,Vd,Wd=function(a){Ud=a.c(S,"");Vd=a.c(kc,"")},Xd=function(a){var b=a.c(S,""),c=a.c(kc,"");b!=Ud&&(-1<c.indexOf("ds")?a.set(mc,void 0):!F(Ud)&&-1<Vd.indexOf("ds")&&a.set(mc,Ud))};var Zd=function(a){Yd(a,J.location.href)?(a.set(Mc,!0),H(12)):a.set(Mc,!1)},Yd=function(a,b){if(!a.get(fb))return!1;var c=La(b,a.get(gb));b=K(c.R.get("__utma"));var d=K(c.R.get("__utmb")),e=K(c.R.get("__utmc")),f=K(c.R.get("__utmx")),Be=K(c.R.get("__utmz")),k=K(c.R.get("__utmv"));c=K(c.R.get("__utmk"));if(Yc(""+b+d+e+f+Be+k)!=c){b=I(b);d=I(d);e=I(e);f=I(f);e=$d(b+d+e+f,Be,k,c);if(!e)return!1;Be=e[0];k=e[1]}if(!bd(a,b,!0))return!1;ed(a,d,!0);id(a,Be,!0);gd(a,k,!0);ae(a,f,!0);return!0},ce=function(a,
b,c){var d=cd(a)||"-";var e=dd(a)||"-",f=""+a.b(O,1)||"-",Be=be(a)||"-",k=hd(a,!1)||"-";a=fd(a,!1)||"-";var Ja=Yc(""+d+e+f+Be+k+a),t=[];t.push("__utma="+d);t.push("__utmb="+e);t.push("__utmc="+f);t.push("__utmx="+Be);t.push("__utmz="+k);t.push("__utmv="+a);t.push("__utmk="+Ja);d=t.join("&");if(!d)return b;e=b.indexOf("#");if(c)return 0>e?b+"#"+d:b+"&"+d;c="";0<e&&(c=b.substring(e),b=b.substring(0,e));return 0>b.indexOf("?")?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f=
0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c];var Be=b.replace(/ /g,"%20"),k=c.replace(/ /g,"%20");if(d==Yc(a+Be+k))return H(128),[Be,k];Be=Be.replace(/\+/g,"%20");k=k.replace(/\+/g,"%20");if(d==Yc(a+Be+k))return H(129),[Be,k];try{var Ja=b.match("utmctr=(.*?)(?:\\|utm|$)");if(Ja&&2==Ja.length&&(Be=b.replace(Ja[1],G(I(Ja[1]))),d==Yc(a+Be+c)))return H(139),[Be,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,Be,k,Ja){var t=ee(a,b);t||(t={},a.get(Cb).push(t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=Be;t.state_=k;t.country_=Ja;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,Be){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");a:{if(a&&a.items_){var k=a.items_;for(var Ja=0;Ja<k.length;Ja++)if(k[Ja].sku_==c){k=k[Ja];break a}}k=null}Ja=k||{};Ja.transId_=b;Ja.sku_=c;Ja.name_=d;Ja.category_=e;Ja.price_=f;Ja.quantity_=Be;k||a.items_.push(Ja);return Ja},
ee=function(a,b){a=a.get(Cb);for(var c=0;c<a.length;c++)if(a[c].id_==b)return a[c];return null};var he,ie=function(a){if(!he){var b=J.location.hash;var c=W.name,d=/^#?gaso=([^&]*)/;if(c=(b=(b=b&&b.match(d)||c&&c.match(d))?b[1]:K(pd("GASO")))&&b.match(/^(?:!([-0-9a-z.]{1,40})!)?([-.\w]{10,1200})$/i))Fd(a,"GASO",""+b,0),M._gasoDomain=a.get(bb),M._gasoCPath=a.get(P),a=c[1],Ia("http://web.archive.org/web/20191223021417/https://www.google.com/analytics/web/inpage/pub/inpage.js?"+(a?"prefix="+a+"&":"")+Ea(),"_gasojs");he=!0}};var ae=function(a,b,c){c&&(b=I(b));c=a.b(O,1);b=b.split(".");2>b.length||!/^\d+$/.test(b[0])||(b[0]=""+c,Fd(a,"__utmx",b.join("."),void 0))},be=function(a,b){a=$c(a.get(O),pd("__utmx"));"-"==a&&(a="");return b?G(a):a},Ye=function(a){try{var b=La(J.location.href,!1),c=decodeURIComponent(L(b.R.get("utm_referrer")))||"";c&&a.set(Jb,c);var d=decodeURIComponent(K(b.R.get("utm_expid")))||"";d&&(d=d.split(".")[0],a.set(Oc,""+d))}catch(e){H(146)}},l=function(a){var b=W.gaData&&W.gaData.expId;b&&a.set(Oc,
""+b)};var ke=function(a,b){var c=Math.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return!1;c=Ze()||$e();if(void 0==c)return!1;var d=c[0];if(void 0==d||Infinity==d||isNaN(d))return!1;0<d?af(c)?b(je(c)):b(je(c.slice(0,1))):Ga(W,"load",function(){ke(a,b)},!1);return!0},me=function(a,b,c,d){var e=new yd;e.f(14,90,b.substring(0,500));e.f(14,91,a.substring(0,150));e.f(14,92,""+le(c));void 0!=d&&e.f(14,93,d.substring(0,500));e.o(14,90,c);return e},af=function(a){for(var b=1;b<a.length;b++)if(isNaN(a[b])||Infinity==
a[b]||0>a[b])return!1;return!0},le=function(a){return isNaN(a)||0>a?0:5E3>a?10*Math.floor(a/10):5E4>a?100*Math.floor(a/100):41E5>a?1E3*Math.floor(a/1E3):41E5},je=function(a){for(var b=new yd,c=0;c<a.length;c++)b.f(14,c+1,""+le(a[c])),b.o(14,c+1,a[c]);return b},Ze=function(){var a=W.performance||W.webkitPerformance;if(a=a&&a.timing){var b=a.navigationStart;if(0==b)H(133);else return[a.loadEventStart-b,a.domainLookupEnd-a.domainLookupStart,a.connectEnd-a.connectStart,a.responseStart-a.requestStart,
a.responseEnd-a.responseStart,a.fetchStart-b,a.domInteractive-b,a.domContentLoadedEventStart-b]}},$e=function(){if(W.top==W){var a=W.external,b=a&&a.onloadT;a&&!a.isValidLoadTime&&(b=void 0);2147483648<b&&(b=void 0);0<b&&a.setPageReadyTime();if(void 0!=b)return[b]}};var cf=function(a){if(a.get(Sb))try{a:{var b=pd(a.get(Oe)||"_ga");if(b&&!(1>b.length)){for(var c=[],d=0;d<b.length;d++){var e=b[d].split("."),f=e.shift();if(("GA1"==f||"1"==f)&&1<e.length){var Be=e.shift().split("-");1==Be.length&&(Be[1]="1");Be[0]*=1;Be[1]*=1;var k={Ya:Be,$a:e.join(".")}}else k=void 0;k&&c.push(k)}if(1==c.length){var Ja=c[0].$a;break a}if(0!=c.length){var t=a.get(Pe)||a.get(bb);c=bf(c,(0==t.indexOf(".")?t.substr(1):t).split(".").length,0);if(1==c.length){Ja=c[0].$a;break a}var Za=
a.get(Qe)||a.get(P);(b=Za)?(1<b.length&&"/"==b.charAt(b.length-1)&&(b=b.substr(0,b.length-1)),0!=b.indexOf("/")&&(b="/"+b),Za=b):Za="/";c=bf(c,"/"==Za?1:Za.split("/").length,1);Ja=c[0].$a;break a}}Ja=void 0}if(Ja){var Ma=(""+Ja).split(".");2==Ma.length&&/[0-9.]/.test(Ma)&&(H(114),a.set(Q,Ma[0]),a.set(Vb,Ma[1]),a.set(Sb,!1))}}catch(mb){H(115)}},bf=function(a,b,c){for(var d=[],e=[],f=128,Be=0;Be<a.length;Be++){var k=a[Be];k.Ya[c]==b?d.push(k):k.Ya[c]==f?e.push(k):k.Ya[c]<f&&(e=[k],f=k.Ya[c])}return 0<
d.length?d:e};var kf=/^gtm\d+$/,hf=function(a){var b=!!a.b(Cd,1);if(b)if(H(140),"page"!=a.get(sc))a.set(Kc,"",!0);else if(b=a.c(Lc,""),b||(b=(b=a.c($a,""))&&"~0"!=b?kf.test(b)?"__utmt_"+G(a.c(Wa,"")):"__utmt_"+G(b):"__utmt"),0<pd(b).length)a.set(Kc,"",!0);else if(X(b,"1",a.c(P,"/"),a.c(bb,""),a.c(Wa,""),6E5),0<pd(b).length){a.set(Kc,Ea(),!0);a.set(Yb,1,!0);if(void 0!==W.__ga4__)b=W.__ga4__;else{if(void 0===A){var c=W.navigator.userAgent;if(c){b=c;try{b=decodeURIComponent(c)}catch(d){}if(c=!(0<=b.indexOf("Chrome"))&&
!(0<=b.indexOf("CriOS"))&&(0<=b.indexOf("Safari/")||0<=b.indexOf("Safari,")))b=B.exec(b),c=11<=(b?Number(b[1]):-1);A=c}else A=!1}b=A}b?(a.set(z,C(a),!0),a.set(Jc,"http://web.archive.org/web/20191223021417/https://ssl.google-analytics.com/j/__utm.gif",!0)):a.set(Jc,Ne()+"/r/__utm.gif?",!0)}},C=function(a){a=aa(a);return{gb:"t=dc&_r=3&"+a,google:"t=sr&slf_rd=1&_r=4&"+a,count:0}},aa=function(a){function b(a,b){c.push(a+"="+G(b))}var c=[];b("v","1");b("_v","5.7.2");b("tid",a.get(Wa));b("cid",a.get(Q)+"."+a.get(Vb));b("jid",a.get(Kc));b("aip",
"1");return c.join("&")+"&z="+Ea()};var U=function(a,b,c){function d(a){return function(b){if((b=b.get(Nc)[a])&&b.length)for(var c=Te(e,a),d=0;d<b.length;d++)b[d].call(e,c)}}var e=this;this.a=new Zc;this.get=function(a){return this.a.get(a)};this.set=function(a,b,c){this.a.set(a,b,c)};this.set(Wa,b||"UA-XXXXX-X");this.set($a,a||"");this.set(Ya,c||"");this.set(ab,Math.round((new Date).getTime()/1E3));this.set(P,"/");this.set(cb,63072E6);this.set(eb,15768E6);this.set(db,18E5);this.set(fb,!1);this.set(yb,50);this.set(gb,!1);this.set(hb,
!0);this.set(ib,!0);this.set(jb,!0);this.set(kb,!0);this.set(lb,!0);this.set(ob,"utm_campaign");this.set(nb,"utm_id");this.set(pb,"gclid");this.set(qb,"utm_source");this.set(rb,"utm_medium");this.set(sb,"utm_term");this.set(tb,"utm_content");this.set(ub,"utm_nooverride");this.set(vb,100);this.set(Dc,1);this.set(Ec,!1);this.set(wb,"/__utm.gif");this.set(xb,1);this.set(Cb,[]);this.set(Fb,[]);this.set(zb,Ld.slice(0));this.set(Ab,[]);this.set(Bb,[]);this.B("auto");this.set(Jb,J.referrer);this.set(v,!0);
this.set(y,Math.round((new Date).getTime()/1E3));Ye(this.a);this.set(Nc,{hit:[],load:[]});this.a.g("0",Zd);this.a.g("1",Wd);this.a.g("2",Jd);this.a.g("3",cf);this.a.g("4",Sd);this.a.g("5",Xd);this.a.g("6",Kd);this.a.g("7",d("load"));this.a.g("8",ie);this.a.v("A",kd);this.a.v("B",md);this.a.v("C",Ge);this.a.v("D",Jd);this.a.v("E",jd);this.a.v("F",Tc);this.a.v("G",ne);this.a.v("H",lf);this.a.v("I",Gd);this.a.v("J",nd);this.a.v("K",ud);this.a.v("L",Dd);this.a.v("M",l);this.a.v("N",hf);this.a.v("O",d("hit"));
this.a.v("P",oe);this.a.v("Q",pe);0===this.get(ab)&&H(111);this.a.T();this.H=void 0};E=U.prototype;E.m=function(){var a=this.get(Db);a||(a=new yd,this.set(Db,a));return a};E.La=function(a){for(var b in a){var c=a[b];a.hasOwnProperty(b)&&this.set(b,c,!0)}};E.K=function(a){if(this.get(Ec))return!1;var b=this,c=ke(this.a,function(c){b.set(Hb,a,!0);b.ib(c)});this.set(Ec,c);return c};
E.Fa=function(a){a&&Ca(a)?(H(13),this.set(Hb,a,!0)):"object"===typeof a&&null!==a&&this.La(a);this.H=a=this.get(Hb);this.a.j("page");this.K(a)};E.F=function(a,b,c,d,e){if(""==a||!wd(a)||""==b||!wd(b)||void 0!=c&&!wd(c)||void 0!=d&&!xd(d))return!1;this.set(wc,a,!0);this.set(xc,b,!0);this.set(yc,c,!0);this.set(zc,d,!0);this.set(vc,!!e,!0);this.a.j("event");return!0};
E.Ha=function(a,b,c,d,e){var f=this.a.b(Dc,0);1*e===e&&(f=e);if(this.a.b(Q,0)%100>=f)return!1;c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||isNaN(c)||0>c||0>f||100<f||void 0!=d&&(""==d||!wd(d)))return!1;this.ib(me(a,b,c,d));return!0};E.Ga=function(a,b,c,d){if(!a||!b)return!1;this.set(Ac,a,!0);this.set(Bc,b,!0);this.set(Cc,c||J.location.href,!0);d&&this.set(Hb,d,!0);this.a.j("social");return!0};E.Ea=function(){this.set(Dc,10);this.K(this.H)};E.Ia=function(){this.a.j("trans")};
E.ib=function(a){this.set(Eb,a,!0);this.a.j("event")};E.ia=function(a){this.initData();var b=this;return{_trackEvent:function(c,d,e){H(91);b.F(a,c,d,e)}}};E.ma=function(a){return this.get(a)};E.xa=function(a,b){if(a)if(Ca(a))this.set(a,b);else if("object"==typeof a)for(var c in a)a.hasOwnProperty(c)&&this.set(c,a[c])};E.addEventListener=function(a,b){(a=this.get(Nc)[a])&&a.push(b)};E.removeEventListener=function(a,b){a=this.get(Nc)[a];for(var c=0;a&&c<a.length;c++)if(a[c]==b){a.splice(c,1);break}};
E.qa=function(){return"5.7.2"};E.B=function(a){this.get(hb);a="auto"==a?Ka(J.domain):a&&"-"!=a&&"none"!=a?a.toLowerCase():"";this.set(bb,a)};E.va=function(a){this.set(hb,!!a)};E.na=function(a,b){return ce(this.a,a,b)};E.link=function(a,b){this.a.get(fb)&&a&&(J.location.href=ce(this.a,a,b))};E.ua=function(a,b){this.a.get(fb)&&a&&a.action&&(a.action=ce(this.a,a.action,b))};
E.za=function(){this.initData();var a=this.a,b=J.getElementById?J.getElementById("utmtrans"):J.utmform&&J.utmform.utmtrans?J.utmform.utmtrans:null;if(b&&b.value){a.set(Cb,[]);b=b.value.split("UTM:");for(var c=0;c<b.length;c++){b[c]=Da(b[c]);for(var d=b[c].split(de),e=0;e<d.length;e++)d[e]=Da(d[e]);"T"==d[0]?fe(a,d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8]):"I"==d[0]&&ge(a,d[1],d[2],d[3],d[4],d[5],d[6])}}};E.$=function(a,b,c,d,e,f,Be,k){return fe(this.a,a,b,c,d,e,f,Be,k)};
E.Y=function(a,b,c,d,e,f){return ge(this.a,a,b,c,d,e,f)};E.Aa=function(a){de=a||"|"};E.ea=function(){this.set(Cb,[])};E.wa=function(a,b,c,d){var e=this.a;if(0>=a||a>e.get(yb))a=!1;else if(!b||!c||128<b.length+c.length)a=!1;else{1!=d&&2!=d&&(d=3);var f={};f.name=b;f.value=c;f.scope=d;e.get(Fb)[a]=f;a=!0}a&&this.a.store();return a};E.ka=function(a){this.a.get(Fb)[a]=void 0;this.a.store()};E.ra=function(a){return(a=this.a.get(Fb)[a])&&1==a.scope?a.value:void 0};
E.Ca=function(a,b,c){12==a&&1==b?this.set(pf,c):this.m().f(a,b,c)};E.Da=function(a,b,c){this.m().o(a,b,c)};E.sa=function(a,b){return this.m().getKey(a,b)};E.ta=function(a,b){return this.m().N(a,b)};E.fa=function(a){this.m().L(a)};E.ga=function(a){this.m().M(a)};E.ja=function(){return new yd};E.W=function(a){a&&this.get(Ab).push(a.toLowerCase())};E.ba=function(){this.set(Ab,[])};E.X=function(a){a&&this.get(Bb).push(a.toLowerCase())};E.ca=function(){this.set(Bb,[])};
E.Z=function(a,b,c,d,e){if(a&&b){a=[a,b.toLowerCase()].join(":");if(d||e)a=[a,d,e].join(":");d=this.get(zb);d.splice(c?0:d.length,0,a)}};E.da=function(){this.set(zb,[])};E.ha=function(a){this.a.load();var b=this.get(P),c=be(this.a);this.set(P,a);this.a.store();ae(this.a,c);this.set(P,b)};E.ya=function(a,b){if(0<a&&5>=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a.match(/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b.push(a);this.set(Ic,b)}};
E.initData=function(){this.a.load()};E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a.stopPropagation();if("event"===a.get(sc)){var b=(new Date).getTime(),c=a.b(dc,0),d=a.b(Zb,0);c=Math.floor((b-(c!=d?c:1E3*c))/1E3);0<c&&(a.set(dc,b),a.set(R,Math.min(10,a.b(R,0)+c)));0>=a.b(R,0)&&a.stopPropagation()}},pe=function(a){"event"===a.get(sc)&&a.set(R,Math.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a.push(b+"="+c)};this.toString=function(){return a.join("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add("utmwv","5.7.2");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J.location.hostname;F(c)||b.add("utmhn",c,!0);a=a.get(vb);100!=a&&b.add("utmsp",a,!0)},te=function(a,b){b.add("utmht",(new Date).getTime());b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),!0);a.get(vc)&&b.add("utmni",1);
a.get(of)&&b.add("utmgtm",a.get(of),!0);var c=a.get(Ic);c&&0<c.length&&b.add("utmdid",c.join("."));ff(a,b);!1!==a.get(Xa)&&(a.get(Xa)||M.w)&&b.add("aip",1);void 0!==a.get(Kc)&&b.add("utmjid",a.c(Kc,""),!0);a.b(Yb,0)&&b.add("utmredir",a.b(Yb,0),!0);M.bb||(M.bb=a.get(Wa));(1<M.ab()||M.bb!=a.get(Wa))&&b.add("utmmt",1);b.add("utmu",od.encode())},ue=function(a,b){a=a.get(Fc)||[];for(var c=[],d=1;d<a.length;d++)a[d]&&c.push(d+":"+G(a[d].replace(/%/g,"%25").replace(/:/g,"%3A").replace(/,/g,"%2C")));c.length&&
b.add("utmpg",c.join(","))},ff=function(a,b){function c(a,b){b&&d.push(a+"="+b+";")}var d=[];c("__utma",cd(a));c("__utmz",hd(a,!1));c("__utmv",fd(a,!0));c("__utmx",be(a));b.add("utmcc",d.join("+"),!0)},ve=function(a,b){a.get(ib)&&(b.add("utmcs",a.get(Qb),!0),b.add("utmsr",a.get(Lb)),a.get(Rb)&&b.add("utmvp",a.get(Rb)),b.add("utmsc",a.get(Mb)),b.add("utmul",a.get(Pb)),b.add("utmje",a.get(Nb)),b.add("utmfl",a.get(Ob),!0))},we=function(a,b){a.get(lb)&&a.get(Ib)&&b.add("utmdt",a.get(Ib),!0);b.add("utmhid",
a.get(Kb));b.add("utmr",Pa(a.get(Jb),a.get(P)),!0);b.add("utmp",G(a.get(Hb),!0),!0)},xe=function(a,b){for(var c=a.get(Db),d=a.get(Eb),e=a.get(Fb)||[],f=0;f<e.length;f++){var Be=e[f];Be&&(c||(c=new yd),c.f(8,f,Be.name),c.f(9,f,Be.value),3!=Be.scope&&c.f(11,f,""+Be.scope))}F(a.get(wc))||F(a.get(xc),!0)||(c||(c=new yd),c.f(5,1,a.get(wc)),c.f(5,2,a.get(xc)),e=a.get(yc),void 0!=e&&c.f(5,3,e),e=a.get(zc),void 0!=e&&c.o(5,1,e));F(a.get(pf))||(c||(c=new yd),c.f(12,1,a.get(pf)));c?b.add("utme",c.Qa(d),!0):
d&&b.add("utme",d.A(),!0)},ye=function(a,b,c){var d=new qe;re(a,c);se(a,d);d.add("utmt","tran");d.add("utmtid",b.id_,!0);d.add("utmtst",b.affiliation_,!0);d.add("utmtto",b.total_,!0);d.add("utmttx",b.tax_,!0);d.add("utmtsp",b.shipping_,!0);d.add("utmtci",b.city_,!0);d.add("utmtrg",b.state_,!0);d.add("utmtco",b.country_,!0);xe(a,d);ve(a,d);we(a,d);(b=a.get(Gb))&&d.add("utmcu",b,!0);c||(ue(a,d),te(a,d));return d.toString()},ze=function(a,b,c){var d=new qe;re(a,c);se(a,d);d.add("utmt","item");d.add("utmtid",
b.transId_,!0);d.add("utmipc",b.sku_,!0);d.add("utmipn",b.name_,!0);d.add("utmiva",b.category_,!0);d.add("utmipr",b.price_,!0);d.add("utmiqt",b.quantity_,!0);xe(a,d);ve(a,d);we(a,d);(b=a.get(Gb))&&d.add("utmcu",b,!0);c||(ue(a,d),te(a,d));return d.toString()},Ae=function(a,b){var c=a.get(sc);if("page"==c)c=new qe,re(a,b),se(a,c),xe(a,c),ve(a,c),we(a,c),b||(ue(a,c),te(a,c)),a=[c.toString()];else if("event"==c)c=new qe,re(a,b),se(a,c),c.add("utmt","event"),xe(a,c),ve(a,c),we(a,c),b||(ue(a,c),te(a,c)),
a=[c.toString()];else if("var"==c)c=new qe,re(a,b),se(a,c),c.add("utmt","var"),!b&&te(a,c),a=[c.toString()];else if("trans"==c){c=[];for(var d=a.get(Cb),e=0;e<d.length;++e){c.push(ye(a,d[e],b));for(var f=d[e].items_,Be=0;Be<f.length;++Be)c.push(ze(a,f[Be],b))}a=c}else"social"==c?b?a=[]:(c=new qe,re(a,b),se(a,c),c.add("utmt","social"),c.add("utmsn",a.get(Ac),!0),c.add("utmsa",a.get(Bc),!0),c.add("utmsid",a.get(Cc),!0),xe(a,c),ve(a,c),we(a,c),ue(a,c),te(a,c),a=[c.toString()]):"feedback"==c?b?a=[]:(c=
new qe,re(a,b),se(a,c),c.add("utmt","feedback"),c.add("utmfbid",a.get(Gc),!0),c.add("utmfbpr",a.get(Hc),!0),xe(a,c),ve(a,c),we(a,c),ue(a,c),te(a,c),a=[c.toString()]):a=[];return a},oe=function(a){var b=a.get(xb),c=a.get(uc),d=c&&c.Ua,e=0,f=a.get(z);if(0==b||2==b){var Be=a.get(wb)+"?";var k=Ae(a,!0);for(var Ja=0,t=k.length;Ja<t;Ja++)Sa(k[Ja],d,Be,!0),e++}if(1==b||2==b)for(k=Ae(a),a=a.c(Jc,""),Ja=0,t=k.length;Ja<t;Ja++)try{if(f){var Za=k[Ja];b=(b=d)||Fa;df("",b,a+"?"+Za,f)}else Sa(k[Ja],d,a);e++}catch(Ma){Ma&&
Ra(Ma.name,void 0,Ma.message)}c&&(c.fb=e)};var Ne=function(){return"https:"==J.location.protocol||M.G?"http://web.archive.org/web/20191223021417/https://ssl.google-analytics.com":"http://web.archive.org/web/20191223021417/http://www.google-analytics.com"},Ce=function(a){this.name="len";this.message=a+"-8192"},De=function(a){this.name="ff2post";this.message=a+"-2036"},Sa=function(a,b,c,d){b=b||Fa;if(d||2036>=a.length)gf(a,b,c);else if(8192>=a.length){if(0<=W.navigator.userAgent.indexOf("Firefox")&&![].reduce)throw new De(a.length);df(a,b)||ef(a,b)||Ee(a,b)||b()}else throw new Ce(a.length);},gf=function(a,b,c){c=c||Ne()+"/__utm.gif?";
var d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=null;d.onerror=null;b()};d.onerror=function(){d.onload=null;d.onerror=null;b()}},ef=function(a,b){if(0!=Ne().indexOf(J.location.protocol))return!1;var c=W.XDomainRequest;if(!c)return!1;c=new c;c.open("POST",Ne()+"/p/__utm.gif");c.onerror=function(){b()};c.onload=b;c.send(a);return!0},df=function(a,b,c,d){var e=W.XMLHttpRequest;if(!e)return!1;var f=new e;if(!("withCredentials"in f))return!1;f.open("POST",c||Ne()+"/p/__utm.gif",!0);f.withCredentials=
!0;f.setRequestHeader("Content-Type","text/plain");f.onreadystatechange=function(){if(4==f.readyState){if(d)try{var a=f.responseText;if(1>a.length||"1"!=a.charAt(0))Ra("xhr","ver",a),b();else if(3<d.count++)Ra("xhr","tmr",""+d.count),b();else if(1==a.length)b();else{var c=a.charAt(1);if("d"==c){var e=d.gb;a=(a=b)||Fa;df("",a,"http://web.archive.org/web/20191223021417/https://stats.g.doubleclick.net/j/collect?"+e,d)}else if("g"==c){var t="http://web.archive.org/web/20191223021417/https://www.google.%/ads/ga-audiences?".replace("%","com");gf(d.google,b,t);var Za=a.substring(2);if(Za)if(/^[a-z.]{1,6}$/.test(Za)){var Ma=
"http://web.archive.org/web/20191223021417/https://www.google.%/ads/ga-audiences?".replace("%",Za);gf(d.google,Fa,Ma)}else Ra("tld","bcc",Za)}else Ra("xhr","brc",c),b()}}catch(mb){b()}else b();f=null}};f.send(a);return!0},Ee=function(a,b){if(!J.body)return We(function(){Ee(a,b)},100),!0;a=encodeURIComponent(a);try{var c=J.createElement('<iframe name="'+a+'"></iframe>')}catch(e){c=J.createElement("iframe"),c.name=a}c.height="0";c.width="0";c.style.display="none";c.style.visibility="hidden";var d=Ne()+"/u/post_iframe.html";Ga(W,"beforeunload",
function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)});setTimeout(b,1E3);J.body.appendChild(c);c.src=d;return!0};var qf=function(){this.G=this.w=!1;0==Ea()%1E4&&(H(142),this.G=!0);this.C={};this.D=[];this.U=0;this.S=[["www.google-analytics.com","","/plugins/"]];this._gasoCPath=this._gasoDomain=this.bb=void 0;Re();Se()};E=qf.prototype;E.oa=function(a,b){return this.hb(a,void 0,b)};E.hb=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);a=new U(b,a,c);M.C[b]=a;M.D.push(a);return a};E.u=function(a){a=a||"";return M.C[a]||M.hb(void 0,a)};E.pa=function(){return M.D.slice(0)};E.ab=function(){return M.D.length};
E.aa=function(){this.w=!0};E.la=function(){this.G=!0};var Fe=function(a){if("prerender"==J.visibilityState)return!1;a();return!0};var M=new qf;var D=W._gat;D&&Ba(D._getTracker)?M=D:W._gat=M;var Z=new Y;(function(a){if(!Fe(a)){H(123);var b=!1,c=function(){if(!b&&Fe(a)){b=!0;var d=J,e=c;d.removeEventListener?d.removeEventListener("visibilitychange",e,!1):d.detachEvent&&d.detachEvent("onvisibilitychange",e)}};Ga(J,"visibilitychange",c)}})(function(){var a=W._gaq,b=!1;if(a&&Ba(a.push)&&(b="[object Array]"==Object.prototype.toString.call(Object(a)),!b)){Z=a;return}W._gaq=Z;b&&Z.push.apply(Z,a)});function Yc(a){var b=1,c;if(a)for(b=0,c=a.length-1;0<=c;c--){var d=a.charCodeAt(c);b=(b<<6&268435455)+d+(d<<14);d=b&266338304;b=0!=d?b^d>>21:b}return b};}).call(this);
}
/*
FILE ARCHIVED ON 02:14:17 Dec 23, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 21:09:22 Jun 24, 2020.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
exclusion.robots.policy: 0.268
CDXLines.iter: 143.454 (3)
PetaboxLoader3.datanode: 177.037 (7)
PetaboxLoader3.resolve: 48.695
esindex: 0.023
exclusion.robots: 0.29
LoadShardBlock: 245.723 (6)
RedisCDXSource: 21.231
load_resource: 100.498
*/

View File

@ -0,0 +1,116 @@
@font-face{font-family:'Iconochive-Regular';src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?-ccsheb');src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?#iefix-ccsheb') format('embedded-opentype'),url('https://archive.org/includes/fonts/Iconochive-Regular.woff?-ccsheb') format('woff'),url('https://archive.org/includes/fonts/Iconochive-Regular.ttf?-ccsheb') format('truetype'),url('https://archive.org/includes/fonts/Iconochive-Regular.svg?-ccsheb#Iconochive-Regular') format('svg');font-weight:normal;font-style:normal}
[class^="iconochive-"],[class*=" iconochive-"]{font-family:'Iconochive-Regular'!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.iconochive-Uplevel:before{content:"\21b5"}
.iconochive-exit:before{content:"\1f6a3"}
.iconochive-beta:before{content:"\3b2"}
.iconochive-logo:before{content:"\1f3db"}
.iconochive-audio:before{content:"\1f568"}
.iconochive-movies:before{content:"\1f39e"}
.iconochive-software:before{content:"\1f4be"}
.iconochive-texts:before{content:"\1f56e"}
.iconochive-etree:before{content:"\1f3a4"}
.iconochive-image:before{content:"\1f5bc"}
.iconochive-web:before{content:"\1f5d4"}
.iconochive-collection:before{content:"\2211"}
.iconochive-folder:before{content:"\1f4c2"}
.iconochive-data:before{content:"\1f5c3"}
.iconochive-tv:before{content:"\1f4fa"}
.iconochive-article:before{content:"\1f5cf"}
.iconochive-question:before{content:"\2370"}
.iconochive-question-dark:before{content:"\3f"}
.iconochive-info:before{content:"\69"}
.iconochive-info-small:before{content:"\24d8"}
.iconochive-comment:before{content:"\1f5e9"}
.iconochive-comments:before{content:"\1f5ea"}
.iconochive-person:before{content:"\1f464"}
.iconochive-people:before{content:"\1f465"}
.iconochive-eye:before{content:"\1f441"}
.iconochive-rss:before{content:"\221e"}
.iconochive-time:before{content:"\1f551"}
.iconochive-quote:before{content:"\275d"}
.iconochive-disc:before{content:"\1f4bf"}
.iconochive-tv-commercial:before{content:"\1f4b0"}
.iconochive-search:before{content:"\1f50d"}
.iconochive-search-star:before{content:"\273d"}
.iconochive-tiles:before{content:"\229e"}
.iconochive-list:before{content:"\21f6"}
.iconochive-list-bulleted:before{content:"\2317"}
.iconochive-latest:before{content:"\2208"}
.iconochive-left:before{content:"\2c2"}
.iconochive-right:before{content:"\2c3"}
.iconochive-left-solid:before{content:"\25c2"}
.iconochive-right-solid:before{content:"\25b8"}
.iconochive-up-solid:before{content:"\25b4"}
.iconochive-down-solid:before{content:"\25be"}
.iconochive-dot:before{content:"\23e4"}
.iconochive-dots:before{content:"\25a6"}
.iconochive-columns:before{content:"\25af"}
.iconochive-sort:before{content:"\21d5"}
.iconochive-atoz:before{content:"\1f524"}
.iconochive-ztoa:before{content:"\1f525"}
.iconochive-upload:before{content:"\1f4e4"}
.iconochive-download:before{content:"\1f4e5"}
.iconochive-favorite:before{content:"\2605"}
.iconochive-heart:before{content:"\2665"}
.iconochive-play:before{content:"\25b6"}
.iconochive-play-framed:before{content:"\1f3ac"}
.iconochive-fullscreen:before{content:"\26f6"}
.iconochive-mute:before{content:"\1f507"}
.iconochive-unmute:before{content:"\1f50a"}
.iconochive-share:before{content:"\1f381"}
.iconochive-edit:before{content:"\270e"}
.iconochive-reedit:before{content:"\2710"}
.iconochive-gear:before{content:"\2699"}
.iconochive-remove-circle:before{content:"\274e"}
.iconochive-plus-circle:before{content:"\1f5d6"}
.iconochive-minus-circle:before{content:"\1f5d5"}
.iconochive-x:before{content:"\1f5d9"}
.iconochive-fork:before{content:"\22d4"}
.iconochive-trash:before{content:"\1f5d1"}
.iconochive-warning:before{content:"\26a0"}
.iconochive-flash:before{content:"\1f5f2"}
.iconochive-world:before{content:"\1f5fa"}
.iconochive-lock:before{content:"\1f512"}
.iconochive-unlock:before{content:"\1f513"}
.iconochive-twitter:before{content:"\1f426"}
.iconochive-facebook:before{content:"\66"}
.iconochive-googleplus:before{content:"\67"}
.iconochive-reddit:before{content:"\1f47d"}
.iconochive-tumblr:before{content:"\54"}
.iconochive-pinterest:before{content:"\1d4df"}
.iconochive-popcorn:before{content:"\1f4a5"}
.iconochive-email:before{content:"\1f4e7"}
.iconochive-embed:before{content:"\1f517"}
.iconochive-gamepad:before{content:"\1f579"}
.iconochive-Zoom_In:before{content:"\2b"}
.iconochive-Zoom_Out:before{content:"\2d"}
.iconochive-RSS:before{content:"\1f4e8"}
.iconochive-Light_Bulb:before{content:"\1f4a1"}
.iconochive-Add:before{content:"\2295"}
.iconochive-Tab_Activity:before{content:"\2318"}
.iconochive-Forward:before{content:"\23e9"}
.iconochive-Backward:before{content:"\23ea"}
.iconochive-No_Audio:before{content:"\1f508"}
.iconochive-Pause:before{content:"\23f8"}
.iconochive-No_Favorite:before{content:"\2606"}
.iconochive-Unike:before{content:"\2661"}
.iconochive-Song:before{content:"\266b"}
.iconochive-No_Flag:before{content:"\2690"}
.iconochive-Flag:before{content:"\2691"}
.iconochive-Done:before{content:"\2713"}
.iconochive-Check:before{content:"\2714"}
.iconochive-Refresh:before{content:"\27f3"}
.iconochive-Headphones:before{content:"\1f3a7"}
.iconochive-Chart:before{content:"\1f4c8"}
.iconochive-Bookmark:before{content:"\1f4d1"}
.iconochive-Documents:before{content:"\1f4da"}
.iconochive-Newspaper:before{content:"\1f4f0"}
.iconochive-Podcast:before{content:"\1f4f6"}
.iconochive-Radio:before{content:"\1f4fb"}
.iconochive-Cassette:before{content:"\1f4fc"}
.iconochive-Shuffle:before{content:"\1f500"}
.iconochive-Loop:before{content:"\1f501"}
.iconochive-Low_Audio:before{content:"\1f509"}
.iconochive-First:before{content:"\1f396"}
.iconochive-Invisible:before{content:"\1f576"}
.iconochive-Computer:before{content:"\1f5b3"}

View File

@ -0,0 +1,451 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
/**
* jQuery/Zepto Parallax Plugin
* @author Matthew Wagerfield - @mwagerfield
* @description Creates a parallax effect between an array of layers,
* driving the motion from the gyroscope output of a smartdevice.
* If no gyroscope is available, the cursor position is used.
*/
;(function($, window, document, undefined) {
var NAME = 'parallax';
var MAGIC_NUMBER = 30;
var DEFAULTS = {
calibrationThreshold: 100,
calibrationDelay: 500,
supportDelay: 500,
calibrateX: false,
calibrateY: true,
invertX: true,
invertY: true,
limitX: false,
limitY: false,
scalarX: 10.0,
scalarY: 10.0,
frictionX: 0.1,
frictionY: 0.1
};
function Plugin(element, options) {
// DOM Context
this.element = element;
// Selections
this.$context = $(element).data('api', this);
this.$layers = this.$context.find('.layer');
// Data Extraction
var data = {
calibrateX: this.$context.data('calibrate-x') || null,
calibrateY: this.$context.data('calibrate-y') || null,
invertX: this.$context.data('invert-x') || null,
invertY: this.$context.data('invert-y') || null,
limitX: parseFloat(this.$context.data('limit-x')) || null,
limitY: parseFloat(this.$context.data('limit-y')) || null,
scalarX: parseFloat(this.$context.data('scalar-x')) || null,
scalarY: parseFloat(this.$context.data('scalar-y')) || null,
frictionX: parseFloat(this.$context.data('friction-x')) || null,
frictionY: parseFloat(this.$context.data('friction-y')) || null
};
// Delete Null Data Values
for (var key in data) {
if (data[key] === null) delete data[key];
}
// Compose Settings Object
$.extend(this, DEFAULTS, options, data);
// States
this.calibrationTimer = null;
this.calibrationFlag = true;
this.enabled = false;
this.depths = [];
this.raf = null;
// Offset
this.ox = 0;
this.oy = 0;
this.ow = 0;
this.oh = 0;
// Calibration
this.cx = 0;
this.cy = 0;
// Input
this.ix = 0;
this.iy = 0;
// Motion
this.mx = 0;
this.my = 0;
// Velocity
this.vx = 0;
this.vy = 0;
// Callbacks
this.onMouseMove = this.onMouseMove.bind(this);
this.onDeviceOrientation = this.onDeviceOrientation.bind(this);
this.onOrientationTimer = this.onOrientationTimer.bind(this);
this.onCalibrationTimer = this.onCalibrationTimer.bind(this);
this.onAnimationFrame = this.onAnimationFrame.bind(this);
this.onWindowResize = this.onWindowResize.bind(this);
// Initialise
this.initialise();
}
Plugin.prototype.transformSupport = function(value) {
var element = document.createElement('div');
var propertySupport = false;
var propertyValue = null;
var featureSupport = false;
var cssProperty = null;
var jsProperty = null;
for (var i = 0, l = this.vendors.length; i < l; i++) {
if (this.vendors[i] !== null) {
cssProperty = this.vendors[i][0] + 'transform';
jsProperty = this.vendors[i][1] + 'Transform';
} else {
cssProperty = 'transform';
jsProperty = 'transform';
}
if (element.style[jsProperty] !== undefined) {
propertySupport = true;
break;
}
}
switch(value) {
case '2D':
featureSupport = propertySupport;
break;
case '3D':
if (propertySupport) {
document.body.appendChild(element);
element.style[jsProperty] = 'translate3d(1px,1px,1px)';
propertyValue = window.getComputedStyle(element).getPropertyValue(cssProperty);
featureSupport = propertyValue !== undefined && propertyValue.length > 0 && propertyValue !== "none";
document.body.removeChild(element);
}
break;
}
return featureSupport;
};
Plugin.prototype.ww = null;
Plugin.prototype.wh = null;
Plugin.prototype.hw = null;
Plugin.prototype.hh = null;
Plugin.prototype.portrait = null;
Plugin.prototype.desktop = !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|IEMobile)/);
Plugin.prototype.vendors = [null,['-webkit-','webkit'],['-moz-','Moz'],['-o-','O'],['-ms-','ms']];
Plugin.prototype.motionSupport = window.DeviceMotionEvent !== undefined;
Plugin.prototype.orientationSupport = window.DeviceOrientationEvent !== undefined;
Plugin.prototype.orientationStatus = 0;
Plugin.prototype.transform2DSupport = Plugin.prototype.transformSupport('2D');
Plugin.prototype.transform3DSupport = Plugin.prototype.transformSupport('3D');
Plugin.prototype.initialise = function() {
// Configure Styles
if (this.$context.css('position') === 'static') {
this.$context.css({
position:'relative'
});
}
this.$layers.css({
position:'absolute',
display:'block',
height:'100%',
width:'100%',
left: 0,
top: 0
});
this.$layers.first().css({
position:'relative'
});
// Cache Depths
this.$layers.each($.proxy(function(index, element) {
this.depths.push($(element).data('depth') || 0);
}, this));
// Hardware Accelerate Elements
this.accelerate(this.$context);
this.accelerate(this.$layers);
// Setup
this.updateDimensions();
this.enable();
this.queueCalibration(this.calibrationDelay);
};
Plugin.prototype.updateDimensions = function() {
// Cache Context Dimensions
this.ox = this.$context.offset().left;
this.oy = this.$context.offset().top;
this.ow = this.$context.width();
this.oh = this.$context.height();
// Cache Window Dimensions
this.ww = window.innerWidth;
this.wh = window.innerHeight;
this.hw = this.ww / 2;
this.hh = this.wh / 2;
};
Plugin.prototype.queueCalibration = function(delay) {
clearTimeout(this.calibrationTimer);
this.calibrationTimer = setTimeout(this.onCalibrationTimer, delay);
};
Plugin.prototype.enable = function() {
if (!this.enabled) {
this.enabled = true;
if (this.orientationSupport) {
this.portrait = null;
window.addEventListener('deviceorientation', this.onDeviceOrientation);
setTimeout(this.onOrientationTimer, this.supportDelay);
} else {
this.cx = 0;
this.cy = 0;
this.portrait = false;
window.addEventListener('mousemove', this.onMouseMove);
}
window.addEventListener('resize', this.onWindowResize);
this.raf = requestAnimationFrame(this.onAnimationFrame);
}
};
Plugin.prototype.disable = function() {
if (this.enabled) {
this.enabled = false;
if (this.orientationSupport) {
window.removeEventListener('deviceorientation', this.onDeviceOrientation);
} else {
window.removeEventListener('mousemove', this.onMouseMove);
}
window.removeEventListener('resize', this.onWindowResize);
cancelAnimationFrame(this.raf);
}
};
Plugin.prototype.calibrate = function(x, y) {
this.calibrateX = x === undefined ? this.calibrateX : x;
this.calibrateY = y === undefined ? this.calibrateY : y;
};
Plugin.prototype.invert = function(x, y) {
this.invertX = x === undefined ? this.invertX : x;
this.invertY = y === undefined ? this.invertY : y;
};
Plugin.prototype.friction = function(x, y) {
this.frictionX = x === undefined ? this.frictionX : x;
this.frictionY = y === undefined ? this.frictionY : y;
};
Plugin.prototype.scalar = function(x, y) {
this.scalarX = x === undefined ? this.scalarX : x;
this.scalarY = y === undefined ? this.scalarY : y;
};
Plugin.prototype.limit = function(x, y) {
this.limitX = x === undefined ? this.limitX : x;
this.limitY = y === undefined ? this.limitY : y;
};
Plugin.prototype.clamp = function(value, min, max) {
value = Math.max(value, min);
value = Math.min(value, max);
return value;
};
Plugin.prototype.css = function(element, property, value) {
var jsProperty = null;
for (var i = 0, l = this.vendors.length; i < l; i++) {
if (this.vendors[i] !== null) {
jsProperty = $.camelCase(this.vendors[i][1] + '-' + property);
} else {
jsProperty = property;
}
if (element.style[jsProperty] !== undefined) {
element.style[jsProperty] = value;
break;
}
}
};
Plugin.prototype.accelerate = function($element) {
for (var i = 0, l = $element.length; i < l; i++) {
var element = $element[i];
this.css(element, 'transform', 'translate3d(0,0,0)');
this.css(element, 'transform-style', 'preserve-3d');
this.css(element, 'backface-visibility', 'hidden');
}
};
Plugin.prototype.setPosition = function(element, x, y) {
x += '%';
y += '%';
if (this.transform3DSupport) {
this.css(element, 'transform', 'translate3d('+x+','+y+',0)');
} else if (this.transform2DSupport) {
this.css(element, 'transform', 'translate('+x+','+y+')');
} else {
element.style.left = x;
element.style.top = y;
}
};
Plugin.prototype.onOrientationTimer = function(event) {
if (this.orientationSupport && this.orientationStatus === 0) {
this.disable();
this.orientationSupport = false;
this.enable();
}
};
Plugin.prototype.onCalibrationTimer = function(event) {
this.calibrationFlag = true;
};
Plugin.prototype.onWindowResize = function(event) {
this.updateDimensions();
};
Plugin.prototype.onAnimationFrame = function() {
var dx = this.ix - this.cx;
var dy = this.iy - this.cy;
if ((Math.abs(dx) > this.calibrationThreshold) || (Math.abs(dy) > this.calibrationThreshold)) {
this.queueCalibration(0);
}
if (this.portrait) {
this.mx = (this.calibrateX ? dy : this.iy) * this.scalarX;
this.my = (this.calibrateY ? dx : this.ix) * this.scalarY;
} else {
this.mx = (this.calibrateX ? dx : this.ix) * this.scalarX;
this.my = (this.calibrateY ? dy : this.iy) * this.scalarY;
}
if (!isNaN(parseFloat(this.limitX))) {
this.mx = this.clamp(this.mx, -this.limitX, this.limitX);
}
if (!isNaN(parseFloat(this.limitY))) {
this.my = this.clamp(this.my, -this.limitY, this.limitY);
}
this.vx += (this.mx - this.vx) * this.frictionX;
this.vy += (this.my - this.vy) * this.frictionY;
for (var i = 0, l = this.$layers.length; i < l; i++) {
var depth = this.depths[i];
var layer = this.$layers[i];
var xOffset = this.vx * depth * (this.invertX ? -1 : 1);
var yOffset = this.vy * depth * (this.invertY ? -1 : 1);
this.setPosition(layer, xOffset, yOffset);
}
this.raf = requestAnimationFrame(this.onAnimationFrame);
};
Plugin.prototype.onDeviceOrientation = function(event) {
// Validate environment and event properties.
if (!this.desktop && event.beta !== null && event.gamma !== null) {
// Set orientation status.
this.orientationStatus = 1;
// Extract Rotation
var x = (event.beta || 0) / MAGIC_NUMBER; // -90 :: 90
var y = (event.gamma || 0) / MAGIC_NUMBER; // -180 :: 180
// Detect Orientation Change
var portrait = window.innerHeight > window.innerWidth;
if (this.portrait !== portrait) {
this.portrait = portrait;
this.calibrationFlag = true;
}
// Set Calibration
if (this.calibrationFlag) {
this.calibrationFlag = false;
this.cx = x;
this.cy = y;
}
// Set Input
this.ix = x;
this.iy = y;
}
};
Plugin.prototype.onMouseMove = function(event) {
// Calculate Input
this.ix = (event.pageX - this.hw) / this.hw;
this.iy = (event.pageY - this.hh) / this.hh;
};
var API = {
enable: Plugin.prototype.enable,
disable: Plugin.prototype.disable,
calibrate: Plugin.prototype.calibrate,
friction: Plugin.prototype.friction,
invert: Plugin.prototype.invert,
scalar: Plugin.prototype.scalar,
limit: Plugin.prototype.limit
};
$.fn[NAME] = function (value) {
var args = arguments;
return this.each(function () {
var $this = $(this);
var plugin = $this.data(NAME);
if (!plugin) {
plugin = new Plugin(this, value);
$this.data(NAME, plugin);
}
if (API[value]) {
plugin[value].apply(plugin, Array.prototype.slice.call(args, 1));
}
});
};
})(window.jQuery || window.Zepto, window, document);
}
/*
FILE ARCHIVED ON 05:59:03 Apr 15, 2020 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 21:09:15 Jun 24, 2020.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
captures_list: 164.164
RedisCDXSource: 8.082
CDXLines.iter: 21.466 (3)
exclusion.robots: 0.315
load_resource: 491.528
LoadShardBlock: 125.355 (3)
esindex: 0.025
PetaboxLoader3.resolve: 73.807 (2)
exclusion.robots.policy: 0.29
PetaboxLoader3.datanode: 499.602 (5)
*/

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,28 @@
/* Imports */
@import url("/web/20200415055846cs_/http://crosbymichael.com/theme/css/pygment.css");
#posts-list {
list-style: none;
}
/*
FILE ARCHIVED ON 05:58:46 Apr 15, 2020 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 21:09:15 Jun 24, 2020.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
PetaboxLoader3.resolve: 62.136 (2)
exclusion.robots.policy: 0.873
load_resource: 143.323
esindex: 0.04
exclusion.robots: 0.888
captures_list: 89.513
LoadShardBlock: 57.657 (3)
CDXLines.iter: 15.196 (3)
PetaboxLoader3.datanode: 114.435 (5)
RedisCDXSource: 10.157
*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,713 @@
<!DOCTYPE html>
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><script type="text/javascript" async="" src="Creating%20containers%20-%20Part%201_files/ga.js"></script><script src="Creating%20containers%20-%20Part%201_files/analytics.js" type="text/javascript"></script>
<script type="text/javascript">window.addEventListener('DOMContentLoaded',function(){var v=archive_analytics.values;v.service='wb';v.server_name='wwwb-app102.us.archive.org';v.server_ms=1019;archive_analytics.send_pageview({});});</script><script type="text/javascript" src="Creating%20containers%20-%20Part%201_files/playback.js" charset="utf-8"></script>
<script type="text/javascript" src="Creating%20containers%20-%20Part%201_files/wombat.js" charset="utf-8"></script>
<script type="text/javascript">
if (window._WBWombatInit) {
wbinfo = {}
wbinfo.url = "http://crosbymichael.com:80/creating-containers-part-1.html";
wbinfo.timestamp = "20191223021405";
wbinfo.request_ts = "20191223021405";
wbinfo.prefix = "http://web.archive.org/web/";
wbinfo.mod = "if_";
wbinfo.is_framed = false;
wbinfo.is_live = false;
wbinfo.coll = "web";
wbinfo.proxy_magic = "";
wbinfo.static_prefix = "/_static/";
wbinfo.enable_auto_fetch = true;
wbinfo.auto_fetch_worker_prefix = "http://web.archive.org/web/";
wbinfo.wombat_ts = "20191223021405";
wbinfo.wombat_sec = "1577067245";
wbinfo.wombat_scheme = "https";
wbinfo.wombat_host = "crosbymichael.com:80";
wbinfo.ignore_prefixes = ["/__wb/",
"/_static/",
"/web/",
"http://analytics.archive.org/",
"https://analytics.archive.org/",
"//analytics.archive.org/",
"http://archive.org/",
"https://archive.org/",
"//archive.org/",
"http://faq.web.archive.org/",
"http://web.archive.org/",
"https://web.archive.org/"
];
wbinfo.wombat_opts = {};
window._WBWombatInit(wbinfo);
}
__wm.init("http://web.archive.org/web");
</script>
<link rel="stylesheet" type="text/css" href="Creating%20containers%20-%20Part%201_files/banner-styles.css">
<link rel="stylesheet" type="text/css" href="Creating%20containers%20-%20Part%201_files/iconochive.css">
<!-- End Wayback Rewrite JS Include -->
<meta charset="utf-8">
<title>Creating containers - Part 1</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="stylesheet" href="Creating%20containers%20-%20Part%201_files/main.css" type="text/css">
<link href="Creating%20containers%20-%20Part%201_files/css.css" rel="stylesheet" type="text/css">
<link id="elemento-theme" href="Creating%20containers%20-%20Part%201_files/bootstrap.css" rel="stylesheet">
<link href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Michael Crosby ATOM Feed">
<script src="Creating%20containers%20-%20Part%201_files/jquery_002.js"></script>
<script>
$(document).ready(function() {
$('#walter').on('click', function(e) {
e.stopPropagation();
window.location = 'http://web.archive.org/web/20191223021405/http://docker.io';
});
$('#scene').parallax();
});
</script>
<style type="text/css">
body {
padding-top: 20px;
padding-bottom: 40px;
}
/* Custom container */
.container-narrow {
margin: 0 auto;
max-width: 700px;
}
.container-narrow > hr {
margin: 30px 0;
}
/* Supporting marketing content */
.marketing {
margin: 60px 0;
}
.marketing p + h4 {
margin-top: 28px;
}
#scene {
position:absolute;
top: 0;
right: 0;
}
</style>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21167181-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'http://web.archive.org/web/20191223021405/https://ssl' : 'http://web.archive.org/web/20191223021405/http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<link href="Creating%20containers%20-%20Part%201_files/bootstrap-responsive.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<script src="http://code.onion.com/fartscroll.js"></script>
<script type="text/javascript">
fartscroll(50);
</script>
<![endif]-->
<script type="text/javascript" async="" src="Creating%20containers%20-%20Part%201_files/embed.html"></script></head>
<body><!-- BEGIN WAYBACK TOOLBAR INSERT -->
<style type="text/css">
body {
margin-top:0 !important;
padding-top:0 !important;
/*min-width:800px !important;*/
}
</style>
<div id="wm-ipp-base" style="display: block; direction: ltr;" lang="en">
</div><div id="donato" style="position:relative;width:100%;">
<div id="donato-base">
<iframe id="donato-if" src="Creating%20containers%20-%20Part%201_files/donate.html" scrolling="no" style="width:100%; height:100%" frameborder="0">
</iframe>
</div>
</div><script type="text/javascript">
__wm.bt(625,27,25,2,"web","http://crosbymichael.com/creating-containers-part-1.html","20191223021405",1996,"/_static/",["/_static/css/banner-styles.css?v=HyR5oymJ","/_static/css/iconochive.css?v=qtvMKcIJ"]);
</script>
<!-- END WAYBACK TOOLBAR INSERT -->
<div class="container-narrow">
<div class="masthead">
<ul class="nav nav-pills pull-right">
<li><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/feeds/all.atom.xml" rel="alternate">atom feed</a></li>
<li><a href="http://web.archive.org/web/20191223021405/http://github.com/crosbymichael">github</a></li>
</ul>
<h3 class="muted"><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/index.html">Michael Crosby</a></h3>
</div> <ul id="scene" style="transform: translate3d(0px, 0px, 0px); transform-style: preserve-3d; backface-visibility: hidden;">
<li class="layer" data-depth="1.0" style="position: relative; display: block; height: 100%; width: 100%; left: 0px; top: 0px; transform: translate3d(-4.55115%, 2.10234%, 0px); transform-style: preserve-3d; backface-visibility: hidden;">
<img src="Creating%20containers%20-%20Part%201_files/docker-logo.png" id="walter">
</li>
</ul>
<hr>
<ul class="nav nav-pills pull-left">
<li><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/category/dev.html">dev</a></li>
<li class="active"><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/category/docker.html">docker</a></li>
<li><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/category/go.html">go</a></li>
<li><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/category/productivity.html">productivity</a></li>
<hr>
</ul>
<div class="row-fluid marketing">
<div class="span12">
<section id="content" class="body">
<article>
<header> <h1 class="entry-title"><a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/creating-containers-part-1.html" rel="bookmark" title="Permalink to Creating containers - Part 1">Creating containers - Part 1</a></h1> </header>
<div class="entry-content">
<footer class="post-info">
<abbr class="published" title="2014-11-16T00:00:00+00:00">
Sun 16 November 2014
</abbr>
<address class="vcard author">
By <a class="url fn" href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/author/Michael%20Crosby.html">Michael Crosby</a>
</address>
<p>In <a href="http://web.archive.org/web/20191223021405/http://crosbymichael.com/category/docker.html">docker</a>. </p>
<p></p></footer><!-- /.post-info --><!-- /.post-info -->
<p>This is part one of a series of blog posts detailing how docker creates containers.
We will dig deep into the various pieces that are stitched together to see what
it takes to make <code>docker run ...</code> awesome.</p>
<h2>First, what is a container?</h2>
<p>I think the various pieces of technology that goes into creating a container is fairly
commonplace. You should have seen a few cool looking charts in various presentations
about Docker where you get a quick "Docker uses namespaces, cgroups, chroot, etc."
to create containers. But why does it take all these pieces to create a contaienr?<br>
Why is it not a simple syscall and it's all done for me?
The fact is that container's don't exist, they are made up. There is no such
thing as a "linux container" in the kernel. A container is a userland concept.</p>
<h2>Namespaces</h2>
<p>In part one I'll talk about how to create Linux namespaces in the context of how they
are used within docker. In later posts we will look into how namespaces are combined
with other features like cgroups and an isolated filesystem to create something useful.</p>
<p>First off we need a high level explanation of what a namespace does and why it's useful.
Basically, a namespace is a scoped view of your underlying Linux system. There are a
few different types of namespaces implemented inside the kernel. As we dig into
each of the different namespaces below you can follow along by running
<code>docker run -it --privileged --net host crosbymichael/make-containers</code>.
This has a few preloaded files and configuration to get your started. Even though we
will be creating namespaces inside an container that docker runs for us, don't let that
trip you up. I opted for this approach as providing a container preloaded with all
the dependencies that you need to run the examples is why we are doing this in the
first place. To make things a little easier, I'm using the <code>--net host</code> flag so that
we are able to see your host's network interfaces within our demo container. This will
be useful in the network examples. We also need to provide the <code>--privilged</code> flag so that
we have the correct permissions to create new namespaces within our container.</p>
<p>If you are interested in what the Dockerfile looks like then here it is:</p>
<div class="highlight"><pre>FROM debian:jessie
RUN apt-get update <span class="o">&amp;&amp;</span> apt-get install -y <span class="se">\</span>
gcc <span class="se">\</span>
vim <span class="se">\</span>
emacs
COPY containers/ /containers/
WORKDIR /containers
CMD <span class="o">[</span><span class="s2">"bash"</span><span class="o">]</span>
</pre></div>
<p>I'll be doing the examples in C, as it's sometimes easier
to explain the lower level details better than the abstractions that Go provides.
So lets start...</p>
<h3>NET Namespace</h3>
<p>The network namespaces provides your own view of the network stack of your system. This
can include your very own <code>localhost</code>. Make sure you are in the <code>crosbymichael/make-containers</code>
and run the command <code>ip a</code> to view all the network interfaces of your host machine.</p>
<div class="highlight"><pre>&gt; ip a
root@development:/containers# ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu <span class="m">65536</span> qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu <span class="m">1500</span> qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:19:ca:f2 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe19:caf2/64 scope link
valid_lft forever preferred_lft forever
3: eth1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu <span class="m">1500</span> qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:20:84:47 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.103/24 brd 192.168.56.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe20:8447/64 scope link
valid_lft forever preferred_lft forever
4: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu <span class="m">1500</span> qdisc noqueue state DOWN group default
link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::5484:7aff:fefe:9799/64 scope link
valid_lft forever preferred_lft forever
</pre></div>
<p>Ok cool, so this is all the network interfaces currently on <strong>my</strong> host system. Yours may look
a little different but you get the idea. Now let's write some code to create a new network
namespace. For this we will write a skeleton of a small C binary that uses the <code>clone</code> syscall. We will
start by using clone to run binaries that are already installed inside our demo container.
The file <code>skeleton.c</code> should be in the working directory of the demo container.
We will use this file as the basis of all our examples. Here is the code incase you don't feel
like running the container right now.</p>
<div class="highlight"><pre><span class="cp">#define _GNU_SOURCE</span>
<span class="cp">#include &lt;stdio.h&gt;</span>
<span class="cp">#include &lt;stdlib.h&gt;</span>
<span class="cp">#include &lt;sched.h&gt;</span>
<span class="cp">#include &lt;sys/wait.h&gt;</span>
<span class="cp">#include &lt;errno.h&gt;</span>
<span class="cp">#define STACKSIZE (1024*1024)</span>
<span class="k">static</span> <span class="kt">char</span> <span class="n">child_stack</span><span class="p">[</span><span class="n">STACKSIZE</span><span class="p">];</span>
<span class="k">struct</span> <span class="n">clone_args</span> <span class="p">{</span>
<span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1">// child_exec is the func that will be executed as the result of clone</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">child_exec</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="n">stuff</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">clone_args</span> <span class="o">*</span><span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="k">struct</span> <span class="n">clone_args</span> <span class="o">*</span><span class="p">)</span><span class="n">stuff</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">execvp</span><span class="p">(</span><span class="n">args</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"failed to execvp argments %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
<span class="n">strerror</span><span class="p">(</span><span class="n">errno</span><span class="p">));</span>
<span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="c1">// we should never reach here!</span>
<span class="n">exit</span><span class="p">(</span><span class="n">EXIT_FAILURE</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">clone_args</span> <span class="n">args</span><span class="p">;</span>
<span class="n">args</span><span class="p">.</span><span class="n">argv</span> <span class="o">=</span> <span class="o">&amp;</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">clone_flags</span> <span class="o">=</span> <span class="n">SIGCHLD</span><span class="p">;</span>
<span class="c1">// the result of this call is that our child_exec will be run in another</span>
<span class="c1">// process returning it's pid</span>
<span class="kt">pid_t</span> <span class="n">pid</span> <span class="o">=</span>
<span class="n">clone</span><span class="p">(</span><span class="n">child_exec</span><span class="p">,</span> <span class="n">child_stack</span> <span class="o">+</span> <span class="n">STACKSIZE</span><span class="p">,</span> <span class="n">clone_flags</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">args</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">pid</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"clone failed WTF!!!! %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">strerror</span><span class="p">(</span><span class="n">errno</span><span class="p">));</span>
<span class="n">exit</span><span class="p">(</span><span class="n">EXIT_FAILURE</span><span class="p">);</span>
<span class="p">}</span>
<span class="c1">// lets wait on our child process here before we, the parent, exits</span>
<span class="k">if</span> <span class="p">(</span><span class="n">waitpid</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"failed to wait pid %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">pid</span><span class="p">);</span>
<span class="n">exit</span><span class="p">(</span><span class="n">EXIT_FAILURE</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">exit</span><span class="p">(</span><span class="n">EXIT_SUCCESS</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>This is a small C binary that will allow you to run processes
like <code>./a.out ip a</code>. It uses the arguments that you pass on the cli as the arguments to whatever
process you want to use. Don't worry about the specific implementation too much as it's the
changes we will be making that are the interesting aspects. Remember, this will execute the
binary and arguments of whatever program you want, this means if you want to run one of these demos
below and have it spawn a shell session so that you can poke around in your new namespace then go
ahead. It is a great way to explore and inspect these different namespaces at your own pace.
So to get started let's make a copy of this file to start working with the network namespace.</p>
<div class="highlight"><pre>&gt; cp skeleton.c network.c
</pre></div>
<p>Ok, within this file there is a very
special var called <code>clone_flags</code>. This is where most of our changes will happen throughout this
post. Namespaces are primarily controlled via the clone flags. The clone flag for the network
namespace is <code>CLONE_NEWNET</code>. We need to change the line in the file <code>int clone_flags = SIGCHLD;</code> to
<code>int clone_flags = CLONE_NEWNET | SIGCHLD;</code> so that the call to <code>clone</code> creates a new network namespace
for our process. Make this change in <code>network.c</code> then compile and run.</p>
<div class="highlight"><pre>&gt; gcc -o net network.c
&gt; ./net ip a
1: lo: &lt;LOOPBACK&gt; mtu <span class="m">65536</span> qdisc noop state DOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
</pre></div>
<p>The result of this run now looks very different from the first time we ran the <code>ip a</code>
command. We only see a <code>loopback</code> interface in the output. This is because our process
that was created only has a view of its network namespace and not of the host.
And that's it. That is how you create a new network namespace. </p>
<p>Right now this is pretty useless as you don't have any usable
interfaces. Docker uses this new network namespace to setup a <code>veth</code>
interface so that your container has it's own ip address
allocated on a bridge, usually <code>docker0</code>.
We won't go down the path of how to setup interfaces in namespaces at this time. We can save
that for another post.</p>
<p>So now that we know how a network namespace is created lets look at the mount namespace.</p>
<h3>MNT Namespace</h3>
<p>The mount namespace gives you a scoped view of the mounts on your system. It's often
confused with jailing a process inside a <code>chroot</code> or similar. This is not true!
The mount namespaces does not equal a filesystem jail. So the next time you hear someone
say that a container uses the mount namespace to "jail" the process inside it's own root
filesystem you can call bullshit because they don't know what they are talking about. Do it, it's fun :)</p>
<p>Let's start by making a copy of <code>skeleton.c</code> again for our mount related changes.
We can do a quick build
and run to see what our current mount points looks like with the <code>mount</code> command.</p>
<div class="highlight"><pre>&gt; cp skeleton.c mount.c
&gt; gcc -o mount mount.c
&gt; ./mount mount
proc on /proc <span class="nb">type </span>proc <span class="o">(</span>rw,nosuid,nodev,noexec,relatime<span class="o">)</span>
tmpfs on /dev <span class="nb">type </span>tmpfs <span class="o">(</span>rw,nosuid,mode<span class="o">=</span>755<span class="o">)</span>
shm on /dev/shm <span class="nb">type </span>tmpfs <span class="o">(</span>rw,nosuid,nodev,noexec,relatime,size<span class="o">=</span>65536k<span class="o">)</span>
mqueue on /dev/mqueue <span class="nb">type </span>mqueue <span class="o">(</span>rw,nosuid,nodev,noexec,relatime<span class="o">)</span>
devpts on /dev/pts <span class="nb">type </span>devpts <span class="o">(</span>rw,nosuid,noexec,relatime,gid<span class="o">=</span>5,mode<span class="o">=</span>620,ptmxmode<span class="o">=</span>666<span class="o">)</span>
sysfs on /sys <span class="nb">type </span>sysfs <span class="o">(</span>rw,nosuid,nodev,noexec,relatime<span class="o">)</span>
/dev/disk/by-uuid/d3aa2880-c290-4586-9da6-2f526e381f41 on /etc/resolv.conf <span class="nb">type </span>ext4 <span class="o">(</span>rw,relatime,errors<span class="o">=</span>remount-ro,data<span class="o">=</span>ordered<span class="o">)</span>
/dev/disk/by-uuid/d3aa2880-c290-4586-9da6-2f526e381f41 on /etc/hostname <span class="nb">type </span>ext4 <span class="o">(</span>rw,relatime,errors<span class="o">=</span>remount-ro,data<span class="o">=</span>ordered<span class="o">)</span>
/dev/disk/by-uuid/d3aa2880-c290-4586-9da6-2f526e381f41 on /etc/hosts <span class="nb">type </span>ext4 <span class="o">(</span>rw,relatime,errors<span class="o">=</span>remount-ro,data<span class="o">=</span>ordered<span class="o">)</span>
devpts on /dev/console <span class="nb">type </span>devpts <span class="o">(</span>rw,nosuid,noexec,relatime,gid<span class="o">=</span>5,mode<span class="o">=</span>620,ptmxmode<span class="o">=</span>000<span class="o">)</span>
</pre></div>
<p>This is what the mount points look like from within my demo container, yours may look different.
In order to create a new mount namespace we use the flag <code>CLONE_NEWNS</code>. You may notice something may look
weird here. Why is this flag not <code>CLONE_NEWMOUNT</code> or <code>CLONE_NEWMNT</code>? This is because the mount
namespace was the first Linux namespace introduced and the name was just an undersight.
If you write code you will understand that as you start building a feature or an application,
you don't often have a full picture of the end result. Anyway, let's add <code>CLONE_NEWNS</code> to our
<code>clone_flags</code> variable. It should look something like <code>int clone_flags = CLONE_NEWNS | SIGCHLD;</code>.</p>
<p>Lets go ahead and build <code>mount.c</code> again and run the same command.</p>
<div class="highlight"><pre>&gt; cp skeleton.c mount.c
&gt; gcc -o mount mount.c
&gt; ./mount mount
</pre></div>
<p>Nothing changed. Whaaat??? This is because the process that we run inside the new mount
namespace still has a view on <code>/proc</code> of the underlying system. The result is that the
new process sort of <em>inherits</em> a view on the underlying mounts.
There are a few ways that we can prevent this, like using <code>pivot_root</code>, but we will leave
that for an additional post on filesystem jails and how <code>chroot</code> / <code>pivot_root</code> interact with
the container's mount namespace.</p>
<p>However, one way that we can try out our new mount namespace is to, well, mount something.
Let's create a new <code>tmpfs</code> mount in <code>/mytmp</code> for this demo. We will do this mount
in C and continue to run our same <code>mount</code> command as the args to our mount binary. In order to do a mount
<strong>inside</strong> of our mount namespace we need to add the code to the <code>child_exec</code> function,
before the call to <code>execvp</code>. The code within the <code>child_exec</code> function is run inside the newly
created process, i.e., inside our new namespace. The code in <code>child_exec</code> should look like this:</p>
<div class="highlight"><pre><span class="c1">// child_exec is the func that will be executed as the result of clone</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">child_exec</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="n">stuff</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">clone_args</span> <span class="o">*</span><span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="k">struct</span> <span class="n">clone_args</span> <span class="o">*</span><span class="p">)</span><span class="n">stuff</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mount</span><span class="p">(</span><span class="s">"none"</span><span class="p">,</span> <span class="s">"/mytmp"</span><span class="p">,</span> <span class="s">"tmpfs"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"failed to mount tmpfs %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
<span class="n">strerror</span><span class="p">(</span><span class="n">errno</span><span class="p">));</span>
<span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">execvp</span><span class="p">(</span><span class="n">args</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"failed to execvp argments %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
<span class="n">strerror</span><span class="p">(</span><span class="n">errno</span><span class="p">));</span>
<span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="c1">// we should never reach here!</span>
<span class="n">exit</span><span class="p">(</span><span class="n">EXIT_FAILURE</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>We need to first create a directory <code>/mytmp</code> before we compile and run with the changes above.</p>
<div class="highlight"><pre>&gt; mkdir /mytmp
&gt; gcc -o mount mount.c
&gt; ./mount mount
<span class="c"># cutting out the common output...</span>
none on /mytmp <span class="nb">type </span>tmpfs <span class="o">(</span>rw,relatime<span class="o">)</span>
</pre></div>
<p>I cut out the common output above from the first time I ran <code>mount</code>.<br>
The result is that you should see a new mount point for our <code>tmpfs</code> mount.
Nice! Go ahead and run <code>mount</code> in the current shell just for comparison.<br>
Notice how the <code>tmpfs</code> mount is not displayed? That is because we created the mount inside
our own mount namespace, not in the parent's namespace. </p>
<p>Remember how I said that the mount namepaces does not equal a filesystem jail? Go ahead and run our
<code>./mount</code> binary with the <code>ls</code> command. Everything is there. Now you have proof!</p>
<h3>UTS Namespace</h3>
<p>The next namespace is the UTS namespace that is responsible for system identification. This includes the
<code>hostname</code> and <code>domainname</code>. It allows a container to have it's own hostname independently
from the host system along with other containers. Let's start by making a copy of <code>skeleton.c</code> and running
the <code>hostname</code> command with it.</p>
<div class="highlight"><pre>&gt; cp skeleton.c uts.c
&gt; gcc -o uts uts.c
&gt; ./uts hostname
development
</pre></div>
<p>This should display your system's hostname (<code>development</code> in my case). Like earlier, let's add
the clone flag for the UTS namespace to the <code>clone_flags</code> variable. The flag should be <code>CLONE_NEWUTS</code>.
If you compile and run then you should see the exact same output. This is totally fine.
The values in the UTS namespace are inherited from the <em>parent</em>.
However, within this new namespace, we can change the hostname without it affecting the <em>parent</em> or other
container's that have a separate UTS namespace.</p>
<p>Let's modify the hostname in the <code>child_exec</code> function. To do that, you will need to add
the <code>#include &lt;unistd.h&gt;</code> header to gain access to the <code>sethostname</code> function, as well as
the <code>#include &lt;string.h&gt;</code> header to use <code>strlen</code> needed by <code>sethostname</code>.
The new body of the <code>child_exec</code> function should look like the following:</p>
<div class="highlight"><pre><span class="c1">// child_exec is the func that will be executed as the result of clone</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">child_exec</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="n">stuff</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">clone_args</span> <span class="o">*</span><span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="k">struct</span> <span class="n">clone_args</span> <span class="o">*</span><span class="p">)</span><span class="n">stuff</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span> <span class="n">new_hostname</span> <span class="o">=</span> <span class="s">"myhostname"</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">sethostname</span><span class="p">(</span><span class="n">new_hostname</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">new_hostname</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"failed to execvp argments %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
<span class="n">strerror</span><span class="p">(</span><span class="n">errno</span><span class="p">));</span>
<span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">execvp</span><span class="p">(</span><span class="n">args</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"failed to execvp argments %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
<span class="n">strerror</span><span class="p">(</span><span class="n">errno</span><span class="p">));</span>
<span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="c1">// we should never reach here!</span>
<span class="n">exit</span><span class="p">(</span><span class="n">EXIT_FAILURE</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Ensure that <code>clone_flags</code> within your main look like <code>int clone_flags = CLONE_NEWUTS | SIGCHLD;</code> then
compile and run the binary with the same args. You should now see the value that we set returned
from the <code>hostname</code> command.
To verify that this change did not affect our current shell go ahead and run <code>hostname</code> and make
sure that you have your original value back.</p>
<div class="highlight"><pre>&gt; gcc -o uts uts.c
&gt; ./uts hostname
myhostname
&gt; hostname
development
</pre></div>
<p>Awesome! We are doing good.</p>
<h3>IPC Namespace</h3>
<p>The IPC namespace is used for isolating interprocess communication, things like SysV message queues.
Let's make a copy of <code>skeleton.c</code> for this namespace.</p>
<div class="highlight"><pre>&gt; cp skeleton.c ipc.c
</pre></div>
<p>The way we are going to test the IPC namespace is by creating a message queue on the host, and
ensuring that we cannot see it when we spawn a new process inside it's own IPC namespace.
Let's first create a message queue in our current shell then compile and run our copy of the
skeleton code to view the queue.</p>
<div class="highlight"><pre>&gt; ipcmk -Q
Message queue id: 65536
&gt; gcc -o ipc ipc.c
&gt; ./ipc ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes message
0xfe7f09d1 <span class="m">65536</span> root <span class="m">644</span> <span class="m">0</span> 0
</pre></div>
<p>Without a new IPC namespace you can see the same message queue that was created.
Now let's add the <code>CLONE_NEWIPC</code> flag to our <code>clone_flags</code> var to create a new IPC namespace for
our process.
The <code>clone_flags</code> var should look like <code>int clone_flags = CLONE_NEWIPC | SIGCHLD;</code>.
Recompile and run the same command again:</p>
<div class="highlight"><pre>&gt; gcc -o ipc ipc.c
&gt; ./ipc ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes message
</pre></div>
<p>Done! The child process is now in a new IPC namespace and has completely separate view
and access to message queues.</p>
<h3>PID Namespace</h3>
<p>This one is fun. The PID namespace is a way to carve up the PIDs that one process can view and
interact with. When we create a new PID namespace the first process will get to be the loved PID 1.
If this process exits the kernel kills everyone else within the namespace.
Let's start by making a copy of <code>skeleton.c</code> for our changes.</p>
<div class="highlight"><pre>&gt; cp skeleton.c pid.c
</pre></div>
<p>To create a new PID namespace, we will have to set the <code>clone_flags</code> with <code>CLONE_NEWPID</code>.
The variable should look like <code>int clone_flags = CLONE_NEWPID | SIGCHLD;</code>. Let's test
by running <code>ps aux</code> in our shell and then compile and run our <code>pid.c</code> binary with
the same arguments.</p>
<div class="highlight"><pre>&gt; ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root <span class="m">1</span> 0.0 0.1 <span class="m">20332</span> <span class="m">3388</span> ? Ss 21:50 0:00 bash
root <span class="m">147</span> 0.0 0.1 <span class="m">17492</span> <span class="m">2088</span> ? R+ 22:49 0:00 ps aux
&gt; gcc -o pid pid.c
&gt; ./pid ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root <span class="m">1</span> 0.0 0.1 <span class="m">20332</span> <span class="m">3388</span> ? Ss 21:50 0:00 bash
root <span class="m">153</span> 0.0 0.0 <span class="m">5092</span> <span class="m">728</span> ? S+ 22:50 0:00 ./pid ps aux
root <span class="m">154</span> 0.0 0.1 <span class="m">17492</span> <span class="m">2064</span> ? R+ 22:50 0:00 ps aux
</pre></div>
<p>WTF??? We expected <code>ps aux</code> to be PID 1 or atleast not see any other pids from the parent.
Why is that? <strong>proc</strong>. The process that we spawned still has a view of <code>/proc</code> from the parent, i.e.
<code>/proc</code> mounted on the host system. So how do we fix this? How to we ensure that our new process
can only view pids within it's namespace? We can start by remounting <code>/proc</code>.<br>
Because we will be dealing with mounts, we can take the opportunity to take what we learned from the
MNT namespace and combine it with our PID namespace so that we don't mess with the <code>/proc</code> of our
host system.</p>
<p>We can start by including the clone flag for the mount namespace along side the
clone flag for pid. It should look something like
<code>int clone_flags = CLONE_NEWPID | CLONE_NEWNS | SIGCHLD;</code>. We need to edit the
<code>child_exec</code> function and remount proc. This will be a simple <code>unmount</code> and <code>mount</code> syscall
for the proc filesystem. Because we are creating a new mount namespace we know that this will
not mess up our host system. The result should look like this:</p>
<div class="highlight"><pre>// child_exec is the func that will be executed as the result of clone
static int child_exec<span class="o">(</span>void *stuff<span class="o">)</span>
<span class="o">{</span>
struct clone_args *args <span class="o">=</span> <span class="o">(</span>struct clone_args *<span class="o">)</span>stuff<span class="p">;</span>
<span class="k">if</span> <span class="o">(</span>umount<span class="o">(</span><span class="s2">"/proc"</span>, 0<span class="o">)</span> !<span class="o">=</span> 0<span class="o">)</span> <span class="o">{</span>
fprintf<span class="o">(</span>stderr, <span class="s2">"failed unmount /proc %s\n"</span>,
strerror<span class="o">(</span>errno<span class="o">))</span><span class="p">;</span>
<span class="nb">exit</span><span class="o">(</span>-1<span class="o">)</span><span class="p">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span>mount<span class="o">(</span><span class="s2">"proc"</span>, <span class="s2">"/proc"</span>, <span class="s2">"proc"</span>, 0, <span class="s2">""</span><span class="o">)</span> !<span class="o">=</span> 0<span class="o">)</span> <span class="o">{</span>
fprintf<span class="o">(</span>stderr, <span class="s2">"failed mount /proc %s\n"</span>,
strerror<span class="o">(</span>errno<span class="o">))</span><span class="p">;</span>
<span class="nb">exit</span><span class="o">(</span>-1<span class="o">)</span><span class="p">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span>execvp<span class="o">(</span>args-&gt;argv<span class="o">[</span>0<span class="o">]</span>, args-&gt;argv<span class="o">)</span> !<span class="o">=</span> 0<span class="o">)</span> <span class="o">{</span>
fprintf<span class="o">(</span>stderr, <span class="s2">"failed to execvp argments %s\n"</span>,
strerror<span class="o">(</span>errno<span class="o">))</span><span class="p">;</span>
<span class="nb">exit</span><span class="o">(</span>-1<span class="o">)</span><span class="p">;</span>
<span class="o">}</span>
// we should never reach here!
<span class="nb">exit</span><span class="o">(</span>EXIT_FAILURE<span class="o">)</span><span class="p">;</span>
<span class="o">}</span>
</pre></div>
<p>Build and run this again to see what happens.</p>
<div class="highlight"><pre>&gt; gcc -o pid pid.c
&gt; ./pid ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root <span class="m">1</span> 0.0 0.0 <span class="m">9076</span> <span class="m">784</span> ? R+ 23:05 0:00 ps aux
</pre></div>
<p>Perfect! Our new PID namespace is now fully operational with the help of the mount namespace!</p>
<h3>USER Namespace</h3>
<p>The last namespace is the user namespace. This namespace is the new kid on the block and allows you to have
users within this namespace that are not equal users outside of the namespace. This is accomplished
via GID and UID mappings. </p>
<p>This one has a simple demo application without specifying a mapping, even though it's a totally
useless demo. If we add the flag <code>CLONE_NEWUSER</code> to our <code>clone_flags</code> then run something like <code>id</code> or <code>ls -la</code> you will notice that we get <code>nobody</code> within the user namespace. This is because the current user is undefined
right now.</p>
<div class="highlight"><pre>&gt; cp skeleton.c user.c
<span class="c"># add the clone flag</span>
&gt; gcc -o user user.c
&gt; ./user ls -la
total 84
drwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">4096</span> Nov <span class="m">16</span> 23:10 .
drwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">4096</span> Nov <span class="m">16</span> 22:17 ..
-rwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">8336</span> Nov <span class="m">16</span> 22:15 mount
-rw-r--r-- <span class="m">1</span> nobody nogroup <span class="m">1577</span> Nov <span class="m">16</span> 22:15 mount.c
-rwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">8064</span> Nov <span class="m">16</span> 21:52 net
-rw-r--r-- <span class="m">1</span> nobody nogroup <span class="m">1441</span> Nov <span class="m">16</span> 21:52 network.c
-rwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">8544</span> Nov <span class="m">16</span> 23:05 pid
-rw-r--r-- <span class="m">1</span> nobody nogroup <span class="m">1772</span> Nov <span class="m">16</span> 23:02 pid.c
-rw-r--r-- <span class="m">1</span> nobody nogroup <span class="m">1426</span> Nov <span class="m">16</span> 21:59 skeleton.c
-rwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">8056</span> Nov <span class="m">16</span> 23:10 user
-rw-r--r-- <span class="m">1</span> nobody nogroup <span class="m">1442</span> Nov <span class="m">16</span> 23:10 user.c
-rwxr-xr-x <span class="m">1</span> nobody nogroup <span class="m">8408</span> Nov <span class="m">16</span> 22:40 uts
-rw-r--r-- <span class="m">1</span> nobody nogroup <span class="m">1694</span> Nov <span class="m">16</span> 22:36 uts.c
</pre></div>
<p>This is a very simple example of the user namespace but you can go much deeper with it. We will
save this for another post but the idea and hopes for the user namespace is that this will allow
us to run as "root" within the container but not as "root" on the host system. Don't forget you
can always change <code>ls -la</code> to <code>bash</code> and have a shell inside the namespace to poke around and learn
more.</p>
<h3>In the end...</h3>
<p>So to recap we went over the mount, network, user, PID, UTS, and IPC Linux namespaces.
The majority of the code that we changed was not much, just adding a flag most of the time.<br>
The "hard work" is mostly managing the interactions between the various kernel subsystems
in order to meet our requirements. Like most
of the descriptions before this, namespaces are just one of the tools that we use to make a
container. I hope the PID example is a glimpse of how we use multiple namespaces together
in order isolate and begin the creation of a container.</p>
<p>In future posts we will go into detail on how we jail the container's processes inside a root filesystem,
aka a docker image, as well as using cgroups and Linux capabilities. By the end we should be able
to pull all these things together to create a container.</p>
<p>Also a thanks to tibor and everyone that helps review my brain dump of a first draft ;)</p>
</div><!-- /.entry-content -->
</article>
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'crosbymichael'; // required: replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://web.archive.org/web/20191223021405/http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://web.archive.org/web/20191223021405/http://disqus.com/" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</section>
</div>
</div>
<hr>
<div class="footer">
<p>© 2014 Michael Crosby</p>
</div>
</div>
<script src="Creating%20containers%20-%20Part%201_files/bootstrap.js"></script>
<script src="Creating%20containers%20-%20Part%201_files/jquery.js"></script>
</body></html>
<!--
FILE ARCHIVED ON 02:14:05 Dec 23, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 21:09:12 Jun 24, 2020.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
-->
<!--
playback timings (ms):
PetaboxLoader3.resolve: 260.51 (4)
exclusion.robots.policy: 0.342
load_resource: 714.677
esindex: 0.007
exclusion.robots: 0.353
captures_list: 233.362
LoadShardBlock: 205.234 (3)
CDXLines.iter: 14.759 (3)
PetaboxLoader3.datanode: 585.283 (4)
RedisCDXSource: 7.714
-->

View File

@ -22,3 +22,18 @@ classique run
run interactively run interactively
`./bin/out.ex -i /bin/sh` `./bin/out.ex -i /bin/sh`
## links
this code and repository is inspired by these link :
[http://tejom.github.io/c/linux/containers/docker/2016/10/04/containers-from-scratch-pt1.html](http://tejom.github.io/c/linux/containers/docker/2016/10/04/containers-from-scratch-pt1.html)
[https://lk4d4.darth.io/posts/unpriv3/](https://lk4d4.darth.io/posts/unpriv3/)
[https://blog.lizzie.io/linux-containers-in-500-loc.html](https://blog.lizzie.io/linux-containers-in-500-loc.html)
[Creating containers - Part 1.html](./doc/Creating_containers-Part_1.html)
original link [http://crosbymichael.com/creating-containers-part-1.html](http://crosbymichael.com/creating-containers-part-1.html)