From ffea5c28328e0441173f278c05b28cc59660d08b Mon Sep 17 00:00:00 2001 From: Philipp Hagemeister <phihag@phihag.de> Date: Sun, 6 Jan 2013 23:38:56 +0100 Subject: [PATCH] Delete test_coverage --- test_coverage/coverage_html.js | 376 - test_coverage/index.html | 144 - test_coverage/jquery-1.4.3.min.js | 166 - test_coverage/jquery.hotkeys.js | 99 - test_coverage/jquery.isonscreen.js | 53 - test_coverage/jquery.tablesorter.min.js | 2 - test_coverage/keybd_closed.png | Bin 264 -> 0 bytes test_coverage/keybd_open.png | Bin 267 -> 0 bytes test_coverage/status.dat | 271 - test_coverage/style.css | 300 - test_coverage/youtube_dl.html | 1066 --- test_coverage/youtube_dl_FileDownloader.html | 1542 ---- test_coverage/youtube_dl_InfoExtractors.html | 7646 ------------------ test_coverage/youtube_dl_PostProcessor.html | 490 -- test_coverage/youtube_dl_update.html | 402 - test_coverage/youtube_dl_utils.html | 1160 --- test_coverage/youtube_dl_version.html | 86 - 17 files changed, 13803 deletions(-) delete mode 100644 test_coverage/coverage_html.js delete mode 100644 test_coverage/index.html delete mode 100644 test_coverage/jquery-1.4.3.min.js delete mode 100644 test_coverage/jquery.hotkeys.js delete mode 100644 test_coverage/jquery.isonscreen.js delete mode 100644 test_coverage/jquery.tablesorter.min.js delete mode 100644 test_coverage/keybd_closed.png delete mode 100644 test_coverage/keybd_open.png delete mode 100644 test_coverage/status.dat delete mode 100644 test_coverage/style.css delete mode 100644 test_coverage/youtube_dl.html delete mode 100644 test_coverage/youtube_dl_FileDownloader.html delete mode 100644 test_coverage/youtube_dl_InfoExtractors.html delete mode 100644 test_coverage/youtube_dl_PostProcessor.html delete mode 100644 test_coverage/youtube_dl_update.html delete mode 100644 test_coverage/youtube_dl_utils.html delete mode 100644 test_coverage/youtube_dl_version.html diff --git a/test_coverage/coverage_html.js b/test_coverage/coverage_html.js deleted file mode 100644 index b24006d25..000000000 --- a/test_coverage/coverage_html.js +++ /dev/null @@ -1,376 +0,0 @@ -// Coverage.py HTML report browser code. -/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */ -/*global coverage: true, document, window, $ */ - -coverage = {}; - -// Find all the elements with shortkey_* class, and use them to assign a shotrtcut key. -coverage.assign_shortkeys = function () { - $("*[class*='shortkey_']").each(function (i, e) { - $.each($(e).attr("class").split(" "), function (i, c) { - if (/^shortkey_/.test(c)) { - $(document).bind('keydown', c.substr(9), function () { - $(e).click(); - }); - } - }); - }); -}; - -// Create the events for the help panel. -coverage.wire_up_help_panel = function () { - $("#keyboard_icon").click(function () { - // Show the help panel, and position it so the keyboard icon in the - // panel is in the same place as the keyboard icon in the header. - $(".help_panel").show(); - var koff = $("#keyboard_icon").offset(); - var poff = $("#panel_icon").position(); - $(".help_panel").offset({ - top: koff.top-poff.top, - left: koff.left-poff.left - }); - }); - $("#panel_icon").click(function () { - $(".help_panel").hide(); - }); -}; - -// Loaded on index.html -coverage.index_ready = function ($) { - // Look for a cookie containing previous sort settings: - var sort_list = []; - var cookie_name = "COVERAGE_INDEX_SORT"; - var i; - - // This almost makes it worth installing the jQuery cookie plugin: - if (document.cookie.indexOf(cookie_name) > -1) { - var cookies = document.cookie.split(";"); - for (i = 0; i < cookies.length; i++) { - var parts = cookies[i].split("="); - - if ($.trim(parts[0]) === cookie_name && parts[1]) { - sort_list = eval("[[" + parts[1] + "]]"); - break; - } - } - } - - // Create a new widget which exists only to save and restore - // the sort order: - $.tablesorter.addWidget({ - id: "persistentSort", - - // Format is called by the widget before displaying: - format: function (table) { - if (table.config.sortList.length === 0 && sort_list.length > 0) { - // This table hasn't been sorted before - we'll use - // our stored settings: - $(table).trigger('sorton', [sort_list]); - } - else { - // This is not the first load - something has - // already defined sorting so we'll just update - // our stored value to match: - sort_list = table.config.sortList; - } - } - }); - - // Configure our tablesorter to handle the variable number of - // columns produced depending on report options: - var headers = []; - var col_count = $("table.index > thead > tr > th").length; - - headers[0] = { sorter: 'text' }; - for (i = 1; i < col_count-1; i++) { - headers[i] = { sorter: 'digit' }; - } - headers[col_count-1] = { sorter: 'percent' }; - - // Enable the table sorter: - $("table.index").tablesorter({ - widgets: ['persistentSort'], - headers: headers - }); - - coverage.assign_shortkeys(); - coverage.wire_up_help_panel(); - - // Watch for page unload events so we can save the final sort settings: - $(window).unload(function () { - document.cookie = cookie_name + "=" + sort_list.toString() + "; path=/"; - }); -}; - -// -- pyfile stuff -- - -coverage.pyfile_ready = function ($) { - // If we're directed to a particular line number, highlight the line. - var frag = location.hash; - if (frag.length > 2 && frag[1] === 'n') { - $(frag).addClass('highlight'); - coverage.set_sel(parseInt(frag.substr(2), 10)); - } - else { - coverage.set_sel(0); - } - - $(document) - .bind('keydown', 'j', coverage.to_next_chunk_nicely) - .bind('keydown', 'k', coverage.to_prev_chunk_nicely) - .bind('keydown', '0', coverage.to_top) - .bind('keydown', '1', coverage.to_first_chunk) - ; - - $(".button_toggle_run").click(function (evt) {coverage.toggle_lines(evt.target, "run");}); - $(".button_toggle_exc").click(function (evt) {coverage.toggle_lines(evt.target, "exc");}); - $(".button_toggle_mis").click(function (evt) {coverage.toggle_lines(evt.target, "mis");}); - $(".button_toggle_par").click(function (evt) {coverage.toggle_lines(evt.target, "par");}); - - coverage.assign_shortkeys(); - coverage.wire_up_help_panel(); -}; - -coverage.toggle_lines = function (btn, cls) { - btn = $(btn); - var hide = "hide_"+cls; - if (btn.hasClass(hide)) { - $("#source ."+cls).removeClass(hide); - btn.removeClass(hide); - } - else { - $("#source ."+cls).addClass(hide); - btn.addClass(hide); - } -}; - -// Return the nth line div. -coverage.line_elt = function (n) { - return $("#t" + n); -}; - -// Return the nth line number div. -coverage.num_elt = function (n) { - return $("#n" + n); -}; - -// Return the container of all the code. -coverage.code_container = function () { - return $(".linenos"); -}; - -// Set the selection. b and e are line numbers. -coverage.set_sel = function (b, e) { - // The first line selected. - coverage.sel_begin = b; - // The next line not selected. - coverage.sel_end = (e === undefined) ? b+1 : e; -}; - -coverage.to_top = function () { - coverage.set_sel(0, 1); - coverage.scroll_window(0); -}; - -coverage.to_first_chunk = function () { - coverage.set_sel(0, 1); - coverage.to_next_chunk(); -}; - -coverage.is_transparent = function (color) { - // Different browsers return different colors for "none". - return color === "transparent" || color === "rgba(0, 0, 0, 0)"; -}; - -coverage.to_next_chunk = function () { - var c = coverage; - - // Find the start of the next colored chunk. - var probe = c.sel_end; - while (true) { - var probe_line = c.line_elt(probe); - if (probe_line.length === 0) { - return; - } - var color = probe_line.css("background-color"); - if (!c.is_transparent(color)) { - break; - } - probe++; - } - - // There's a next chunk, `probe` points to it. - var begin = probe; - - // Find the end of this chunk. - var next_color = color; - while (next_color === color) { - probe++; - probe_line = c.line_elt(probe); - next_color = probe_line.css("background-color"); - } - c.set_sel(begin, probe); - c.show_selection(); -}; - -coverage.to_prev_chunk = function () { - var c = coverage; - - // Find the end of the prev colored chunk. - var probe = c.sel_begin-1; - var probe_line = c.line_elt(probe); - if (probe_line.length === 0) { - return; - } - var color = probe_line.css("background-color"); - while (probe > 0 && c.is_transparent(color)) { - probe--; - probe_line = c.line_elt(probe); - if (probe_line.length === 0) { - return; - } - color = probe_line.css("background-color"); - } - - // There's a prev chunk, `probe` points to its last line. - var end = probe+1; - - // Find the beginning of this chunk. - var prev_color = color; - while (prev_color === color) { - probe--; - probe_line = c.line_elt(probe); - prev_color = probe_line.css("background-color"); - } - c.set_sel(probe+1, end); - c.show_selection(); -}; - -// Return the line number of the line nearest pixel position pos -coverage.line_at_pos = function (pos) { - var l1 = coverage.line_elt(1), - l2 = coverage.line_elt(2), - result; - if (l1.length && l2.length) { - var l1_top = l1.offset().top, - line_height = l2.offset().top - l1_top, - nlines = (pos - l1_top) / line_height; - if (nlines < 1) { - result = 1; - } - else { - result = Math.ceil(nlines); - } - } - else { - result = 1; - } - return result; -}; - -// Returns 0, 1, or 2: how many of the two ends of the selection are on -// the screen right now? -coverage.selection_ends_on_screen = function () { - if (coverage.sel_begin === 0) { - return 0; - } - - var top = coverage.line_elt(coverage.sel_begin); - var next = coverage.line_elt(coverage.sel_end-1); - - return ( - (top.isOnScreen() ? 1 : 0) + - (next.isOnScreen() ? 1 : 0) - ); -}; - -coverage.to_next_chunk_nicely = function () { - coverage.finish_scrolling(); - if (coverage.selection_ends_on_screen() === 0) { - // The selection is entirely off the screen: select the top line on - // the screen. - var win = $(window); - coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop())); - } - coverage.to_next_chunk(); -}; - -coverage.to_prev_chunk_nicely = function () { - coverage.finish_scrolling(); - if (coverage.selection_ends_on_screen() === 0) { - var win = $(window); - coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop() + win.height())); - } - coverage.to_prev_chunk(); -}; - -// Select line number lineno, or if it is in a colored chunk, select the -// entire chunk -coverage.select_line_or_chunk = function (lineno) { - var c = coverage; - var probe_line = c.line_elt(lineno); - if (probe_line.length === 0) { - return; - } - var the_color = probe_line.css("background-color"); - if (!c.is_transparent(the_color)) { - // The line is in a highlighted chunk. - // Search backward for the first line. - var probe = lineno; - var color = the_color; - while (probe > 0 && color === the_color) { - probe--; - probe_line = c.line_elt(probe); - if (probe_line.length === 0) { - break; - } - color = probe_line.css("background-color"); - } - var begin = probe + 1; - - // Search forward for the last line. - probe = lineno; - color = the_color; - while (color === the_color) { - probe++; - probe_line = c.line_elt(probe); - color = probe_line.css("background-color"); - } - - coverage.set_sel(begin, probe); - } - else { - coverage.set_sel(lineno); - } -}; - -coverage.show_selection = function () { - var c = coverage; - - // Highlight the lines in the chunk - c.code_container().find(".highlight").removeClass("highlight"); - for (var probe = c.sel_begin; probe > 0 && probe < c.sel_end; probe++) { - c.num_elt(probe).addClass("highlight"); - } - - c.scroll_to_selection(); -}; - -coverage.scroll_to_selection = function () { - // Scroll the page if the chunk isn't fully visible. - if (coverage.selection_ends_on_screen() < 2) { - // Need to move the page. The html,body trick makes it scroll in all - // browsers, got it from http://stackoverflow.com/questions/3042651 - var top = coverage.line_elt(coverage.sel_begin); - var top_pos = parseInt(top.offset().top, 10); - coverage.scroll_window(top_pos - 30); - } -}; - -coverage.scroll_window = function (to_pos) { - $("html,body").animate({scrollTop: to_pos}, 200); -}; - -coverage.finish_scrolling = function () { - $("html,body").stop(true, true); -}; diff --git a/test_coverage/index.html b/test_coverage/index.html deleted file mode 100644 index 2aecc71a3..000000000 --- a/test_coverage/index.html +++ /dev/null @@ -1,144 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - <title>Coverage report</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.tablesorter.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.index_ready); - </script> -</head> -<body id='indexfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage report: - <span class='pc_cov'>44%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> - <p class='legend'>Hot-keys on this page</p> - <div> - <p class='keyhelp'> - <span class='key'>n</span> - <span class='key'>s</span> - <span class='key'>m</span> - <span class='key'>x</span> - - <span class='key'>c</span> change column sorting - </p> - </div> -</div> - -<div id='index'> - <table class='index'> - <thead> - - <tr class='tablehead' title='Click to sort'> - <th class='name left headerSortDown shortkey_n'>Module</th> - <th class='shortkey_s'>statements</th> - <th class='shortkey_m'>missing</th> - <th class='shortkey_x'>excluded</th> - - <th class='right shortkey_c'>coverage</th> - </tr> - </thead> - - <tfoot> - <tr class='total'> - <td class='name left'>Total</td> - <td>3632</td> - <td>2026</td> - <td>0</td> - - <td class='right'>44%</td> - </tr> - </tfoot> - <tbody> - - <tr class='file'> - <td class='name left'><a href='youtube_dl.html'>youtube_dl</a></td> - <td>274</td> - <td>251</td> - <td>0</td> - - <td class='right'>8%</td> - </tr> - - <tr class='file'> - <td class='name left'><a href='youtube_dl_FileDownloader.html'>youtube_dl.FileDownloader</a></td> - <td>479</td> - <td>208</td> - <td>0</td> - - <td class='right'>57%</td> - </tr> - - <tr class='file'> - <td class='name left'><a href='youtube_dl_InfoExtractors.html'>youtube_dl.InfoExtractors</a></td> - <td>2275</td> - <td>1273</td> - <td>0</td> - - <td class='right'>44%</td> - </tr> - - <tr class='file'> - <td class='name left'><a href='youtube_dl_PostProcessor.html'>youtube_dl.PostProcessor</a></td> - <td>133</td> - <td>114</td> - <td>0</td> - - <td class='right'>14%</td> - </tr> - - <tr class='file'> - <td class='name left'><a href='youtube_dl_update.html'>youtube_dl.update</a></td> - <td>130</td> - <td>122</td> - <td>0</td> - - <td class='right'>6%</td> - </tr> - - <tr class='file'> - <td class='name left'><a href='youtube_dl_utils.html'>youtube_dl.utils</a></td> - <td>340</td> - <td>58</td> - <td>0</td> - - <td class='right'>83%</td> - </tr> - - <tr class='file'> - <td class='name left'><a href='youtube_dl_version.html'>youtube_dl.version</a></td> - <td>1</td> - <td>0</td> - <td>0</td> - - <td class='right'>100%</td> - </tr> - - </tbody> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/jquery-1.4.3.min.js b/test_coverage/jquery-1.4.3.min.js deleted file mode 100644 index c941a5f7a..000000000 --- a/test_coverage/jquery-1.4.3.min.js +++ /dev/null @@ -1,166 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.3 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Oct 14 23:10:06 2010 -0400 - */ -(function(E,A){function U(){return false}function ba(){return true}function ja(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ga(a){var b,d,e=[],f=[],h,k,l,n,s,v,B,D;k=c.data(this,this.nodeType?"events":"__events__");if(typeof k==="function")k=k.events;if(!(a.liveFired===this||!k||!k.live||a.button&&a.type==="click")){if(a.namespace)D=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var H=k.live.slice(0);for(n=0;n<H.length;n++){k=H[n];k.origType.replace(X, -"")===a.type?f.push(k.selector):H.splice(n--,1)}f=c(a.target).closest(f,a.currentTarget);s=0;for(v=f.length;s<v;s++){B=f[s];for(n=0;n<H.length;n++){k=H[n];if(B.selector===k.selector&&(!D||D.test(k.namespace))){l=B.elem;h=null;if(k.preType==="mouseenter"||k.preType==="mouseleave"){a.type=k.preType;h=c(a.relatedTarget).closest(k.selector)[0]}if(!h||h!==l)e.push({elem:l,handleObj:k,level:B.level})}}}s=0;for(v=e.length;s<v;s++){f=e[s];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data; -a.handleObj=f.handleObj;D=f.handleObj.origHandler.apply(f.elem,arguments);if(D===false||a.isPropagationStopped()){d=f.level;if(D===false)b=false}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(Ha,"`").replace(Ia,"&")}function ka(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Ja.test(b))return c.filter(b, -e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function la(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var k in e[h])c.event.add(this,h,e[h][k],e[h][k].data)}}})}function Ka(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)} -function ma(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?La:Ma,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function ca(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Na.test(a)?e(a,h):ca(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)? -e(a,""):c.each(b,function(f,h){ca(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(na.concat.apply([],na.slice(0,b)),function(){d[this]=a});return d}function oa(a){if(!da[a]){var b=c("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";da[a]=d}return da[a]}function ea(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var u=E.document,c=function(){function a(){if(!b.isReady){try{u.documentElement.doScroll("left")}catch(i){setTimeout(a, -1);return}b.ready()}}var b=function(i,r){return new b.fn.init(i,r)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,k=/\S/,l=/^\s+/,n=/\s+$/,s=/\W/,v=/\d/,B=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,D=/^[\],:{}\s]*$/,H=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,G=/(?:^|:|,)(?:\s*\[)+/g,M=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,j=/(msie) ([\w.]+)/,o=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false, -q=[],t,x=Object.prototype.toString,C=Object.prototype.hasOwnProperty,P=Array.prototype.push,N=Array.prototype.slice,R=String.prototype.trim,Q=Array.prototype.indexOf,L={};b.fn=b.prototype={init:function(i,r){var y,z,F;if(!i)return this;if(i.nodeType){this.context=this[0]=i;this.length=1;return this}if(i==="body"&&!r&&u.body){this.context=u;this[0]=u.body;this.selector="body";this.length=1;return this}if(typeof i==="string")if((y=h.exec(i))&&(y[1]||!r))if(y[1]){F=r?r.ownerDocument||r:u;if(z=B.exec(i))if(b.isPlainObject(r)){i= -[u.createElement(z[1])];b.fn.attr.call(i,r,true)}else i=[F.createElement(z[1])];else{z=b.buildFragment([y[1]],[F]);i=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,i)}else{if((z=u.getElementById(y[2]))&&z.parentNode){if(z.id!==y[2])return f.find(i);this.length=1;this[0]=z}this.context=u;this.selector=i;return this}else if(!r&&!s.test(i)){this.selector=i;this.context=u;i=u.getElementsByTagName(i);return b.merge(this,i)}else return!r||r.jquery?(r||f).find(i):b(r).find(i); -else if(b.isFunction(i))return f.ready(i);if(i.selector!==A){this.selector=i.selector;this.context=i.context}return b.makeArray(i,this)},selector:"",jquery:"1.4.3",length:0,size:function(){return this.length},toArray:function(){return N.call(this,0)},get:function(i){return i==null?this.toArray():i<0?this.slice(i)[0]:this[i]},pushStack:function(i,r,y){var z=b();b.isArray(i)?P.apply(z,i):b.merge(z,i);z.prevObject=this;z.context=this.context;if(r==="find")z.selector=this.selector+(this.selector?" ": -"")+y;else if(r)z.selector=this.selector+"."+r+"("+y+")";return z},each:function(i,r){return b.each(this,i,r)},ready:function(i){b.bindReady();if(b.isReady)i.call(u,b);else q&&q.push(i);return this},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(i){return this.pushStack(b.map(this,function(r,y){return i.call(r, -y,r)}))},end:function(){return this.prevObject||b(null)},push:P,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var i=arguments[0]||{},r=1,y=arguments.length,z=false,F,I,K,J,fa;if(typeof i==="boolean"){z=i;i=arguments[1]||{};r=2}if(typeof i!=="object"&&!b.isFunction(i))i={};if(y===r){i=this;--r}for(;r<y;r++)if((F=arguments[r])!=null)for(I in F){K=i[I];J=F[I];if(i!==J)if(z&&J&&(b.isPlainObject(J)||(fa=b.isArray(J)))){if(fa){fa=false;clone=K&&b.isArray(K)?K:[]}else clone= -K&&b.isPlainObject(K)?K:{};i[I]=b.extend(z,clone,J)}else if(J!==A)i[I]=J}return i};b.extend({noConflict:function(i){E.$=e;if(i)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(i){i===true&&b.readyWait--;if(!b.readyWait||i!==true&&!b.isReady){if(!u.body)return setTimeout(b.ready,1);b.isReady=true;if(!(i!==true&&--b.readyWait>0)){if(q){for(var r=0;i=q[r++];)i.call(u,b);q=null}b.fn.triggerHandler&&b(u).triggerHandler("ready")}}},bindReady:function(){if(!p){p=true;if(u.readyState==="complete")return setTimeout(b.ready, -1);if(u.addEventListener){u.addEventListener("DOMContentLoaded",t,false);E.addEventListener("load",b.ready,false)}else if(u.attachEvent){u.attachEvent("onreadystatechange",t);E.attachEvent("onload",b.ready);var i=false;try{i=E.frameElement==null}catch(r){}u.documentElement.doScroll&&i&&a()}}},isFunction:function(i){return b.type(i)==="function"},isArray:Array.isArray||function(i){return b.type(i)==="array"},isWindow:function(i){return i&&typeof i==="object"&&"setInterval"in i},isNaN:function(i){return i== -null||!v.test(i)||isNaN(i)},type:function(i){return i==null?String(i):L[x.call(i)]||"object"},isPlainObject:function(i){if(!i||b.type(i)!=="object"||i.nodeType||b.isWindow(i))return false;if(i.constructor&&!C.call(i,"constructor")&&!C.call(i.constructor.prototype,"isPrototypeOf"))return false;for(var r in i);return r===A||C.call(i,r)},isEmptyObject:function(i){for(var r in i)return false;return true},error:function(i){throw i;},parseJSON:function(i){if(typeof i!=="string"||!i)return null;i=b.trim(i); -if(D.test(i.replace(H,"@").replace(w,"]").replace(G,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(i):(new Function("return "+i))();else b.error("Invalid JSON: "+i)},noop:function(){},globalEval:function(i){if(i&&k.test(i)){var r=u.getElementsByTagName("head")[0]||u.documentElement,y=u.createElement("script");y.type="text/javascript";if(b.support.scriptEval)y.appendChild(u.createTextNode(i));else y.text=i;r.insertBefore(y,r.firstChild);r.removeChild(y)}},nodeName:function(i,r){return i.nodeName&&i.nodeName.toUpperCase()=== -r.toUpperCase()},each:function(i,r,y){var z,F=0,I=i.length,K=I===A||b.isFunction(i);if(y)if(K)for(z in i){if(r.apply(i[z],y)===false)break}else for(;F<I;){if(r.apply(i[F++],y)===false)break}else if(K)for(z in i){if(r.call(i[z],z,i[z])===false)break}else for(y=i[0];F<I&&r.call(y,F,y)!==false;y=i[++F]);return i},trim:R?function(i){return i==null?"":R.call(i)}:function(i){return i==null?"":i.toString().replace(l,"").replace(n,"")},makeArray:function(i,r){var y=r||[];if(i!=null){var z=b.type(i);i.length== -null||z==="string"||z==="function"||z==="regexp"||b.isWindow(i)?P.call(y,i):b.merge(y,i)}return y},inArray:function(i,r){if(r.indexOf)return r.indexOf(i);for(var y=0,z=r.length;y<z;y++)if(r[y]===i)return y;return-1},merge:function(i,r){var y=i.length,z=0;if(typeof r.length==="number")for(var F=r.length;z<F;z++)i[y++]=r[z];else for(;r[z]!==A;)i[y++]=r[z++];i.length=y;return i},grep:function(i,r,y){var z=[],F;y=!!y;for(var I=0,K=i.length;I<K;I++){F=!!r(i[I],I);y!==F&&z.push(i[I])}return z},map:function(i, -r,y){for(var z=[],F,I=0,K=i.length;I<K;I++){F=r(i[I],I,y);if(F!=null)z[z.length]=F}return z.concat.apply([],z)},guid:1,proxy:function(i,r,y){if(arguments.length===2)if(typeof r==="string"){y=i;i=y[r];r=A}else if(r&&!b.isFunction(r)){y=r;r=A}if(!r&&i)r=function(){return i.apply(y||this,arguments)};if(i)r.guid=i.guid=i.guid||r.guid||b.guid++;return r},access:function(i,r,y,z,F,I){var K=i.length;if(typeof r==="object"){for(var J in r)b.access(i,J,r[J],z,F,y);return i}if(y!==A){z=!I&&z&&b.isFunction(y); -for(J=0;J<K;J++)F(i[J],r,z?y.call(i[J],J,F(i[J],r)):y,I);return i}return K?F(i[0],r):A},now:function(){return(new Date).getTime()},uaMatch:function(i){i=i.toLowerCase();i=M.exec(i)||g.exec(i)||j.exec(i)||i.indexOf("compatible")<0&&o.exec(i)||[];return{browser:i[1]||"",version:i[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(i,r){L["[object "+r+"]"]=r.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version= -m.version}if(b.browser.webkit)b.browser.safari=true;if(Q)b.inArray=function(i,r){return Q.call(r,i)};if(!/\s/.test("\u00a0")){l=/^[\s\xA0]+/;n=/[\s\xA0]+$/}f=b(u);if(u.addEventListener)t=function(){u.removeEventListener("DOMContentLoaded",t,false);b.ready()};else if(u.attachEvent)t=function(){if(u.readyState==="complete"){u.detachEvent("onreadystatechange",t);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=u.documentElement,b=u.createElement("script"),d=u.createElement("div"), -e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],k=u.createElement("select"),l=k.appendChild(u.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")), -hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:l.selected,optDisabled:false,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};k.disabled=true;c.support.optDisabled=!l.disabled;b.type="text/javascript";try{b.appendChild(u.createTextNode("window."+e+"=1;"))}catch(n){}a.insertBefore(b, -a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function s(){c.support.noCloneEvent=false;d.detachEvent("onclick",s)});d.cloneNode(true).fireEvent("onclick")}d=u.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=u.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var s=u.createElement("div"); -s.style.width=s.style.paddingLeft="1px";u.body.appendChild(s);c.boxModel=c.support.boxModel=s.offsetWidth===2;if("zoom"in s.style){s.style.display="inline";s.style.zoom=1;c.support.inlineBlockNeedsLayout=s.offsetWidth===2;s.style.display="";s.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=s.offsetWidth!==2}s.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var v=s.getElementsByTagName("td");c.support.reliableHiddenOffsets=v[0].offsetHeight=== -0;v[0].style.display="";v[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&v[0].offsetHeight===0;s.innerHTML="";u.body.removeChild(s).style.display="none"});a=function(s){var v=u.createElement("div");s="on"+s;var B=s in v;if(!B){v.setAttribute(s,"return;");B=typeof v[s]==="function"}return B};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength", -cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var pa={},Oa=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?pa:a;var e=a.nodeType,f=e?a[c.expando]:null,h=c.cache;if(!(e&&!f&&typeof b==="string"&&d===A)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]= -c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==A)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?pa:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);else if(d)delete f[e];else for(var k in a)delete a[k]}},acceptData:function(a){if(a.nodeName){var b= -c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){if(typeof a==="undefined")return this.length?c.data(this[0]):null;else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===A){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e===A&&this.length){e=c.data(this[0],a);if(e===A&&this[0].nodeType===1){e=this[0].getAttribute("data-"+a);if(typeof e=== -"string")try{e=e==="true"?true:e==="false"?false:e==="null"?null:!c.isNaN(e)?parseFloat(e):Oa.test(e)?c.parseJSON(e):e}catch(f){}else e=A}}return e===A&&d[1]?this.data(d[0]):e}else return this.each(function(){var h=c(this),k=[d[0],b];h.triggerHandler("setData"+d[1]+"!",k);c.data(this,a,b);h.triggerHandler("changeData"+d[1]+"!",k)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=c.data(a,b);if(!d)return e|| -[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===A)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this, -a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var qa=/[\n\t]/g,ga=/\s+/,Pa=/\r/g,Qa=/^(?:href|src|style)$/,Ra=/^(?:button|input)$/i,Sa=/^(?:button|input|object|select|textarea)$/i,Ta=/^a(?:rea)?$/i,ra=/^(?:radio|checkbox)$/i;c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this, -a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(s){var v=c(this);v.addClass(a.call(this,s,v.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1)if(f.className){for(var h=" "+f.className+" ",k=f.className,l=0,n=b.length;l<n;l++)if(h.indexOf(" "+b[l]+" ")<0)k+=" "+b[l];f.className=c.trim(k)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(n){var s= -c(this);s.removeClass(a.call(this,n,s.attr("class")))});if(a&&typeof a==="string"||a===A)for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(qa," "),k=0,l=b.length;k<l;k++)h=h.replace(" "+b[k]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this, -f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,k=c(this),l=b,n=a.split(ga);f=n[h++];){l=e?l:!k.hasClass(f);k[l?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(qa," ").indexOf(a)>-1)return true;return false}, -val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var k=f[h];if(k.selected&&(c.support.optDisabled?!k.disabled:k.getAttribute("disabled")===null)&&(!k.parentNode.disabled||!c.nodeName(k.parentNode,"optgroup"))){a=c(k).val();if(b)return a;d.push(a)}}return d}if(ra.test(b.type)&& -!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Pa,"")}return A}var l=c.isFunction(a);return this.each(function(n){var s=c(this),v=a;if(this.nodeType===1){if(l)v=a.call(this,n,s.val());if(v==null)v="";else if(typeof v==="number")v+="";else if(c.isArray(v))v=c.map(v,function(D){return D==null?"":D+""});if(c.isArray(v)&&ra.test(this.type))this.checked=c.inArray(s.val(),v)>=0;else if(c.nodeName(this,"select")){var B=c.makeArray(v);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),B)>=0});if(!B.length)this.selectedIndex=-1}else this.value=v}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return A;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==A;b=e&&c.props[b]||b;if(a.nodeType===1){var h=Qa.test(b);if((b in a||a[b]!==A)&&e&&!h){if(f){b==="type"&&Ra.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Sa.test(a.nodeName)||Ta.test(a.nodeName)&&a.href?0:A;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return A;a=!c.support.hrefNormalized&&e&& -h?a.getAttribute(b,2):a.getAttribute(b);return a===null?A:a}}});var X=/\.(.*)$/,ha=/^(?:textarea|input|select)$/i,Ha=/\./g,Ia=/ /g,Ua=/[^\w\s.|`]/g,Va=function(a){return a.replace(Ua,"\\$&")},sa={focusin:0,focusout:0};c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var k=a.nodeType?"events":"__events__",l=h[k],n=h.handle;if(typeof l=== -"function"){n=l.handle;l=l.events}else if(!l){a.nodeType||(h[k]=h=function(){});h.events=l={}}if(!n)h.handle=n=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(n.elem,arguments):A};n.elem=a;b=b.split(" ");for(var s=0,v;k=b[s++];){h=f?c.extend({},f):{handler:d,data:e};if(k.indexOf(".")>-1){v=k.split(".");k=v.shift();h.namespace=v.slice(0).sort().join(".")}else{v=[];h.namespace=""}h.type=k;if(!h.guid)h.guid=d.guid;var B=l[k],D=c.event.special[k]||{};if(!B){B=l[k]=[]; -if(!D.setup||D.setup.call(a,e,v,n)===false)if(a.addEventListener)a.addEventListener(k,n,false);else a.attachEvent&&a.attachEvent("on"+k,n)}if(D.add){D.add.call(a,h);if(!h.handler.guid)h.handler.guid=d.guid}B.push(h);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,k=0,l,n,s,v,B,D,H=a.nodeType?"events":"__events__",w=c.data(a),G=w&&w[H];if(w&&G){if(typeof G==="function"){w=G;G=G.events}if(b&&b.type){d=b.handler;b=b.type}if(!b|| -typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in G)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[k++];){v=f;l=f.indexOf(".")<0;n=[];if(!l){n=f.split(".");f=n.shift();s=RegExp("(^|\\.)"+c.map(n.slice(0).sort(),Va).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(B=G[f])if(d){v=c.event.special[f]||{};for(h=e||0;h<B.length;h++){D=B[h];if(d.guid===D.guid){if(l||s.test(D.namespace)){e==null&&B.splice(h--,1);v.remove&&v.remove.call(a,D)}if(e!=null)break}}if(B.length===0||e!=null&&B.length===1){if(!v.teardown|| -v.teardown.call(a,n)===false)c.removeEvent(a,f,w.handle);delete G[f]}}else for(h=0;h<B.length;h++){D=B[h];if(l||s.test(D.namespace)){c.event.remove(a,v,D.handler,h);B.splice(h--,1)}}}if(c.isEmptyObject(G)){if(b=w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,H);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type= -f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return A;a.result=A;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)=== -false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){e=a.target;var k,l=f.replace(X,""),n=c.nodeName(e,"a")&&l==="click",s=c.event.special[l]||{};if((!s._default||s._default.call(d,a)===false)&&!n&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[l]){if(k=e["on"+l])e["on"+l]=null;c.event.triggered=true;e[l]()}}catch(v){}if(k)e["on"+l]=k;c.event.triggered=false}}},handle:function(a){var b,d,e; -d=[];var f,h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var k=d.length;f<k;f++){var l=d[f];if(b||e.test(l.namespace)){a.handler=l.handler;a.data= -l.data;a.handleObj=l;l=l.handler.apply(this,h);if(l!==A){a.result=l;if(l===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), -fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||u;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=u.documentElement;d=u.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop|| -d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==A)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ga,guid:a.handler.guid}))},remove:function(a){c.event.remove(this, -Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=u.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp= -c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ba;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ba;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U}; -var ta=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},ua=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?ua:ta,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?ua:ta)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!== -"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=A;return ja("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=A;return ja("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V, -va=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ha.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=va(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===A||f===e))if(e!=null||f){a.type="change";a.liveFired= -A;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",va(a))}},setup:function(){if(this.type=== -"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ha.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ha.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}u.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){sa[b]++===0&&u.addEventListener(a,d,true)},teardown:function(){--sa[b]=== -0&&u.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=A}var k=b==="one"?c.proxy(f,function(n){c(this).unbind(n,k);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var l=this.length;h<l;h++)c.event.add(this[h],d,k,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d, -a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d= -1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var wa={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var k,l=0,n,s,v=h||this.selector;h=h?this:c(this.context);if(typeof d=== -"object"&&!d.preventDefault){for(k in d)h[b](k,e,d[k],v);return this}if(c.isFunction(e)){f=e;e=A}for(d=(d||"").split(" ");(k=d[l++])!=null;){n=X.exec(k);s="";if(n){s=n[0];k=k.replace(X,"")}if(k==="hover")d.push("mouseenter"+s,"mouseleave"+s);else{n=k;if(k==="focus"||k==="blur"){d.push(wa[k]+s);k+=s}else k=(wa[k]||k)+s;if(b==="live"){s=0;for(var B=h.length;s<B;s++)c.event.add(h[s],"live."+Y(k,v),{data:e,selector:v,handler:f,origType:k,origHandler:f,preType:n})}else h.unbind("live."+Y(k,v),f)}}return this}}); -c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); -(function(){function a(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1&&!q){x.sizcache=o;x.sizset=p}if(x.nodeName.toLowerCase()===j){C=x;break}x=x[g]}m[p]=C}}}function b(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1){if(!q){x.sizcache=o;x.sizset=p}if(typeof j!=="string"){if(x===j){C=true;break}}else if(l.filter(j, -[x]).length>0){C=x;break}}x=x[g]}m[p]=C}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,k=true;[0,0].sort(function(){k=false;return 0});var l=function(g,j,o,m){o=o||[];var p=j=j||u;if(j.nodeType!==1&&j.nodeType!==9)return[];if(!g||typeof g!=="string")return o;var q=[],t,x,C,P,N=true,R=l.isXML(j),Q=g,L;do{d.exec("");if(t=d.exec(Q)){Q=t[3];q.push(t[1]);if(t[2]){P=t[3]; -break}}}while(t);if(q.length>1&&s.exec(g))if(q.length===2&&n.relative[q[0]])x=M(q[0]+q[1],j);else for(x=n.relative[q[0]]?[j]:l(q.shift(),j);q.length;){g=q.shift();if(n.relative[g])g+=q.shift();x=M(g,x)}else{if(!m&&q.length>1&&j.nodeType===9&&!R&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){t=l.find(q.shift(),j,R);j=t.expr?l.filter(t.expr,t.set)[0]:t.set[0]}if(j){t=m?{expr:q.pop(),set:D(m)}:l.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&j.parentNode?j.parentNode:j,R);x=t.expr?l.filter(t.expr, -t.set):t.set;if(q.length>0)C=D(x);else N=false;for(;q.length;){t=L=q.pop();if(n.relative[L])t=q.pop();else L="";if(t==null)t=j;n.relative[L](C,t,R)}}else C=[]}C||(C=x);C||l.error(L||g);if(f.call(C)==="[object Array]")if(N)if(j&&j.nodeType===1)for(g=0;C[g]!=null;g++){if(C[g]&&(C[g]===true||C[g].nodeType===1&&l.contains(j,C[g])))o.push(x[g])}else for(g=0;C[g]!=null;g++)C[g]&&C[g].nodeType===1&&o.push(x[g]);else o.push.apply(o,C);else D(C,o);if(P){l(P,p,o,m);l.uniqueSort(o)}return o};l.uniqueSort=function(g){if(w){h= -k;g.sort(w);if(h)for(var j=1;j<g.length;j++)g[j]===g[j-1]&&g.splice(j--,1)}return g};l.matches=function(g,j){return l(g,null,null,j)};l.matchesSelector=function(g,j){return l(j,null,null,[g]).length>0};l.find=function(g,j,o){var m;if(!g)return[];for(var p=0,q=n.order.length;p<q;p++){var t=n.order[p],x;if(x=n.leftMatch[t].exec(g)){var C=x[1];x.splice(1,1);if(C.substr(C.length-1)!=="\\"){x[1]=(x[1]||"").replace(/\\/g,"");m=n.find[t](x,j,o);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=j.getElementsByTagName("*")); -return{set:m,expr:g}};l.filter=function(g,j,o,m){for(var p=g,q=[],t=j,x,C,P=j&&j[0]&&l.isXML(j[0]);g&&j.length;){for(var N in n.filter)if((x=n.leftMatch[N].exec(g))!=null&&x[2]){var R=n.filter[N],Q,L;L=x[1];C=false;x.splice(1,1);if(L.substr(L.length-1)!=="\\"){if(t===q)q=[];if(n.preFilter[N])if(x=n.preFilter[N](x,t,o,q,m,P)){if(x===true)continue}else C=Q=true;if(x)for(var i=0;(L=t[i])!=null;i++)if(L){Q=R(L,x,i,t);var r=m^!!Q;if(o&&Q!=null)if(r)C=true;else t[i]=false;else if(r){q.push(L);C=true}}if(Q!== -A){o||(t=q);g=g.replace(n.match[N],"");if(!C)return[];break}}}if(g===p)if(C==null)l.error(g);else break;p=g}return t};l.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=l.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/, -POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,j){var o=typeof j==="string",m=o&&!/\W/.test(j);o=o&&!m;if(m)j=j.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=o||q&&q.nodeName.toLowerCase()=== -j?q||false:q===j}o&&l.filter(j,g,true)},">":function(g,j){var o=typeof j==="string",m,p=0,q=g.length;if(o&&!/\W/.test(j))for(j=j.toLowerCase();p<q;p++){if(m=g[p]){o=m.parentNode;g[p]=o.nodeName.toLowerCase()===j?o:false}}else{for(;p<q;p++)if(m=g[p])g[p]=o?m.parentNode:m.parentNode===j;o&&l.filter(j,g,true)}},"":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=j=j.toLowerCase();p=a}p("parentNode",j,m,g,q,o)},"~":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q= -j=j.toLowerCase();p=a}p("previousSibling",j,m,g,q,o)}},find:{ID:function(g,j,o){if(typeof j.getElementById!=="undefined"&&!o)return(g=j.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,j){if(typeof j.getElementsByName!=="undefined"){for(var o=[],m=j.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&o.push(m[p]);return o.length===0?null:o}},TAG:function(g,j){return j.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,j,o,m,p,q){g=" "+g[1].replace(/\\/g, -"")+" ";if(q)return g;q=0;for(var t;(t=j[q])!=null;q++)if(t)if(p^(t.className&&(" "+t.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))o||m.push(t);else if(o)j[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var j=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=j[1]+(j[2]||1)-0;g[3]=j[3]-0}g[0]=e++;return g},ATTR:function(g,j,o, -m,p,q){j=g[1].replace(/\\/g,"");if(!q&&n.attrMap[j])g[1]=n.attrMap[j];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,j,o,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=l(g[3],null,null,j);else{g=l.filter(g[3],j,o,true^p);o||m.push.apply(m,g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== -true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,j,o){return!!l(o[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== -g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,j){return j===0},last:function(g,j,o,m){return j===m.length-1},even:function(g,j){return j%2===0},odd:function(g,j){return j%2===1},lt:function(g,j,o){return j<o[3]-0},gt:function(g,j,o){return j>o[3]-0},nth:function(g,j,o){return o[3]- -0===j},eq:function(g,j,o){return o[3]-0===j}},filter:{PSEUDO:function(g,j,o,m){var p=j[1],q=n.filters[p];if(q)return q(g,o,j,m);else if(p==="contains")return(g.textContent||g.innerText||l.getText([g])||"").indexOf(j[3])>=0;else if(p==="not"){j=j[3];o=0;for(m=j.length;o<m;o++)if(j[o]===g)return false;return true}else l.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,j){var o=j[1],m=g;switch(o){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(o=== -"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":o=j[2];var p=j[3];if(o===1&&p===0)return true;var q=j[0],t=g.parentNode;if(t&&(t.sizcache!==q||!g.nodeIndex)){var x=0;for(m=t.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++x;t.sizcache=q}m=g.nodeIndex-p;return o===0?m===0:m%o===0&&m/o>=0}},ID:function(g,j){return g.nodeType===1&&g.getAttribute("id")===j},TAG:function(g,j){return j==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== -j},CLASS:function(g,j){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(j)>-1},ATTR:function(g,j){var o=j[1];o=n.attrHandle[o]?n.attrHandle[o](g):g[o]!=null?g[o]:g.getAttribute(o);var m=o+"",p=j[2],q=j[4];return o==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&o!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,j,o,m){var p=n.setFilters[j[2]]; -if(p)return p(g,o,j,m)}}},s=n.match.POS,v=function(g,j){return"\\"+(j-0+1)},B;for(B in n.match){n.match[B]=RegExp(n.match[B].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[B]=RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[B].source.replace(/\\(\d+)/g,v))}var D=function(g,j){g=Array.prototype.slice.call(g,0);if(j){j.push.apply(j,g);return j}return g};try{Array.prototype.slice.call(u.documentElement.childNodes,0)}catch(H){D=function(g,j){var o=j||[],m=0;if(f.call(g)==="[object Array]")Array.prototype.push.apply(o, -g);else if(typeof g.length==="number")for(var p=g.length;m<p;m++)o.push(g[m]);else for(;g[m];m++)o.push(g[m]);return o}}var w,G;if(u.documentElement.compareDocumentPosition)w=function(g,j){if(g===j){h=true;return 0}if(!g.compareDocumentPosition||!j.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(j)&4?-1:1};else{w=function(g,j){var o=[],m=[],p=g.parentNode,q=j.parentNode,t=p;if(g===j){h=true;return 0}else if(p===q)return G(g,j);else if(p){if(!q)return 1}else return-1; -for(;t;){o.unshift(t);t=t.parentNode}for(t=q;t;){m.unshift(t);t=t.parentNode}p=o.length;q=m.length;for(t=0;t<p&&t<q;t++)if(o[t]!==m[t])return G(o[t],m[t]);return t===p?G(g,m[t],-1):G(o[t],j,1)};G=function(g,j,o){if(g===j)return o;for(g=g.nextSibling;g;){if(g===j)return-1;g=g.nextSibling}return 1}}l.getText=function(g){for(var j="",o,m=0;g[m];m++){o=g[m];if(o.nodeType===3||o.nodeType===4)j+=o.nodeValue;else if(o.nodeType!==8)j+=l.getText(o.childNodes)}return j};(function(){var g=u.createElement("div"), -j="script"+(new Date).getTime();g.innerHTML="<a name='"+j+"'/>";var o=u.documentElement;o.insertBefore(g,o.firstChild);if(u.getElementById(j)){n.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:A:[]};n.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}o.removeChild(g); -o=g=null})();(function(){var g=u.createElement("div");g.appendChild(u.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(j,o){var m=o.getElementsByTagName(j[1]);if(j[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(j){return j.getAttribute("href",2)};g=null})();u.querySelectorAll&& -function(){var g=l,j=u.createElement("div");j.innerHTML="<p class='TEST'></p>";if(!(j.querySelectorAll&&j.querySelectorAll(".TEST").length===0)){l=function(m,p,q,t){p=p||u;if(!t&&!l.isXML(p))if(p.nodeType===9)try{return D(p.querySelectorAll(m),q)}catch(x){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var C=p.id,P=p.id="__sizzle__";try{return D(p.querySelectorAll("#"+P+" "+m),q)}catch(N){}finally{if(C)p.id=C;else p.removeAttribute("id")}}return g(m,p,q,t)};for(var o in g)l[o]=g[o]; -j=null}}();(function(){var g=u.documentElement,j=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,o=false;try{j.call(u.documentElement,":sizzle")}catch(m){o=true}if(j)l.matchesSelector=function(p,q){try{if(o||!n.match.PSEUDO.test(q))return j.call(p,q)}catch(t){}return l(q,null,null,[p]).length>0}})();(function(){var g=u.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length=== -0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(j,o,m){if(typeof o.getElementsByClassName!=="undefined"&&!m)return o.getElementsByClassName(j[1])};g=null}}})();l.contains=u.documentElement.contains?function(g,j){return g!==j&&(g.contains?g.contains(j):true)}:function(g,j){return!!(g.compareDocumentPosition(j)&16)};l.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var M=function(g, -j){for(var o=[],m="",p,q=j.nodeType?[j]:j;p=n.match.PSEUDO.exec(g);){m+=p[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;p=0;for(var t=q.length;p<t;p++)l(g,q[p],o);return l.filter(m,o)};c.find=l;c.expr=l.selectors;c.expr[":"]=c.expr.filters;c.unique=l.uniqueSort;c.text=l.getText;c.isXMLDoc=l.isXML;c.contains=l.contains})();var Wa=/Until$/,Xa=/^(?:parents|prevUntil|prevAll)/,Ya=/,/,Ja=/^.[^:#\[\.,]*$/,Za=Array.prototype.slice,$a=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("", -"find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var k=0;k<d;k++)if(b[k]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(ka(this,a,false),"not",a)},filter:function(a){return this.pushStack(ka(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a, -b){var d=[],e,f,h=this[0];if(c.isArray(a)){var k={},l,n=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:n})}h=h.parentNode;n++}}return d}k=$a.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(k?k.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h|| -!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}}); -c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling", -d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Wa.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||Ya.test(e))&&Xa.test(a))f=f.reverse();return this.pushStack(f,a,Za.call(arguments).join(","))}}); -c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===A||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var xa=/ jQuery\d+="(?:\d+|null)"/g, -$=/^\s+/,ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,za=/<([\w:]+)/,ab=/<tbody/i,bb=/<|&#?\w+;/,Aa=/<(?:script|object|embed|option|style)/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,cb=/\=([^="'>\s]+\/)>/g,O={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"], -area:[1,"<map>","</map>"],_default:[0,"",""]};O.optgroup=O.option;O.tbody=O.tfoot=O.colgroup=O.caption=O.thead;O.th=O.td;if(!c.support.htmlSerialize)O._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==A)return this.empty().append((this[0]&&this[0].ownerDocument||u).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this, -d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})}, -unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a= -c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*")); -c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(xa,"").replace(cb,'="$1">').replace($, -"")],e)[0]}else return this.cloneNode(true)});if(a===true){la(this,b);la(this.find("*"),b.find("*"))}return b},html:function(a){if(a===A)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(xa,""):null;else if(typeof a==="string"&&!Aa.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!O[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)? -this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a, -true)},domManip:function(a,b,d){var e,f,h=a[0],k=[],l;if(!c.support.checkClone&&arguments.length===3&&typeof h==="string"&&Ba.test(h))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(h))return this.each(function(s){var v=c(this);a[0]=h.call(this,s,b?v.html():A);v.domManip(a,b,d)});if(this[0]){e=h&&h.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);l=e.fragment;if(f=l.childNodes.length===1?l=l.firstChild: -l.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var n=this.length;f<n;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):this[f]:this[f],f>0||e.cacheable||this.length>1?l.cloneNode(true):l)}k.length&&c.each(k,Ka)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:u;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===u&&!Aa.test(a[0])&&(c.support.checkClone|| -!Ba.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h= -d.length;f<h;f++){var k=(f>0?this.clone(true):this).get();c(d[f])[b](k);e=e.concat(k)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||u;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||u;for(var f=[],h=0,k;(k=a[h])!=null;h++){if(typeof k==="number")k+="";if(k){if(typeof k==="string"&&!bb.test(k))k=b.createTextNode(k);else if(typeof k==="string"){k=k.replace(ya,"<$1></$2>");var l=(za.exec(k)||["",""])[1].toLowerCase(),n=O[l]||O._default, -s=n[0],v=b.createElement("div");for(v.innerHTML=n[1]+k+n[2];s--;)v=v.lastChild;if(!c.support.tbody){s=ab.test(k);l=l==="table"&&!s?v.firstChild&&v.firstChild.childNodes:n[1]==="<table>"&&!s?v.childNodes:[];for(n=l.length-1;n>=0;--n)c.nodeName(l[n],"tbody")&&!l[n].childNodes.length&&l[n].parentNode.removeChild(l[n])}!c.support.leadingWhitespace&&$.test(k)&&v.insertBefore(b.createTextNode($.exec(k)[0]),v.firstChild);k=v.childNodes}if(k.nodeType)f.push(k);else f=c.merge(f,k)}}if(d)for(h=0;f[h];h++)if(e&& -c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,k=0,l;(l=a[k])!=null;k++)if(!(l.nodeName&&c.noData[l.nodeName.toLowerCase()]))if(d=l[c.expando]){if((b=e[d])&&b.events)for(var n in b.events)f[n]? -c.event.remove(l,n):c.removeEvent(l,n,b.handle);if(h)delete l[c.expando];else l.removeAttribute&&l.removeAttribute(c.expando);delete e[d]}}});var Ca=/alpha\([^)]*\)/i,db=/opacity=([^)]*)/,eb=/-([a-z])/ig,fb=/([A-Z])/g,Da=/^-?\d+(?:px)?$/i,gb=/^-?\d/,hb={position:"absolute",visibility:"hidden",display:"block"},La=["Left","Right"],Ma=["Top","Bottom"],W,ib=u.defaultView&&u.defaultView.getComputedStyle,jb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===A)return this; -return c.access(this,a,b,true,function(d,e,f){return f!==A?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),k=a.style,l=c.cssHooks[h];b=c.cssProps[h]|| -h;if(d!==A){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!l||!("set"in l)||(d=l.set(a,d))!==A)try{k[b]=d}catch(n){}}}else{if(l&&"get"in l&&(f=l.get(a,false,e))!==A)return f;return k[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==A)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]= -e[f]},camelCase:function(a){return a.replace(eb,jb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=ma(d,b,f);else c.swap(d,hb,function(){h=ma(d,b,f)});return h+"px"}},set:function(d,e){if(Da.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return db.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"": -b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=d.filter||"";d.filter=Ca.test(f)?f.replace(Ca,e):d.filter+" "+e}};if(ib)W=function(a,b,d){var e;d=d.replace(fb,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return A;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};else if(u.documentElement.currentStyle)W=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b], -h=a.style;if(!Da.test(f)&&gb.test(f)){d=h.left;e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f};if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var kb=c.now(),lb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, -mb=/^(?:select|textarea)/i,nb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ob=/^(?:GET|HEAD|DELETE)$/,Na=/\[\]$/,T=/\=\?(&|$)/,ia=/\?/,pb=/([?&])_=[^&]*/,qb=/^(\w+:)?\/\/([^\/?#]+)/,rb=/%20/g,sb=/#.*$/,Ea=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ea)return Ea.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d= -b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(k,l){if(l==="success"||l==="notmodified")h.html(f?c("<div>").append(k.responseText.replace(lb,"")).find(f):k.responseText);d&&h.each(d,[k.responseText,l,k])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& -!this.disabled&&(this.checked||mb.test(this.nodeName)||nb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, -getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", -script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),k=ob.test(h);b.url=b.url.replace(sb,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ia.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| -!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+kb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var l=E[d];E[d]=function(m){f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);if(c.isFunction(l))l(m);else{E[d]=A;try{delete E[d]}catch(p){}}v&&v.removeChild(B)}}if(b.dataType==="script"&&b.cache===null)b.cache= -false;if(b.cache===false&&h==="GET"){var n=c.now(),s=b.url.replace(pb,"$1_="+n);b.url=s+(s===b.url?(ia.test(b.url)?"&":"?")+"_="+n:"")}if(b.data&&h==="GET")b.url+=(ia.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");n=(n=qb.exec(b.url))&&(n[1]&&n[1]!==location.protocol||n[2]!==location.host);if(b.dataType==="script"&&h==="GET"&&n){var v=u.getElementsByTagName("head")[0]||u.documentElement,B=u.createElement("script");if(b.scriptCharset)B.charset=b.scriptCharset;B.src= -b.url;if(!d){var D=false;B.onload=B.onreadystatechange=function(){if(!D&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){D=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);B.onload=B.onreadystatechange=null;v&&B.parentNode&&v.removeChild(B)}}}v.insertBefore(B,v.firstChild);return A}var H=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!k||a&&a.contentType)w.setRequestHeader("Content-Type", -b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}n||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(G){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& -c.triggerGlobal(b,"ajaxSend",[w,b]);var M=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){H||c.handleComplete(b,w,e,f);H=true;if(w)w.onreadystatechange=c.noop}else if(!H&&w&&(w.readyState===4||m==="timeout")){H=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| -c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&g.call&&g.call(w);M("abort")}}catch(j){}b.async&&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k||b.data==null?null:b.data)}catch(o){c.handleError(b,w,null,o);c.handleComplete(b,w,e,f)}b.async||M();return w}},param:function(a,b){var d=[],e=function(h,k){k=c.isFunction(k)?k():k;d[d.length]=encodeURIComponent(h)+ -"="+encodeURIComponent(k)};if(b===A)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)ca(f,a[f],b,e);return d.join("&").replace(rb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a, -b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),e=a.getResponseHeader("Etag"); -if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});if(E.ActiveXObject)c.ajaxSettings.xhr= -function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var da={},tb=/^(?:toggle|show|hide)$/,ub=/^([+\-]=)?([\d+.\-]+)(.*)$/,aa,na=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",3),a,b,d);else{a= -0;for(b=this.length;a<b;a++){if(!c.data(this[a],"olddisplay")&&this[a].style.display==="none")this[a].style.display="";this[a].style.display===""&&c.css(this[a],"display")==="none"&&c.data(this[a],"olddisplay",oa(this[a].nodeName))}for(a=0;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",d)}for(a= -0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,d,e);if(c.isEmptyObject(a))return this.each(f.complete); -return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),k,l=this.nodeType===1,n=l&&c(this).is(":hidden"),s=this;for(k in a){var v=c.camelCase(k);if(k!==v){a[v]=a[k];delete a[k];k=v}if(a[k]==="hide"&&n||a[k]==="show"&&!n)return h.complete.call(this);if(l&&(k==="height"||k==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(oa(this.nodeName)=== -"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[k])){(h.specialEasing=h.specialEasing||{})[k]=a[k][1];a[k]=a[k][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(B,D){var H=new c.fx(s,h,B);if(tb.test(D))H[D==="toggle"?n?"show":"hide":D](a);else{var w=ub.exec(D),G=H.cur(true)||0;if(w){var M=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(s,B,(M||1)+g); -G=(M||1)/H.cur(true)*G;c.style(s,B,G+g)}if(w[1])M=(w[1]==="-="?-1:1)*M+G;H.custom(G,M,g)}else H.custom(G,D,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, -d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* -Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(h){return f.step(h)} -this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var f=this;a=c.fx;e.elem=this.elem;if(e()&&c.timers.push(e)&&!aa)aa=setInterval(a.tick,a.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; -this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(l,n){f.style["overflow"+n]=h.overflow[l]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| -this.options.show)for(var k in this.options.curAnim)c.style(this.elem,k,this.options.orig[k]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= -c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(aa);aa=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a=== -b.elem}).length};var vb=/^t(?:able|d|h)$/i,Fa=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in u.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(k){c.offset.setOffset(this,a,k)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=ea(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&& -h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,e=b.ownerDocument,f,h=e.documentElement,k=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle; -for(var l=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==k&&b!==h;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;f=e?e.getComputedStyle(b,null):b.currentStyle;l-=b.scrollTop;n-=b.scrollLeft;if(b===d){l+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&vb.test(b.nodeName))){l+=parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&f.overflow!=="visible"){l+= -parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}f=f}if(f.position==="relative"||f.position==="static"){l+=k.offsetTop;n+=k.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){l+=Math.max(h.scrollTop,k.scrollTop);n+=Math.max(h.scrollLeft,k.scrollLeft)}return{top:l,left:n}};c.offset={initialize:function(){var a=u.body,b=u.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px", -height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells= -f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a, -"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),k=c.css(a,"top"),l=c.css(a,"left"),n=e==="absolute"&&c.inArray("auto",[k,l])>-1;e={};var s={};if(n)s=f.position();k=n?s.top:parseInt(k,10)||0;l=n?s.left:parseInt(l,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+k;if(b.left!=null)e.left=b.left-h.left+l;"using"in b?b.using.call(a, -e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Fa.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||u.body;a&&!Fa.test(a.nodeName)&& -c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==A)return this.each(function(){if(h=ea(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=ea(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); -c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(h){var k=c(this);k[d](e.call(this,h,k[d]()))});return c.isWindow(f)?f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b]:f.nodeType===9?Math.max(f.documentElement["client"+ -b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]):e===A?parseFloat(c.css(f,d)):this.css(d,typeof e==="string"?e:e+"px")}})})(window); diff --git a/test_coverage/jquery.hotkeys.js b/test_coverage/jquery.hotkeys.js deleted file mode 100644 index 09b21e03c..000000000 --- a/test_coverage/jquery.hotkeys.js +++ /dev/null @@ -1,99 +0,0 @@ -/* - * jQuery Hotkeys Plugin - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * - * Based upon the plugin by Tzury Bar Yochay: - * http://github.com/tzuryby/hotkeys - * - * Original idea by: - * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ -*/ - -(function(jQuery){ - - jQuery.hotkeys = { - version: "0.8", - - specialKeys: { - 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause", - 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home", - 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", - 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", - 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/", - 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", - 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta" - }, - - shiftNums: { - "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", - "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", - ".": ">", "/": "?", "\\": "|" - } - }; - - function keyHandler( handleObj ) { - // Only care when a possible input has been specified - if ( typeof handleObj.data !== "string" ) { - return; - } - - var origHandler = handleObj.handler, - keys = handleObj.data.toLowerCase().split(" "); - - handleObj.handler = function( event ) { - // Don't fire in text-accepting inputs that we didn't directly bind to - if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || - event.target.type === "text") ) { - return; - } - - // Keypress represents characters, not special keys - var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ], - character = String.fromCharCode( event.which ).toLowerCase(), - key, modif = "", possible = {}; - - // check combinations (alt|ctrl|shift+anything) - if ( event.altKey && special !== "alt" ) { - modif += "alt+"; - } - - if ( event.ctrlKey && special !== "ctrl" ) { - modif += "ctrl+"; - } - - // TODO: Need to make sure this works consistently across platforms - if ( event.metaKey && !event.ctrlKey && special !== "meta" ) { - modif += "meta+"; - } - - if ( event.shiftKey && special !== "shift" ) { - modif += "shift+"; - } - - if ( special ) { - possible[ modif + special ] = true; - - } else { - possible[ modif + character ] = true; - possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true; - - // "$" can be triggered as "Shift+4" or "Shift+$" or just "$" - if ( modif === "shift+" ) { - possible[ jQuery.hotkeys.shiftNums[ character ] ] = true; - } - } - - for ( var i = 0, l = keys.length; i < l; i++ ) { - if ( possible[ keys[i] ] ) { - return origHandler.apply( this, arguments ); - } - } - }; - } - - jQuery.each([ "keydown", "keyup", "keypress" ], function() { - jQuery.event.special[ this ] = { add: keyHandler }; - }); - -})( jQuery ); diff --git a/test_coverage/jquery.isonscreen.js b/test_coverage/jquery.isonscreen.js deleted file mode 100644 index 0182ebd21..000000000 --- a/test_coverage/jquery.isonscreen.js +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2010 - * @author Laurence Wheway - * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) - * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. - * - * @version 1.2.0 - */ -(function($) { - jQuery.extend({ - isOnScreen: function(box, container) { - //ensure numbers come in as intgers (not strings) and remove 'px' is it's there - for(var i in box){box[i] = parseFloat(box[i])}; - for(var i in container){container[i] = parseFloat(container[i])}; - - if(!container){ - container = { - left: $(window).scrollLeft(), - top: $(window).scrollTop(), - width: $(window).width(), - height: $(window).height() - } - } - - if( box.left+box.width-container.left > 0 && - box.left < container.width+container.left && - box.top+box.height-container.top > 0 && - box.top < container.height+container.top - ) return true; - return false; - } - }) - - - jQuery.fn.isOnScreen = function (container) { - for(var i in container){container[i] = parseFloat(container[i])}; - - if(!container){ - container = { - left: $(window).scrollLeft(), - top: $(window).scrollTop(), - width: $(window).width(), - height: $(window).height() - } - } - - if( $(this).offset().left+$(this).width()-container.left > 0 && - $(this).offset().left < container.width+container.left && - $(this).offset().top+$(this).height()-container.top > 0 && - $(this).offset().top < container.height+container.top - ) return true; - return false; - } -})(jQuery); diff --git a/test_coverage/jquery.tablesorter.min.js b/test_coverage/jquery.tablesorter.min.js deleted file mode 100644 index 64c700712..000000000 --- a/test_coverage/jquery.tablesorter.min.js +++ /dev/null @@ -1,2 +0,0 @@ - -(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'.',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}var rows=table.tBodies[0].rows;if(table.tBodies[0].rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,cells[i]);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,node){var l=parsers.length;for(var i=1;i<l;i++){if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)){return parsers[i];}}return parsers[0];}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=table.tBodies[0].rows[i],cols=[];cache.row.push($(c));for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));}cols.push(i);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cache for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){if(!node)return"";var t="";if(config.textExtraction=="simple"){if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){t=node.childNodes[0].innerHTML;}else{t=node.innerHTML;}}else{if(typeof(config.textExtraction)=="function"){t=config.textExtraction(node);}else{t=$(node).text();}}return t;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){rows.push(r[n[i][checkCell]]);if(!table.config.appender){var o=r[n[i][checkCell]];var l=o.length;for(var j=0;j<l;j++){tableBody[0].appendChild(o[j]);}}}if(table.config.appender){table.config.appender(table,rows);}rows=null;if(table.config.debug){benchmark("Rebuilt table:",appendTime);}applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd");},0);};function buildHeaders(table){if(table.config.debug){var time=new Date();}var meta=($.metadata)?true:false,tableHeadersRows=[];for(var i=0;i<table.tHead.rows.length;i++){tableHeadersRows[i]=0;};$tableHeaders=$("thead th",table);$tableHeaders.each(function(index){this.count=0;this.column=index;this.order=formatSortingOrder(table.config.sortInitialOrder);if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))this.sortDisabled=true;if(!this.sortDisabled){$(this).addClass(table.config.cssHeader);}table.config.headerList[index]=this;});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders);}return $tableHeaders;};function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i<c.length;i++){var cell=c[i];if(cell.colSpan>1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i<l;i++){getWidgetById(c[i]).format(table);}}function getWidgetById(name){var l=widgets.length;for(var i=0;i<l;i++){if(widgets[i].id.toLowerCase()==name.toLowerCase()){return widgets[i];}}};function formatSortingOrder(v){if(typeof(v)!="Number"){i=(v.toLowerCase()=="desc")?1:0;}else{i=(v==(0||1))?v:0;}return i;}function isValueInArray(v,a){var l=a.length;for(var i=0;i<l;i++){if(a[i][0]==v){return true;}}return false;}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[];$headers.each(function(offset){if(!this.sortDisabled){h[this.column]=$(this);}});var l=list.length;for(var i=0;i<l;i++){h[list[i][0]].addClass(css[list[i][1]]);}}function fixColumnWidth(table,$headers){var c=table.config;if(c.widthFixed){var colgroup=$('<colgroup>');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('<col>').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i<l;i++){var s=sortList[i],o=c.headerList[s[0]];o.count=s[1];o.count++;}}function multisort(table,sortList,cache){if(table.config.debug){var sortTime=new Date();}var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;for(var i=0;i<l;i++){var c=sortList[i][0];var order=sortList[i][1];var s=(getCachedSortType(table.config.parsers,c)=="text")?((order==0)?"sortText":"sortTextDesc"):((order==0)?"sortNumeric":"sortNumericDesc");var e="e"+i;dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"]); ";dynamicExp+="if("+e+") { return "+e+"; } ";dynamicExp+="else { ";}var orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(var i=0;i<l;i++){dynamicExp+="}; ";}dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(table.config.debug){benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);}return cache;};function sortText(a,b){return((a<b)?-1:((a>b)?1:0));};function sortTextDesc(a,b){return((b<a)?-1:((b>a)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){$this.trigger("sortStart");var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){var $cell=$(this);var i=this.column;this.order=this.count++%2;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j<a.length;j++){if(a[j][0]!=i){config.sortList.push(a[j]);}}}config.sortList.push([i,this.order]);}else{if(isValueInArray(i,config.sortList)){for(var j=0;j<config.sortList.length;j++){var s=config.sortList[j],o=config.headerList[s[0]];if(s[0]==i){o.count=s[1];o.count++;s[1]=o.count%2;}}}else{config.sortList.push([i,this.order]);}};setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache));},1);return false;}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false;}});$this.bind("update",function(){this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);}).bind("sorton",function(e,list){$(this).trigger("sortStart");config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache));}).bind("appendCache",function(){appendToTable(this,cache);}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this);}).bind("applyWidgets",function(){applyWidget(this);});if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist)){config.sortList=$(this).metadata().sortlist;}if(config.sortList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){var DECIMAL='\\'+config.decimal;var exp='/(^[+]?0('+DECIMAL+'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)'+DECIMAL+'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*'+DECIMAL+'0+$)/';return RegExp(exp).test($.trim(s));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.apply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[£$€?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat=="us"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");}else if(c.dateFormat=="uk"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}$("tr:visible",table.tBodies[0]).filter(':even').removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0]).end().filter(':odd').removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery); \ No newline at end of file diff --git a/test_coverage/keybd_closed.png b/test_coverage/keybd_closed.png deleted file mode 100644 index f2b0418d2a33a1e8d0cd639f47ed60edf971f8bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^%0SG+!3HE>D6{MWQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfZ8lau9@bl*u7(4JIy_w*Lo808 zo$Afkpupp@{Fv_bobxQ#pD>iB3oNa1d9=pM`D99*FvsH{pKJfpB1-4UD;=6<K6B@5 zLBYljldFcu9?3G48!NX(J)N`p^2VMP0j(*|l8nmRW@fkP8CJhPU+g{ioT%Yihiknn zo3eD5Ni7n&9Q<dePKnwwG3EKIlif>}F=+gKX>Gx9b=!>PY1_pdfo@{(boFyt=akR{ E04sl8JOBUy diff --git a/test_coverage/keybd_open.png b/test_coverage/keybd_open.png deleted file mode 100644 index a77961db5424cfff43a63d399972ee85fc0dfdb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^%0SG+!3HE>D6{MWQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfZ8lau9%kc-1xY}mZci7-5R21$ zCp+>TR^VYdE*ieC^FGV{Cyeh_21=Rotz3KNq=!V<?rk6J-HcQ(<xE@d?o#0@9~c@^ zx^iCeynBp~lHLVmf4$qebc%HF$&Q!K?`y5sU-@m<a4Bl{pMsu`9z9GCIEz}A9N%*G zjJ~6I-;9|%zsY}G^gHV9<KzCWk2e`PTc=-Q(Aje9rrRFI#q($K%YBwT3Un5Or>mdK II;Vst00jnQH~;_u diff --git a/test_coverage/status.dat b/test_coverage/status.dat deleted file mode 100644 index f49c79028..000000000 --- a/test_coverage/status.dat +++ /dev/null @@ -1,271 +0,0 @@ -(dp1 -S'files' -p2 -(dp3 -S'youtube_dl_PostProcessor' -p4 -(dp5 -S'index' -p6 -(dp7 -S'html_filename' -p8 -S'youtube_dl_PostProcessor.html' -p9 -sS'name' -p10 -S'youtube_dl.PostProcessor' -p11 -sS'nums' -p12 -ccopy_reg -_reconstructor -p13 -(ccoverage.results -Numbers -p14 -c__builtin__ -object -p15 -NtRp16 -(dp17 -S'n_files' -p18 -I1 -sS'n_branches' -p19 -I0 -sS'n_statements' -p20 -I133 -sS'n_excluded' -p21 -I0 -sS'n_partial_branches' -p22 -I0 -sS'n_missing' -p23 -I114 -sS'n_missing_branches' -p24 -I0 -sbssS'hash' -p25 -S'C\xc0\xe7,\xf52VnS\x9e%\xc6\xe8\xeaT\xd9' -p26 -ssS'youtube_dl_InfoExtractors' -p27 -(dp28 -g6 -(dp29 -g8 -S'youtube_dl_InfoExtractors.html' -p30 -sg10 -S'youtube_dl.InfoExtractors' -p31 -sg12 -g13 -(g14 -g15 -NtRp32 -(dp33 -g18 -I1 -sg19 -I0 -sg20 -I2275 -sg21 -I0 -sg22 -I0 -sg23 -I1273 -sg24 -I0 -sbssg25 -S'\xc7\xc4\x03@-U\x1f\x93k!\xe6\x12\xf6\xf2\xe6l' -p34 -ssS'youtube_dl_version' -p35 -(dp36 -g6 -(dp37 -g8 -S'youtube_dl_version.html' -p38 -sg10 -S'youtube_dl.version' -p39 -sg12 -g13 -(g14 -g15 -NtRp40 -(dp41 -g18 -I1 -sg19 -I0 -sg20 -I1 -sg21 -I0 -sg22 -I0 -sg23 -I0 -sg24 -I0 -sbssg25 -S'\xc2$\xeb8-M\x17\xbd\xadu4rB\xd3\xfc\x0f' -p42 -ssS'youtube_dl_utils' -p43 -(dp44 -g6 -(dp45 -g8 -S'youtube_dl_utils.html' -p46 -sg10 -S'youtube_dl.utils' -p47 -sg12 -g13 -(g14 -g15 -NtRp48 -(dp49 -g18 -I1 -sg19 -I0 -sg20 -I340 -sg21 -I0 -sg22 -I0 -sg23 -I58 -sg24 -I0 -sbssg25 -S'\x19\x02[U\xd7[yZ{\xb4q\xa4\x1bY0/' -p50 -ssS'youtube_dl_update' -p51 -(dp52 -g6 -(dp53 -g8 -S'youtube_dl_update.html' -p54 -sg10 -S'youtube_dl.update' -p55 -sg12 -g13 -(g14 -g15 -NtRp56 -(dp57 -g18 -I1 -sg19 -I0 -sg20 -I130 -sg21 -I0 -sg22 -I0 -sg23 -I122 -sg24 -I0 -sbssg25 -S'\x15\x94\xbeDlF*\x0c>\x07\xf2\x17n\x0cN\xbc' -p58 -ssS'youtube_dl_FileDownloader' -p59 -(dp60 -g6 -(dp61 -g8 -S'youtube_dl_FileDownloader.html' -p62 -sg10 -S'youtube_dl.FileDownloader' -p63 -sg12 -g13 -(g14 -g15 -NtRp64 -(dp65 -g18 -I1 -sg19 -I0 -sg20 -I479 -sg21 -I0 -sg22 -I0 -sg23 -I208 -sg24 -I0 -sbssg25 -S'9\x8c\x8c\xe2V\xb9e\xc6\xee\xb9\x85\xe0\xc2\x8c\x84Z' -p66 -ssS'youtube_dl' -p67 -(dp68 -g6 -(dp69 -g8 -S'youtube_dl.html' -p70 -sg10 -g67 -sg12 -g13 -(g14 -g15 -NtRp71 -(dp72 -g18 -I1 -sg19 -I0 -sg20 -I274 -sg21 -I0 -sg22 -I0 -sg23 -I251 -sg24 -I0 -sbssg25 -S'e\x9c/\x9c\xc3\x1f\xc0\xcbp\x0f\x8a\xf3\xbe\xfdp_' -p73 -sssS'version' -p74 -S'3.6b1' -p75 -sS'settings' -p76 -S'\xce^\xf2\xdb\x0fV\xcc\xfe\x1e\x9a\xd9\x81\xe5\xe3.\xa9' -p77 -sS'format' -p78 -I1 -s. \ No newline at end of file diff --git a/test_coverage/style.css b/test_coverage/style.css deleted file mode 100644 index 811c64019..000000000 --- a/test_coverage/style.css +++ /dev/null @@ -1,300 +0,0 @@ -/* CSS styles for Coverage. */ -/* Page-wide styles */ -html, body, h1, h2, h3, p, td, th { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; - } - -/* Set baseline grid to 16 pt. */ -body { - font-family: georgia, serif; - font-size: 1em; - } - -html>body { - font-size: 16px; - } - -/* Set base font size to 12/16 */ -p { - font-size: .75em; /* 12/16 */ - line-height: 1.33333333em; /* 16/12 */ - } - -table { - border-collapse: collapse; - } - -a.nav { - text-decoration: none; - color: inherit; - } -a.nav:hover { - text-decoration: underline; - color: inherit; - } - -/* Page structure */ -#header { - background: #f8f8f8; - width: 100%; - border-bottom: 1px solid #eee; - } - -#source { - padding: 1em; - font-family: "courier new", monospace; - } - -#indexfile #footer { - margin: 1em 3em; - } - -#pyfile #footer { - margin: 1em 1em; - } - -#footer .content { - padding: 0; - font-size: 85%; - font-family: verdana, sans-serif; - color: #666666; - font-style: italic; - } - -#index { - margin: 1em 0 0 3em; - } - -/* Header styles */ -#header .content { - padding: 1em 3em; - } - -h1 { - font-size: 1.25em; -} - -h2.stats { - margin-top: .5em; - font-size: 1em; -} -.stats span { - border: 1px solid; - padding: .1em .25em; - margin: 0 .1em; - cursor: pointer; - border-color: #999 #ccc #ccc #999; -} -.stats span.hide_run, .stats span.hide_exc, -.stats span.hide_mis, .stats span.hide_par, -.stats span.par.hide_run.hide_par { - border-color: #ccc #999 #999 #ccc; -} -.stats span.par.hide_run { - border-color: #999 #ccc #ccc #999; -} - -.stats span.run { - background: #ddffdd; -} -.stats span.exc { - background: #eeeeee; -} -.stats span.mis { - background: #ffdddd; -} -.stats span.hide_run { - background: #eeffee; -} -.stats span.hide_exc { - background: #f5f5f5; -} -.stats span.hide_mis { - background: #ffeeee; -} -.stats span.par { - background: #ffffaa; -} -.stats span.hide_par { - background: #ffffcc; -} - -/* Help panel */ -#keyboard_icon { - float: right; - cursor: pointer; -} - -.help_panel { - position: absolute; - background: #ffc; - padding: .5em; - border: 1px solid #883; - display: none; -} - -#indexfile .help_panel { - width: 20em; height: 4em; -} - -#pyfile .help_panel { - width: 16em; height: 8em; -} - -.help_panel .legend { - font-style: italic; - margin-bottom: 1em; -} - -#panel_icon { - float: right; - cursor: pointer; -} - -.keyhelp { - margin: .75em; -} - -.keyhelp .key { - border: 1px solid black; - border-color: #888 #333 #333 #888; - padding: .1em .35em; - font-family: monospace; - font-weight: bold; - background: #eee; -} - -/* Source file styles */ -.linenos p { - text-align: right; - margin: 0; - padding: 0 .5em; - color: #999999; - font-family: verdana, sans-serif; - font-size: .625em; /* 10/16 */ - line-height: 1.6em; /* 16/10 */ - } -.linenos p.highlight { - background: #ffdd00; - } -.linenos p a { - text-decoration: none; - color: #999999; - } -.linenos p a:hover { - text-decoration: underline; - color: #999999; - } - -td.text { - width: 100%; - } -.text p { - margin: 0; - padding: 0 0 0 .5em; - border-left: 2px solid #ffffff; - white-space: nowrap; - } - -.text p.mis { - background: #ffdddd; - border-left: 2px solid #ff0000; - } -.text p.run, .text p.run.hide_par { - background: #ddffdd; - border-left: 2px solid #00ff00; - } -.text p.exc { - background: #eeeeee; - border-left: 2px solid #808080; - } -.text p.par, .text p.par.hide_run { - background: #ffffaa; - border-left: 2px solid #eeee99; - } -.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par, -.text p.hide_run.hide_par { - background: inherit; - } - -.text span.annotate { - font-family: georgia; - font-style: italic; - color: #666; - float: right; - padding-right: .5em; - } -.text p.hide_par span.annotate { - display: none; - } - -/* Syntax coloring */ -.text .com { - color: green; - font-style: italic; - line-height: 1px; - } -.text .key { - font-weight: bold; - line-height: 1px; - } -.text .str { - color: #000080; - } - -/* index styles */ -#index td, #index th { - text-align: right; - width: 5em; - padding: .25em .5em; - border-bottom: 1px solid #eee; - } -#index th { - font-style: italic; - color: #333; - border-bottom: 1px solid #ccc; - cursor: pointer; - } -#index th:hover { - background: #eee; - border-bottom: 1px solid #999; - } -#index td.left, #index th.left { - padding-left: 0; - } -#index td.right, #index th.right { - padding-right: 0; - } -#index th.headerSortDown, #index th.headerSortUp { - border-bottom: 1px solid #000; - } -#index td.name, #index th.name { - text-align: left; - width: auto; - } -#index td.name a { - text-decoration: none; - color: #000; - } -#index td.name a:hover { - text-decoration: underline; - color: #000; - } -#index tr.total { - } -#index tr.total td { - font-weight: bold; - border-top: 1px solid #ccc; - border-bottom: none; - } -#index tr.file:hover { - background: #eeeeee; - } diff --git a/test_coverage/youtube_dl.html b/test_coverage/youtube_dl.html deleted file mode 100644 index 229d7027b..000000000 --- a/test_coverage/youtube_dl.html +++ /dev/null @@ -1,1066 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl: 8%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl</b> : - <span class='pc_cov'>8%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 274 statements - <span class='run hide_run shortkey_r button_toggle_run'>23 run</span> - <span class='mis shortkey_m button_toggle_mis'>251 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='pln'><a href='#n1'>1</a></p> -<p id='n2' class='pln'><a href='#n2'>2</a></p> -<p id='n3' class='pln'><a href='#n3'>3</a></p> -<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p> -<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p> -<p id='n6' class='pln'><a href='#n6'>6</a></p> -<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p> -<p id='n8' class='pln'><a href='#n8'>8</a></p> -<p id='n9' class='pln'><a href='#n9'>9</a></p> -<p id='n10' class='pln'><a href='#n10'>10</a></p> -<p id='n11' class='pln'><a href='#n11'>11</a></p> -<p id='n12' class='pln'><a href='#n12'>12</a></p> -<p id='n13' class='pln'><a href='#n13'>13</a></p> -<p id='n14' class='pln'><a href='#n14'>14</a></p> -<p id='n15' class='pln'><a href='#n15'>15</a></p> -<p id='n16' class='pln'><a href='#n16'>16</a></p> -<p id='n17' class='pln'><a href='#n17'>17</a></p> -<p id='n18' class='pln'><a href='#n18'>18</a></p> -<p id='n19' class='pln'><a href='#n19'>19</a></p> -<p id='n20' class='pln'><a href='#n20'>20</a></p> -<p id='n21' class='pln'><a href='#n21'>21</a></p> -<p id='n22' class='pln'><a href='#n22'>22</a></p> -<p id='n23' class='pln'><a href='#n23'>23</a></p> -<p id='n24' class='pln'><a href='#n24'>24</a></p> -<p id='n25' class='pln'><a href='#n25'>25</a></p> -<p id='n26' class='pln'><a href='#n26'>26</a></p> -<p id='n27' class='stm run hide_run'><a href='#n27'>27</a></p> -<p id='n28' class='pln'><a href='#n28'>28</a></p> -<p id='n29' class='stm run hide_run'><a href='#n29'>29</a></p> -<p id='n30' class='stm run hide_run'><a href='#n30'>30</a></p> -<p id='n31' class='stm run hide_run'><a href='#n31'>31</a></p> -<p id='n32' class='stm run hide_run'><a href='#n32'>32</a></p> -<p id='n33' class='stm run hide_run'><a href='#n33'>33</a></p> -<p id='n34' class='stm run hide_run'><a href='#n34'>34</a></p> -<p id='n35' class='stm run hide_run'><a href='#n35'>35</a></p> -<p id='n36' class='stm run hide_run'><a href='#n36'>36</a></p> -<p id='n37' class='stm run hide_run'><a href='#n37'>37</a></p> -<p id='n38' class='stm run hide_run'><a href='#n38'>38</a></p> -<p id='n39' class='pln'><a href='#n39'>39</a></p> -<p id='n40' class='stm run hide_run'><a href='#n40'>40</a></p> -<p id='n41' class='stm run hide_run'><a href='#n41'>41</a></p> -<p id='n42' class='stm run hide_run'><a href='#n42'>42</a></p> -<p id='n43' class='stm run hide_run'><a href='#n43'>43</a></p> -<p id='n44' class='stm run hide_run'><a href='#n44'>44</a></p> -<p id='n45' class='stm run hide_run'><a href='#n45'>45</a></p> -<p id='n46' class='pln'><a href='#n46'>46</a></p> -<p id='n47' class='stm run hide_run'><a href='#n47'>47</a></p> -<p id='n48' class='stm mis'><a href='#n48'>48</a></p> -<p id='n49' class='stm mis'><a href='#n49'>49</a></p> -<p id='n50' class='stm mis'><a href='#n50'>50</a></p> -<p id='n51' class='stm mis'><a href='#n51'>51</a></p> -<p id='n52' class='stm mis'><a href='#n52'>52</a></p> -<p id='n53' class='stm mis'><a href='#n53'>53</a></p> -<p id='n54' class='stm mis'><a href='#n54'>54</a></p> -<p id='n55' class='stm mis'><a href='#n55'>55</a></p> -<p id='n56' class='stm mis'><a href='#n56'>56</a></p> -<p id='n57' class='pln'><a href='#n57'>57</a></p> -<p id='n58' class='stm mis'><a href='#n58'>58</a></p> -<p id='n59' class='stm mis'><a href='#n59'>59</a></p> -<p id='n60' class='pln'><a href='#n60'>60</a></p> -<p id='n61' class='stm mis'><a href='#n61'>61</a></p> -<p id='n62' class='pln'><a href='#n62'>62</a></p> -<p id='n63' class='pln'><a href='#n63'>63</a></p> -<p id='n64' class='stm mis'><a href='#n64'>64</a></p> -<p id='n65' class='pln'><a href='#n65'>65</a></p> -<p id='n66' class='stm mis'><a href='#n66'>66</a></p> -<p id='n67' class='stm mis'><a href='#n67'>67</a></p> -<p id='n68' class='stm mis'><a href='#n68'>68</a></p> -<p id='n69' class='stm mis'><a href='#n69'>69</a></p> -<p id='n70' class='stm mis'><a href='#n70'>70</a></p> -<p id='n71' class='stm mis'><a href='#n71'>71</a></p> -<p id='n72' class='pln'><a href='#n72'>72</a></p> -<p id='n73' class='stm mis'><a href='#n73'>73</a></p> -<p id='n74' class='pln'><a href='#n74'>74</a></p> -<p id='n75' class='stm mis'><a href='#n75'>75</a></p> -<p id='n76' class='pln'><a href='#n76'>76</a></p> -<p id='n77' class='stm mis'><a href='#n77'>77</a></p> -<p id='n78' class='stm mis'><a href='#n78'>78</a></p> -<p id='n79' class='stm mis'><a href='#n79'>79</a></p> -<p id='n80' class='stm mis'><a href='#n80'>80</a></p> -<p id='n81' class='pln'><a href='#n81'>81</a></p> -<p id='n82' class='stm mis'><a href='#n82'>82</a></p> -<p id='n83' class='stm mis'><a href='#n83'>83</a></p> -<p id='n84' class='stm mis'><a href='#n84'>84</a></p> -<p id='n85' class='stm mis'><a href='#n85'>85</a></p> -<p id='n86' class='stm mis'><a href='#n86'>86</a></p> -<p id='n87' class='stm mis'><a href='#n87'>87</a></p> -<p id='n88' class='stm mis'><a href='#n88'>88</a></p> -<p id='n89' class='pln'><a href='#n89'>89</a></p> -<p id='n90' class='stm mis'><a href='#n90'>90</a></p> -<p id='n91' class='stm mis'><a href='#n91'>91</a></p> -<p id='n92' class='pln'><a href='#n92'>92</a></p> -<p id='n93' class='pln'><a href='#n93'>93</a></p> -<p id='n94' class='stm mis'><a href='#n94'>94</a></p> -<p id='n95' class='stm mis'><a href='#n95'>95</a></p> -<p id='n96' class='pln'><a href='#n96'>96</a></p> -<p id='n97' class='stm mis'><a href='#n97'>97</a></p> -<p id='n98' class='stm mis'><a href='#n98'>98</a></p> -<p id='n99' class='pln'><a href='#n99'>99</a></p> -<p id='n100' class='stm mis'><a href='#n100'>100</a></p> -<p id='n101' class='pln'><a href='#n101'>101</a></p> -<p id='n102' class='pln'><a href='#n102'>102</a></p> -<p id='n103' class='pln'><a href='#n103'>103</a></p> -<p id='n104' class='pln'><a href='#n104'>104</a></p> -<p id='n105' class='pln'><a href='#n105'>105</a></p> -<p id='n106' class='pln'><a href='#n106'>106</a></p> -<p id='n107' class='stm mis'><a href='#n107'>107</a></p> -<p id='n108' class='pln'><a href='#n108'>108</a></p> -<p id='n109' class='pln'><a href='#n109'>109</a></p> -<p id='n110' class='stm mis'><a href='#n110'>110</a></p> -<p id='n111' class='stm mis'><a href='#n111'>111</a></p> -<p id='n112' class='stm mis'><a href='#n112'>112</a></p> -<p id='n113' class='stm mis'><a href='#n113'>113</a></p> -<p id='n114' class='stm mis'><a href='#n114'>114</a></p> -<p id='n115' class='stm mis'><a href='#n115'>115</a></p> -<p id='n116' class='stm mis'><a href='#n116'>116</a></p> -<p id='n117' class='pln'><a href='#n117'>117</a></p> -<p id='n118' class='stm mis'><a href='#n118'>118</a></p> -<p id='n119' class='pln'><a href='#n119'>119</a></p> -<p id='n120' class='stm mis'><a href='#n120'>120</a></p> -<p id='n121' class='pln'><a href='#n121'>121</a></p> -<p id='n122' class='stm mis'><a href='#n122'>122</a></p> -<p id='n123' class='pln'><a href='#n123'>123</a></p> -<p id='n124' class='stm mis'><a href='#n124'>124</a></p> -<p id='n125' class='pln'><a href='#n125'>125</a></p> -<p id='n126' class='stm mis'><a href='#n126'>126</a></p> -<p id='n127' class='pln'><a href='#n127'>127</a></p> -<p id='n128' class='stm mis'><a href='#n128'>128</a></p> -<p id='n129' class='pln'><a href='#n129'>129</a></p> -<p id='n130' class='stm mis'><a href='#n130'>130</a></p> -<p id='n131' class='pln'><a href='#n131'>131</a></p> -<p id='n132' class='stm mis'><a href='#n132'>132</a></p> -<p id='n133' class='pln'><a href='#n133'>133</a></p> -<p id='n134' class='pln'><a href='#n134'>134</a></p> -<p id='n135' class='stm mis'><a href='#n135'>135</a></p> -<p id='n136' class='pln'><a href='#n136'>136</a></p> -<p id='n137' class='pln'><a href='#n137'>137</a></p> -<p id='n138' class='stm mis'><a href='#n138'>138</a></p> -<p id='n139' class='pln'><a href='#n139'>139</a></p> -<p id='n140' class='stm mis'><a href='#n140'>140</a></p> -<p id='n141' class='pln'><a href='#n141'>141</a></p> -<p id='n142' class='pln'><a href='#n142'>142</a></p> -<p id='n143' class='stm mis'><a href='#n143'>143</a></p> -<p id='n144' class='pln'><a href='#n144'>144</a></p> -<p id='n145' class='stm mis'><a href='#n145'>145</a></p> -<p id='n146' class='pln'><a href='#n146'>146</a></p> -<p id='n147' class='stm mis'><a href='#n147'>147</a></p> -<p id='n148' class='pln'><a href='#n148'>148</a></p> -<p id='n149' class='stm mis'><a href='#n149'>149</a></p> -<p id='n150' class='stm mis'><a href='#n150'>150</a></p> -<p id='n151' class='stm mis'><a href='#n151'>151</a></p> -<p id='n152' class='pln'><a href='#n152'>152</a></p> -<p id='n153' class='stm mis'><a href='#n153'>153</a></p> -<p id='n154' class='pln'><a href='#n154'>154</a></p> -<p id='n155' class='stm mis'><a href='#n155'>155</a></p> -<p id='n156' class='pln'><a href='#n156'>156</a></p> -<p id='n157' class='stm mis'><a href='#n157'>157</a></p> -<p id='n158' class='pln'><a href='#n158'>158</a></p> -<p id='n159' class='pln'><a href='#n159'>159</a></p> -<p id='n160' class='pln'><a href='#n160'>160</a></p> -<p id='n161' class='stm mis'><a href='#n161'>161</a></p> -<p id='n162' class='pln'><a href='#n162'>162</a></p> -<p id='n163' class='stm mis'><a href='#n163'>163</a></p> -<p id='n164' class='pln'><a href='#n164'>164</a></p> -<p id='n165' class='stm mis'><a href='#n165'>165</a></p> -<p id='n166' class='pln'><a href='#n166'>166</a></p> -<p id='n167' class='stm mis'><a href='#n167'>167</a></p> -<p id='n168' class='pln'><a href='#n168'>168</a></p> -<p id='n169' class='stm mis'><a href='#n169'>169</a></p> -<p id='n170' class='pln'><a href='#n170'>170</a></p> -<p id='n171' class='stm mis'><a href='#n171'>171</a></p> -<p id='n172' class='pln'><a href='#n172'>172</a></p> -<p id='n173' class='pln'><a href='#n173'>173</a></p> -<p id='n174' class='stm mis'><a href='#n174'>174</a></p> -<p id='n175' class='pln'><a href='#n175'>175</a></p> -<p id='n176' class='pln'><a href='#n176'>176</a></p> -<p id='n177' class='pln'><a href='#n177'>177</a></p> -<p id='n178' class='pln'><a href='#n178'>178</a></p> -<p id='n179' class='stm mis'><a href='#n179'>179</a></p> -<p id='n180' class='pln'><a href='#n180'>180</a></p> -<p id='n181' class='stm mis'><a href='#n181'>181</a></p> -<p id='n182' class='pln'><a href='#n182'>182</a></p> -<p id='n183' class='stm mis'><a href='#n183'>183</a></p> -<p id='n184' class='pln'><a href='#n184'>184</a></p> -<p id='n185' class='stm mis'><a href='#n185'>185</a></p> -<p id='n186' class='pln'><a href='#n186'>186</a></p> -<p id='n187' class='stm mis'><a href='#n187'>187</a></p> -<p id='n188' class='pln'><a href='#n188'>188</a></p> -<p id='n189' class='stm mis'><a href='#n189'>189</a></p> -<p id='n190' class='pln'><a href='#n190'>190</a></p> -<p id='n191' class='pln'><a href='#n191'>191</a></p> -<p id='n192' class='stm mis'><a href='#n192'>192</a></p> -<p id='n193' class='pln'><a href='#n193'>193</a></p> -<p id='n194' class='pln'><a href='#n194'>194</a></p> -<p id='n195' class='stm mis'><a href='#n195'>195</a></p> -<p id='n196' class='pln'><a href='#n196'>196</a></p> -<p id='n197' class='pln'><a href='#n197'>197</a></p> -<p id='n198' class='stm mis'><a href='#n198'>198</a></p> -<p id='n199' class='pln'><a href='#n199'>199</a></p> -<p id='n200' class='pln'><a href='#n200'>200</a></p> -<p id='n201' class='stm mis'><a href='#n201'>201</a></p> -<p id='n202' class='pln'><a href='#n202'>202</a></p> -<p id='n203' class='stm mis'><a href='#n203'>203</a></p> -<p id='n204' class='pln'><a href='#n204'>204</a></p> -<p id='n205' class='pln'><a href='#n205'>205</a></p> -<p id='n206' class='stm mis'><a href='#n206'>206</a></p> -<p id='n207' class='pln'><a href='#n207'>207</a></p> -<p id='n208' class='pln'><a href='#n208'>208</a></p> -<p id='n209' class='pln'><a href='#n209'>209</a></p> -<p id='n210' class='stm mis'><a href='#n210'>210</a></p> -<p id='n211' class='pln'><a href='#n211'>211</a></p> -<p id='n212' class='stm mis'><a href='#n212'>212</a></p> -<p id='n213' class='pln'><a href='#n213'>213</a></p> -<p id='n214' class='stm mis'><a href='#n214'>214</a></p> -<p id='n215' class='pln'><a href='#n215'>215</a></p> -<p id='n216' class='stm mis'><a href='#n216'>216</a></p> -<p id='n217' class='pln'><a href='#n217'>217</a></p> -<p id='n218' class='pln'><a href='#n218'>218</a></p> -<p id='n219' class='stm mis'><a href='#n219'>219</a></p> -<p id='n220' class='pln'><a href='#n220'>220</a></p> -<p id='n221' class='stm mis'><a href='#n221'>221</a></p> -<p id='n222' class='pln'><a href='#n222'>222</a></p> -<p id='n223' class='pln'><a href='#n223'>223</a></p> -<p id='n224' class='stm mis'><a href='#n224'>224</a></p> -<p id='n225' class='pln'><a href='#n225'>225</a></p> -<p id='n226' class='stm mis'><a href='#n226'>226</a></p> -<p id='n227' class='pln'><a href='#n227'>227</a></p> -<p id='n228' class='stm mis'><a href='#n228'>228</a></p> -<p id='n229' class='pln'><a href='#n229'>229</a></p> -<p id='n230' class='stm mis'><a href='#n230'>230</a></p> -<p id='n231' class='pln'><a href='#n231'>231</a></p> -<p id='n232' class='pln'><a href='#n232'>232</a></p> -<p id='n233' class='stm mis'><a href='#n233'>233</a></p> -<p id='n234' class='pln'><a href='#n234'>234</a></p> -<p id='n235' class='stm mis'><a href='#n235'>235</a></p> -<p id='n236' class='pln'><a href='#n236'>236</a></p> -<p id='n237' class='stm mis'><a href='#n237'>237</a></p> -<p id='n238' class='pln'><a href='#n238'>238</a></p> -<p id='n239' class='pln'><a href='#n239'>239</a></p> -<p id='n240' class='stm mis'><a href='#n240'>240</a></p> -<p id='n241' class='pln'><a href='#n241'>241</a></p> -<p id='n242' class='pln'><a href='#n242'>242</a></p> -<p id='n243' class='stm mis'><a href='#n243'>243</a></p> -<p id='n244' class='pln'><a href='#n244'>244</a></p> -<p id='n245' class='pln'><a href='#n245'>245</a></p> -<p id='n246' class='pln'><a href='#n246'>246</a></p> -<p id='n247' class='pln'><a href='#n247'>247</a></p> -<p id='n248' class='stm mis'><a href='#n248'>248</a></p> -<p id='n249' class='pln'><a href='#n249'>249</a></p> -<p id='n250' class='stm mis'><a href='#n250'>250</a></p> -<p id='n251' class='pln'><a href='#n251'>251</a></p> -<p id='n252' class='stm mis'><a href='#n252'>252</a></p> -<p id='n253' class='pln'><a href='#n253'>253</a></p> -<p id='n254' class='stm mis'><a href='#n254'>254</a></p> -<p id='n255' class='pln'><a href='#n255'>255</a></p> -<p id='n256' class='stm mis'><a href='#n256'>256</a></p> -<p id='n257' class='pln'><a href='#n257'>257</a></p> -<p id='n258' class='pln'><a href='#n258'>258</a></p> -<p id='n259' class='pln'><a href='#n259'>259</a></p> -<p id='n260' class='stm mis'><a href='#n260'>260</a></p> -<p id='n261' class='stm mis'><a href='#n261'>261</a></p> -<p id='n262' class='stm mis'><a href='#n262'>262</a></p> -<p id='n263' class='stm mis'><a href='#n263'>263</a></p> -<p id='n264' class='stm mis'><a href='#n264'>264</a></p> -<p id='n265' class='stm mis'><a href='#n265'>265</a></p> -<p id='n266' class='stm mis'><a href='#n266'>266</a></p> -<p id='n267' class='pln'><a href='#n267'>267</a></p> -<p id='n268' class='stm mis'><a href='#n268'>268</a></p> -<p id='n269' class='stm mis'><a href='#n269'>269</a></p> -<p id='n270' class='stm mis'><a href='#n270'>270</a></p> -<p id='n271' class='pln'><a href='#n271'>271</a></p> -<p id='n272' class='stm mis'><a href='#n272'>272</a></p> -<p id='n273' class='stm mis'><a href='#n273'>273</a></p> -<p id='n274' class='stm mis'><a href='#n274'>274</a></p> -<p id='n275' class='pln'><a href='#n275'>275</a></p> -<p id='n276' class='stm mis'><a href='#n276'>276</a></p> -<p id='n277' class='pln'><a href='#n277'>277</a></p> -<p id='n278' class='stm run hide_run'><a href='#n278'>278</a></p> -<p id='n279' class='stm mis'><a href='#n279'>279</a></p> -<p id='n280' class='pln'><a href='#n280'>280</a></p> -<p id='n281' class='pln'><a href='#n281'>281</a></p> -<p id='n282' class='stm mis'><a href='#n282'>282</a></p> -<p id='n283' class='stm mis'><a href='#n283'>283</a></p> -<p id='n284' class='pln'><a href='#n284'>284</a></p> -<p id='n285' class='stm mis'><a href='#n285'>285</a></p> -<p id='n286' class='stm mis'><a href='#n286'>286</a></p> -<p id='n287' class='stm mis'><a href='#n287'>287</a></p> -<p id='n288' class='stm mis'><a href='#n288'>288</a></p> -<p id='n289' class='stm mis'><a href='#n289'>289</a></p> -<p id='n290' class='stm mis'><a href='#n290'>290</a></p> -<p id='n291' class='pln'><a href='#n291'>291</a></p> -<p id='n292' class='stm mis'><a href='#n292'>292</a></p> -<p id='n293' class='stm mis'><a href='#n293'>293</a></p> -<p id='n294' class='pln'><a href='#n294'>294</a></p> -<p id='n295' class='pln'><a href='#n295'>295</a></p> -<p id='n296' class='stm mis'><a href='#n296'>296</a></p> -<p id='n297' class='stm mis'><a href='#n297'>297</a></p> -<p id='n298' class='stm mis'><a href='#n298'>298</a></p> -<p id='n299' class='pln'><a href='#n299'>299</a></p> -<p id='n300' class='pln'><a href='#n300'>300</a></p> -<p id='n301' class='stm mis'><a href='#n301'>301</a></p> -<p id='n302' class='stm mis'><a href='#n302'>302</a></p> -<p id='n303' class='stm mis'><a href='#n303'>303</a></p> -<p id='n304' class='stm mis'><a href='#n304'>304</a></p> -<p id='n305' class='stm mis'><a href='#n305'>305</a></p> -<p id='n306' class='pln'><a href='#n306'>306</a></p> -<p id='n307' class='stm mis'><a href='#n307'>307</a></p> -<p id='n308' class='stm mis'><a href='#n308'>308</a></p> -<p id='n309' class='stm mis'><a href='#n309'>309</a></p> -<p id='n310' class='stm mis'><a href='#n310'>310</a></p> -<p id='n311' class='stm mis'><a href='#n311'>311</a></p> -<p id='n312' class='stm mis'><a href='#n312'>312</a></p> -<p id='n313' class='stm mis'><a href='#n313'>313</a></p> -<p id='n314' class='stm mis'><a href='#n314'>314</a></p> -<p id='n315' class='pln'><a href='#n315'>315</a></p> -<p id='n316' class='pln'><a href='#n316'>316</a></p> -<p id='n317' class='stm mis'><a href='#n317'>317</a></p> -<p id='n318' class='stm mis'><a href='#n318'>318</a></p> -<p id='n319' class='stm mis'><a href='#n319'>319</a></p> -<p id='n320' class='stm mis'><a href='#n320'>320</a></p> -<p id='n321' class='stm mis'><a href='#n321'>321</a></p> -<p id='n322' class='pln'><a href='#n322'>322</a></p> -<p id='n323' class='stm mis'><a href='#n323'>323</a></p> -<p id='n324' class='pln'><a href='#n324'>324</a></p> -<p id='n325' class='stm mis'><a href='#n325'>325</a></p> -<p id='n326' class='stm mis'><a href='#n326'>326</a></p> -<p id='n327' class='stm mis'><a href='#n327'>327</a></p> -<p id='n328' class='stm mis'><a href='#n328'>328</a></p> -<p id='n329' class='stm mis'><a href='#n329'>329</a></p> -<p id='n330' class='stm mis'><a href='#n330'>330</a></p> -<p id='n331' class='stm mis'><a href='#n331'>331</a></p> -<p id='n332' class='stm mis'><a href='#n332'>332</a></p> -<p id='n333' class='pln'><a href='#n333'>333</a></p> -<p id='n334' class='pln'><a href='#n334'>334</a></p> -<p id='n335' class='stm mis'><a href='#n335'>335</a></p> -<p id='n336' class='stm mis'><a href='#n336'>336</a></p> -<p id='n337' class='stm mis'><a href='#n337'>337</a></p> -<p id='n338' class='stm mis'><a href='#n338'>338</a></p> -<p id='n339' class='stm mis'><a href='#n339'>339</a></p> -<p id='n340' class='stm mis'><a href='#n340'>340</a></p> -<p id='n341' class='stm mis'><a href='#n341'>341</a></p> -<p id='n342' class='stm mis'><a href='#n342'>342</a></p> -<p id='n343' class='stm mis'><a href='#n343'>343</a></p> -<p id='n344' class='stm mis'><a href='#n344'>344</a></p> -<p id='n345' class='stm mis'><a href='#n345'>345</a></p> -<p id='n346' class='stm mis'><a href='#n346'>346</a></p> -<p id='n347' class='stm mis'><a href='#n347'>347</a></p> -<p id='n348' class='stm mis'><a href='#n348'>348</a></p> -<p id='n349' class='stm mis'><a href='#n349'>349</a></p> -<p id='n350' class='stm mis'><a href='#n350'>350</a></p> -<p id='n351' class='stm mis'><a href='#n351'>351</a></p> -<p id='n352' class='stm mis'><a href='#n352'>352</a></p> -<p id='n353' class='stm mis'><a href='#n353'>353</a></p> -<p id='n354' class='stm mis'><a href='#n354'>354</a></p> -<p id='n355' class='stm mis'><a href='#n355'>355</a></p> -<p id='n356' class='stm mis'><a href='#n356'>356</a></p> -<p id='n357' class='stm mis'><a href='#n357'>357</a></p> -<p id='n358' class='stm mis'><a href='#n358'>358</a></p> -<p id='n359' class='stm mis'><a href='#n359'>359</a></p> -<p id='n360' class='stm mis'><a href='#n360'>360</a></p> -<p id='n361' class='stm mis'><a href='#n361'>361</a></p> -<p id='n362' class='stm mis'><a href='#n362'>362</a></p> -<p id='n363' class='stm mis'><a href='#n363'>363</a></p> -<p id='n364' class='stm mis'><a href='#n364'>364</a></p> -<p id='n365' class='stm mis'><a href='#n365'>365</a></p> -<p id='n366' class='stm mis'><a href='#n366'>366</a></p> -<p id='n367' class='stm mis'><a href='#n367'>367</a></p> -<p id='n368' class='stm mis'><a href='#n368'>368</a></p> -<p id='n369' class='stm mis'><a href='#n369'>369</a></p> -<p id='n370' class='stm mis'><a href='#n370'>370</a></p> -<p id='n371' class='stm mis'><a href='#n371'>371</a></p> -<p id='n372' class='stm mis'><a href='#n372'>372</a></p> -<p id='n373' class='stm mis'><a href='#n373'>373</a></p> -<p id='n374' class='stm mis'><a href='#n374'>374</a></p> -<p id='n375' class='stm mis'><a href='#n375'>375</a></p> -<p id='n376' class='stm mis'><a href='#n376'>376</a></p> -<p id='n377' class='stm mis'><a href='#n377'>377</a></p> -<p id='n378' class='stm mis'><a href='#n378'>378</a></p> -<p id='n379' class='pln'><a href='#n379'>379</a></p> -<p id='n380' class='stm mis'><a href='#n380'>380</a></p> -<p id='n381' class='pln'><a href='#n381'>381</a></p> -<p id='n382' class='stm mis'><a href='#n382'>382</a></p> -<p id='n383' class='stm mis'><a href='#n383'>383</a></p> -<p id='n384' class='stm mis'><a href='#n384'>384</a></p> -<p id='n385' class='pln'><a href='#n385'>385</a></p> -<p id='n386' class='pln'><a href='#n386'>386</a></p> -<p id='n387' class='pln'><a href='#n387'>387</a></p> -<p id='n388' class='pln'><a href='#n388'>388</a></p> -<p id='n389' class='pln'><a href='#n389'>389</a></p> -<p id='n390' class='pln'><a href='#n390'>390</a></p> -<p id='n391' class='pln'><a href='#n391'>391</a></p> -<p id='n392' class='pln'><a href='#n392'>392</a></p> -<p id='n393' class='stm mis'><a href='#n393'>393</a></p> -<p id='n394' class='pln'><a href='#n394'>394</a></p> -<p id='n395' class='pln'><a href='#n395'>395</a></p> -<p id='n396' class='pln'><a href='#n396'>396</a></p> -<p id='n397' class='pln'><a href='#n397'>397</a></p> -<p id='n398' class='pln'><a href='#n398'>398</a></p> -<p id='n399' class='pln'><a href='#n399'>399</a></p> -<p id='n400' class='pln'><a href='#n400'>400</a></p> -<p id='n401' class='pln'><a href='#n401'>401</a></p> -<p id='n402' class='pln'><a href='#n402'>402</a></p> -<p id='n403' class='pln'><a href='#n403'>403</a></p> -<p id='n404' class='pln'><a href='#n404'>404</a></p> -<p id='n405' class='pln'><a href='#n405'>405</a></p> -<p id='n406' class='pln'><a href='#n406'>406</a></p> -<p id='n407' class='pln'><a href='#n407'>407</a></p> -<p id='n408' class='pln'><a href='#n408'>408</a></p> -<p id='n409' class='pln'><a href='#n409'>409</a></p> -<p id='n410' class='pln'><a href='#n410'>410</a></p> -<p id='n411' class='pln'><a href='#n411'>411</a></p> -<p id='n412' class='pln'><a href='#n412'>412</a></p> -<p id='n413' class='pln'><a href='#n413'>413</a></p> -<p id='n414' class='pln'><a href='#n414'>414</a></p> -<p id='n415' class='pln'><a href='#n415'>415</a></p> -<p id='n416' class='pln'><a href='#n416'>416</a></p> -<p id='n417' class='pln'><a href='#n417'>417</a></p> -<p id='n418' class='pln'><a href='#n418'>418</a></p> -<p id='n419' class='pln'><a href='#n419'>419</a></p> -<p id='n420' class='pln'><a href='#n420'>420</a></p> -<p id='n421' class='pln'><a href='#n421'>421</a></p> -<p id='n422' class='pln'><a href='#n422'>422</a></p> -<p id='n423' class='pln'><a href='#n423'>423</a></p> -<p id='n424' class='pln'><a href='#n424'>424</a></p> -<p id='n425' class='pln'><a href='#n425'>425</a></p> -<p id='n426' class='pln'><a href='#n426'>426</a></p> -<p id='n427' class='pln'><a href='#n427'>427</a></p> -<p id='n428' class='pln'><a href='#n428'>428</a></p> -<p id='n429' class='pln'><a href='#n429'>429</a></p> -<p id='n430' class='pln'><a href='#n430'>430</a></p> -<p id='n431' class='pln'><a href='#n431'>431</a></p> -<p id='n432' class='pln'><a href='#n432'>432</a></p> -<p id='n433' class='pln'><a href='#n433'>433</a></p> -<p id='n434' class='pln'><a href='#n434'>434</a></p> -<p id='n435' class='pln'><a href='#n435'>435</a></p> -<p id='n436' class='pln'><a href='#n436'>436</a></p> -<p id='n437' class='stm mis'><a href='#n437'>437</a></p> -<p id='n438' class='stm mis'><a href='#n438'>438</a></p> -<p id='n439' class='stm mis'><a href='#n439'>439</a></p> -<p id='n440' class='stm mis'><a href='#n440'>440</a></p> -<p id='n441' class='pln'><a href='#n441'>441</a></p> -<p id='n442' class='stm mis'><a href='#n442'>442</a></p> -<p id='n443' class='stm mis'><a href='#n443'>443</a></p> -<p id='n444' class='stm mis'><a href='#n444'>444</a></p> -<p id='n445' class='stm mis'><a href='#n445'>445</a></p> -<p id='n446' class='stm mis'><a href='#n446'>446</a></p> -<p id='n447' class='stm mis'><a href='#n447'>447</a></p> -<p id='n448' class='stm mis'><a href='#n448'>448</a></p> -<p id='n449' class='stm mis'><a href='#n449'>449</a></p> -<p id='n450' class='pln'><a href='#n450'>450</a></p> -<p id='n451' class='stm mis'><a href='#n451'>451</a></p> -<p id='n452' class='stm mis'><a href='#n452'>452</a></p> -<p id='n453' class='pln'><a href='#n453'>453</a></p> -<p id='n454' class='pln'><a href='#n454'>454</a></p> -<p id='n455' class='stm mis'><a href='#n455'>455</a></p> -<p id='n456' class='stm mis'><a href='#n456'>456</a></p> -<p id='n457' class='pln'><a href='#n457'>457</a></p> -<p id='n458' class='pln'><a href='#n458'>458</a></p> -<p id='n459' class='stm mis'><a href='#n459'>459</a></p> -<p id='n460' class='stm mis'><a href='#n460'>460</a></p> -<p id='n461' class='pln'><a href='#n461'>461</a></p> -<p id='n462' class='pln'><a href='#n462'>462</a></p> -<p id='n463' class='stm mis'><a href='#n463'>463</a></p> -<p id='n464' class='stm mis'><a href='#n464'>464</a></p> -<p id='n465' class='stm mis'><a href='#n465'>465</a></p> -<p id='n466' class='pln'><a href='#n466'>466</a></p> -<p id='n467' class='stm mis'><a href='#n467'>467</a></p> -<p id='n468' class='pln'><a href='#n468'>468</a></p> -<p id='n469' class='stm mis'><a href='#n469'>469</a></p> -<p id='n470' class='stm mis'><a href='#n470'>470</a></p> -<p id='n471' class='stm mis'><a href='#n471'>471</a></p> -<p id='n472' class='stm mis'><a href='#n472'>472</a></p> -<p id='n473' class='stm mis'><a href='#n473'>473</a></p> -<p id='n474' class='pln'><a href='#n474'>474</a></p> -<p id='n475' class='pln'><a href='#n475'>475</a></p> -<p id='n476' class='stm mis'><a href='#n476'>476</a></p> -<p id='n477' class='stm mis'><a href='#n477'>477</a></p> -<p id='n478' class='stm mis'><a href='#n478'>478</a></p> -<p id='n479' class='stm mis'><a href='#n479'>479</a></p> -<p id='n480' class='stm mis'><a href='#n480'>480</a></p> -<p id='n481' class='pln'><a href='#n481'>481</a></p> -<p id='n482' class='stm mis'><a href='#n482'>482</a></p> -<p id='n483' class='pln'><a href='#n483'>483</a></p> -<p id='n484' class='stm run hide_run'><a href='#n484'>484</a></p> -<p id='n485' class='stm mis'><a href='#n485'>485</a></p> -<p id='n486' class='stm mis'><a href='#n486'>486</a></p> -<p id='n487' class='stm mis'><a href='#n487'>487</a></p> -<p id='n488' class='stm mis'><a href='#n488'>488</a></p> -<p id='n489' class='stm mis'><a href='#n489'>489</a></p> -<p id='n490' class='stm mis'><a href='#n490'>490</a></p> -<p id='n491' class='stm mis'><a href='#n491'>491</a></p> -<p id='n492' class='stm mis'><a href='#n492'>492</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='pln'><span class='com'>#!/usr/bin/env python</span><span class='strut'> </span></p> -<p id='t2' class='pln'><span class='com'># -*- coding: utf-8 -*-</span><span class='strut'> </span></p> -<p id='t3' class='pln'><span class='strut'> </span></p> -<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>with_statement</span><span class='strut'> </span></p> -<p id='t5' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>absolute_import</span><span class='strut'> </span></p> -<p id='t6' class='pln'><span class='strut'> </span></p> -<p id='t7' class='stm run hide_run'><span class='nam'>__authors__</span> <span class='op'>=</span> <span class='op'>(</span><span class='strut'> </span></p> -<p id='t8' class='pln'> <span class='str'>'Ricardo Garcia Gonzalez'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t9' class='pln'> <span class='str'>'Danny Colligan'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t10' class='pln'> <span class='str'>'Benjamin Johnson'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t11' class='pln'> <span class='str'>'Vasyl\' Vavrychuk'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t12' class='pln'> <span class='str'>'Witold Baryluk'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t13' class='pln'> <span class='str'>'Paweł Paprota'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t14' class='pln'> <span class='str'>'Gergely Imreh'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t15' class='pln'> <span class='str'>'Rogério Brito'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t16' class='pln'> <span class='str'>'Philipp Hagemeister'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t17' class='pln'> <span class='str'>'Sören Schulze'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t18' class='pln'> <span class='str'>'Kevin Ngo'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t19' class='pln'> <span class='str'>'Ori Avtalion'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t20' class='pln'> <span class='str'>'shizeeg'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t21' class='pln'> <span class='str'>'Filippo Valsorda'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t22' class='pln'> <span class='str'>'Christian Albrecht'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t23' class='pln'> <span class='str'>'Dave Vasilevsky'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t24' class='pln'> <span class='str'>'Jaime Marquínez Ferrándiz'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t25' class='pln'> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t26' class='pln'><span class='strut'> </span></p> -<p id='t27' class='stm run hide_run'><span class='nam'>__license__</span> <span class='op'>=</span> <span class='str'>'Public Domain'</span><span class='strut'> </span></p> -<p id='t28' class='pln'><span class='strut'> </span></p> -<p id='t29' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>getpass</span><span class='strut'> </span></p> -<p id='t30' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>optparse</span><span class='strut'> </span></p> -<p id='t31' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='strut'> </span></p> -<p id='t32' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>re</span><span class='strut'> </span></p> -<p id='t33' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>shlex</span><span class='strut'> </span></p> -<p id='t34' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>socket</span><span class='strut'> </span></p> -<p id='t35' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>subprocess</span><span class='strut'> </span></p> -<p id='t36' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>sys</span><span class='strut'> </span></p> -<p id='t37' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>warnings</span><span class='strut'> </span></p> -<p id='t38' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>platform</span><span class='strut'> </span></p> -<p id='t39' class='pln'><span class='strut'> </span></p> -<p id='t40' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>utils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t41' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>update</span> <span class='key'>import</span> <span class='nam'>update_self</span><span class='strut'> </span></p> -<p id='t42' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>version</span> <span class='key'>import</span> <span class='nam'>__version__</span><span class='strut'> </span></p> -<p id='t43' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>FileDownloader</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t44' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>InfoExtractors</span> <span class='key'>import</span> <span class='nam'>gen_extractors</span><span class='strut'> </span></p> -<p id='t45' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>PostProcessor</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t46' class='pln'><span class='strut'> </span></p> -<p id='t47' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>parseOpts</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t48' class='stm mis'> <span class='key'>def</span> <span class='nam'>_readOptions</span><span class='op'>(</span><span class='nam'>filename_bytes</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t49' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t50' class='stm mis'> <span class='nam'>optionf</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>filename_bytes</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t51' class='stm mis'> <span class='key'>except</span> <span class='nam'>IOError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t52' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>]</span> <span class='com'># silently skip if file is not present</span><span class='strut'> </span></p> -<p id='t53' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t54' class='stm mis'> <span class='nam'>res</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t55' class='stm mis'> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>optionf</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t56' class='stm mis'> <span class='nam'>res</span> <span class='op'>+=</span> <span class='nam'>shlex</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>comments</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t57' class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t58' class='stm mis'> <span class='nam'>optionf</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t59' class='stm mis'> <span class='key'>return</span> <span class='nam'>res</span><span class='strut'> </span></p> -<p id='t60' class='pln'><span class='strut'> </span></p> -<p id='t61' class='stm mis'> <span class='key'>def</span> <span class='nam'>_format_option_string</span><span class='op'>(</span><span class='nam'>option</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t62' class='pln'> <span class='str'>''' ('-o', '--option') -> -o, --format METAVAR'''</span><span class='strut'> </span></p> -<p id='t63' class='pln'><span class='strut'> </span></p> -<p id='t64' class='stm mis'> <span class='nam'>opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t65' class='pln'><span class='strut'> </span></p> -<p id='t66' class='stm mis'> <span class='key'>if</span> <span class='nam'>option</span><span class='op'>.</span><span class='nam'>_short_opts</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t67' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>option</span><span class='op'>.</span><span class='nam'>_short_opts</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t68' class='stm mis'> <span class='key'>if</span> <span class='nam'>option</span><span class='op'>.</span><span class='nam'>_long_opts</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t69' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>option</span><span class='op'>.</span><span class='nam'>_long_opts</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t70' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t71' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>insert</span><span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>', '</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t72' class='pln'><span class='strut'> </span></p> -<p id='t73' class='stm mis'> <span class='key'>if</span> <span class='nam'>option</span><span class='op'>.</span><span class='nam'>takes_value</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='str'>' %s'</span> <span class='op'>%</span> <span class='nam'>option</span><span class='op'>.</span><span class='nam'>metavar</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t74' class='pln'><span class='strut'> </span></p> -<p id='t75' class='stm mis'> <span class='key'>return</span> <span class='str'>""</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t76' class='pln'><span class='strut'> </span></p> -<p id='t77' class='stm mis'> <span class='key'>def</span> <span class='nam'>_find_term_columns</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t78' class='stm mis'> <span class='nam'>columns</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>environ</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'COLUMNS'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t79' class='stm mis'> <span class='key'>if</span> <span class='nam'>columns</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t80' class='stm mis'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>columns</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t81' class='pln'><span class='strut'> </span></p> -<p id='t82' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t83' class='stm mis'> <span class='nam'>sp</span> <span class='op'>=</span> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>Popen</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'stty'</span><span class='op'>,</span> <span class='str'>'size'</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t84' class='stm mis'> <span class='nam'>out</span><span class='op'>,</span><span class='nam'>err</span> <span class='op'>=</span> <span class='nam'>sp</span><span class='op'>.</span><span class='nam'>communicate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t85' class='stm mis'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>out</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t86' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t87' class='stm mis'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t88' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t89' class='pln'><span class='strut'> </span></p> -<p id='t90' class='stm mis'> <span class='nam'>max_width</span> <span class='op'>=</span> <span class='num'>80</span><span class='strut'> </span></p> -<p id='t91' class='stm mis'> <span class='nam'>max_help_position</span> <span class='op'>=</span> <span class='num'>80</span><span class='strut'> </span></p> -<p id='t92' class='pln'><span class='strut'> </span></p> -<p id='t93' class='pln'> <span class='com'># No need to wrap help messages if we're on a wide console</span><span class='strut'> </span></p> -<p id='t94' class='stm mis'> <span class='nam'>columns</span> <span class='op'>=</span> <span class='nam'>_find_term_columns</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t95' class='stm mis'> <span class='key'>if</span> <span class='nam'>columns</span><span class='op'>:</span> <span class='nam'>max_width</span> <span class='op'>=</span> <span class='nam'>columns</span><span class='strut'> </span></p> -<p id='t96' class='pln'><span class='strut'> </span></p> -<p id='t97' class='stm mis'> <span class='nam'>fmt</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>IndentedHelpFormatter</span><span class='op'>(</span><span class='nam'>width</span><span class='op'>=</span><span class='nam'>max_width</span><span class='op'>,</span> <span class='nam'>max_help_position</span><span class='op'>=</span><span class='nam'>max_help_position</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t98' class='stm mis'> <span class='nam'>fmt</span><span class='op'>.</span><span class='nam'>format_option_strings</span> <span class='op'>=</span> <span class='nam'>_format_option_string</span><span class='strut'> </span></p> -<p id='t99' class='pln'><span class='strut'> </span></p> -<p id='t100' class='stm mis'> <span class='nam'>kw</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t101' class='pln'> <span class='str'>'version'</span> <span class='op'>:</span> <span class='nam'>__version__</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t102' class='pln'> <span class='str'>'formatter'</span> <span class='op'>:</span> <span class='nam'>fmt</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t103' class='pln'> <span class='str'>'usage'</span> <span class='op'>:</span> <span class='str'>'%prog [options] url [url...]'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t104' class='pln'> <span class='str'>'conflict_handler'</span> <span class='op'>:</span> <span class='str'>'resolve'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t105' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t106' class='pln'><span class='strut'> </span></p> -<p id='t107' class='stm mis'> <span class='nam'>parser</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionParser</span><span class='op'>(</span><span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t108' class='pln'><span class='strut'> </span></p> -<p id='t109' class='pln'> <span class='com'># option groups</span><span class='strut'> </span></p> -<p id='t110' class='stm mis'> <span class='nam'>general</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'General Options'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t111' class='stm mis'> <span class='nam'>selection</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'Video Selection'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t112' class='stm mis'> <span class='nam'>authentication</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'Authentication Options'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t113' class='stm mis'> <span class='nam'>video_format</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'Video Format Options'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t114' class='stm mis'> <span class='nam'>postproc</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'Post-processing Options'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t115' class='stm mis'> <span class='nam'>filesystem</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'Filesystem Options'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t116' class='stm mis'> <span class='nam'>verbosity</span> <span class='op'>=</span> <span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>OptionGroup</span><span class='op'>(</span><span class='nam'>parser</span><span class='op'>,</span> <span class='str'>'Verbosity / Simulation Options'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t117' class='pln'><span class='strut'> </span></p> -<p id='t118' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-h'</span><span class='op'>,</span> <span class='str'>'--help'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t119' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'help'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'print this help text and exit'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t120' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-v'</span><span class='op'>,</span> <span class='str'>'--version'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t121' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'version'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'print program version and exit'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t122' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-U'</span><span class='op'>,</span> <span class='str'>'--update'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t123' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'update_self'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'update this program to latest version'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t124' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-i'</span><span class='op'>,</span> <span class='str'>'--ignore-errors'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t125' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'ignoreerrors'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'continue on download errors'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t126' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'--rate-limit'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t127' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'ratelimit'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'LIMIT'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'download rate limit (e.g. 50k or 44.6m)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t128' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-R'</span><span class='op'>,</span> <span class='str'>'--retries'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t129' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'retries'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'RETRIES'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'number of retries (default is %default)'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='num'>10</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t130' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--buffer-size'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t131' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'buffersize'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'SIZE'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'size of download buffer (e.g. 1024 or 16k) (default is %default)'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='str'>"1024"</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t132' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--no-resize-buffer'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t133' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'noresizebuffer'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t134' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not automatically adjust the buffer size. By default, the buffer size is automatically resized from an initial value of SIZE.'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t135' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--dump-user-agent'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t136' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'dump_user_agent'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t137' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'display the current browser identification'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t138' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--user-agent'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t139' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'user_agent'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'specify a custom user agent'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'UA'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t140' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--list-extractors'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t141' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'list_extractors'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t142' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'List all supported extractors and the URLs they would handle'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t143' class='stm mis'> <span class='nam'>general</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--test'</span><span class='op'>,</span> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'test'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='nam'>optparse</span><span class='op'>.</span><span class='nam'>SUPPRESS_HELP</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t144' class='pln'><span class='strut'> </span></p> -<p id='t145' class='stm mis'> <span class='nam'>selection</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--playlist-start'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t146' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'playliststart'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'NUMBER'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'playlist video to start at (default is %default)'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t147' class='stm mis'> <span class='nam'>selection</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--playlist-end'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t148' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'playlistend'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'NUMBER'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'playlist video to end at (default is last)'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t149' class='stm mis'> <span class='nam'>selection</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--match-title'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'matchtitle'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'REGEX'</span><span class='op'>,</span><span class='nam'>help</span><span class='op'>=</span><span class='str'>'download only matching titles (regex or caseless sub-string)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t150' class='stm mis'> <span class='nam'>selection</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--reject-title'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'rejecttitle'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'REGEX'</span><span class='op'>,</span><span class='nam'>help</span><span class='op'>=</span><span class='str'>'skip download for matching titles (regex or caseless sub-string)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t151' class='stm mis'> <span class='nam'>selection</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--max-downloads'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'NUMBER'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'max_downloads'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'Abort after downloading NUMBER files'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t152' class='pln'><span class='strut'> </span></p> -<p id='t153' class='stm mis'> <span class='nam'>authentication</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-u'</span><span class='op'>,</span> <span class='str'>'--username'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t154' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'username'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'USERNAME'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'account username'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t155' class='stm mis'> <span class='nam'>authentication</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-p'</span><span class='op'>,</span> <span class='str'>'--password'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t156' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'password'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'PASSWORD'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'account password'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t157' class='stm mis'> <span class='nam'>authentication</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-n'</span><span class='op'>,</span> <span class='str'>'--netrc'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t158' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'usenetrc'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'use .netrc authentication data'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t159' class='pln'><span class='strut'> </span></p> -<p id='t160' class='pln'><span class='strut'> </span></p> -<p id='t161' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-f'</span><span class='op'>,</span> <span class='str'>'--format'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t162' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'FORMAT'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'video format code'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t163' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--all-formats'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t164' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_const'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'download all available video formats'</span><span class='op'>,</span> <span class='nam'>const</span><span class='op'>=</span><span class='str'>'all'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t165' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--prefer-free-formats'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t166' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'prefer_free_formats'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'prefer free video formats unless a specific one is requested'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t167' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--max-quality'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t168' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'format_limit'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'FORMAT'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'highest quality format to download'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t169' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-F'</span><span class='op'>,</span> <span class='str'>'--list-formats'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t170' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'listformats'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'list all available formats (currently youtube only)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t171' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--write-srt'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t172' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'writesubtitles'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t173' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'write video closed captions to a .srt file (currently youtube only)'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t174' class='stm mis'> <span class='nam'>video_format</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--srt-lang'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t175' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'subtitleslang'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'LANG'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t176' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'language of the closed captions to download (optional) use IETF language tags like \'en\''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t177' class='pln'><span class='strut'> </span></p> -<p id='t178' class='pln'><span class='strut'> </span></p> -<p id='t179' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-q'</span><span class='op'>,</span> <span class='str'>'--quiet'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t180' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'quiet'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'activates quiet mode'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t181' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-s'</span><span class='op'>,</span> <span class='str'>'--simulate'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t182' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'simulate'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not download the video and do not write anything to disk'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t183' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--skip-download'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t184' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'skip_download'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not download the video'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t185' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-g'</span><span class='op'>,</span> <span class='str'>'--get-url'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t186' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'geturl'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'simulate, quiet but print URL'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t187' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-e'</span><span class='op'>,</span> <span class='str'>'--get-title'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t188' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'gettitle'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'simulate, quiet but print title'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t189' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--get-thumbnail'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t190' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'getthumbnail'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t191' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'simulate, quiet but print thumbnail URL'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t192' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--get-description'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t193' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'getdescription'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t194' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'simulate, quiet but print video description'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t195' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--get-filename'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t196' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'getfilename'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t197' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'simulate, quiet but print output filename'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t198' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--get-format'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t199' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'getformat'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t200' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'simulate, quiet but print output format'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t201' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--no-progress'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t202' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'noprogress'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not print progress bar'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t203' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--console-title'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t204' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'consoletitle'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t205' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'display progress in console titlebar'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t206' class='stm mis'> <span class='nam'>verbosity</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-v'</span><span class='op'>,</span> <span class='str'>'--verbose'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t207' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'verbose'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'print various debugging information'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t208' class='pln'><span class='strut'> </span></p> -<p id='t209' class='pln'><span class='strut'> </span></p> -<p id='t210' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-t'</span><span class='op'>,</span> <span class='str'>'--title'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t211' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'usetitle'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'use title in file name'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t212' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--id'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t213' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'useid'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'use video ID in file name'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t214' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-l'</span><span class='op'>,</span> <span class='str'>'--literal'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t215' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'usetitle'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'[deprecated] alias of --title'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t216' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-A'</span><span class='op'>,</span> <span class='str'>'--auto-number'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t217' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'autonumber'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t218' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'number downloaded files starting from 00000'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t219' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'--output'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t220' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'outtmpl'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'TEMPLATE'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'output filename template. Use %(title)s to get the title, %(uploader)s for the uploader name, %(uploader_id)s for the uploader nickname if different, %(autonumber)s to get an automatically incremented number, %(ext)s for the filename extension, %(upload_date)s for the upload date (YYYYMMDD), %(extractor)s for the provider (youtube, metacafe, etc), %(id)s for the video id and %% for a literal percent. Use - to output to stdout. Can also be used to download to a different directory, for example with -o \'/my/downloads/%(uploader)s/%(title)s-%(id)s.%(ext)s\' .'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t221' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--restrict-filenames'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t222' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'restrictfilenames'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t223' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t224' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-a'</span><span class='op'>,</span> <span class='str'>'--batch-file'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t225' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'batchfile'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'FILE'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'file containing URLs to download (\'-\' for stdin)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t226' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-w'</span><span class='op'>,</span> <span class='str'>'--no-overwrites'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t227' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'nooverwrites'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not overwrite files'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t228' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>'--continue'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t229' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'continue_dl'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'resume partially downloaded files'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t230' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--no-continue'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t231' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_false'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'continue_dl'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t232' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not resume partially downloaded files (restart from beginning)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t233' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--cookies'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t234' class='pln'> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'cookiefile'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'FILE'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'file to read cookies from and dump cookie jar in'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t235' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--no-part'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t236' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'nopart'</span><span class='op'>,</span> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not use .part files'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t237' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--no-mtime'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t238' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_false'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'updatetime'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t239' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not use the Last-modified header to set the file modification time'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t240' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--write-description'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t241' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'writedescription'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t242' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'write video description to a .description file'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t243' class='stm mis'> <span class='nam'>filesystem</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--write-info-json'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t244' class='pln'> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'writeinfojson'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t245' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'write video metadata to a .info.json file'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t246' class='pln'><span class='strut'> </span></p> -<p id='t247' class='pln'><span class='strut'> </span></p> -<p id='t248' class='stm mis'> <span class='nam'>postproc</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-x'</span><span class='op'>,</span> <span class='str'>'--extract-audio'</span><span class='op'>,</span> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'extractaudio'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t249' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'convert video files to audio-only files (requires ffmpeg or avconv and ffprobe or avprobe)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t250' class='stm mis'> <span class='nam'>postproc</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--audio-format'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'FORMAT'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'audioformat'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='str'>'best'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t251' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'"best", "aac", "vorbis", "mp3", "m4a", or "wav"; best by default'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t252' class='stm mis'> <span class='nam'>postproc</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--audio-quality'</span><span class='op'>,</span> <span class='nam'>metavar</span><span class='op'>=</span><span class='str'>'QUALITY'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'audioquality'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='str'>'5'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t253' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'ffmpeg/avconv audio quality specification, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default 5)'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t254' class='stm mis'> <span class='nam'>postproc</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'-k'</span><span class='op'>,</span> <span class='str'>'--keep-video'</span><span class='op'>,</span> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'keepvideo'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t255' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'keeps the video file on disk after the post-processing; the video is erased by default'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t256' class='stm mis'> <span class='nam'>postproc</span><span class='op'>.</span><span class='nam'>add_option</span><span class='op'>(</span><span class='str'>'--no-post-overwrites'</span><span class='op'>,</span> <span class='nam'>action</span><span class='op'>=</span><span class='str'>'store_true'</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>=</span><span class='str'>'nopostoverwrites'</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t257' class='pln'> <span class='nam'>help</span><span class='op'>=</span><span class='str'>'do not overwrite post-processed files; the post-processed files are overwritten by default'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t258' class='pln'><span class='strut'> </span></p> -<p id='t259' class='pln'><span class='strut'> </span></p> -<p id='t260' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>general</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t261' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>selection</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t262' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>filesystem</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t263' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>verbosity</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t264' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>video_format</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t265' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>authentication</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t266' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>add_option_group</span><span class='op'>(</span><span class='nam'>postproc</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t267' class='pln'><span class='strut'> </span></p> -<p id='t268' class='stm mis'> <span class='nam'>xdg_config_home</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>environ</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'XDG_CONFIG_HOME'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t269' class='stm mis'> <span class='key'>if</span> <span class='nam'>xdg_config_home</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t270' class='stm mis'> <span class='nam'>userConf</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>xdg_config_home</span><span class='op'>,</span> <span class='str'>'youtube-dl.conf'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t271' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t272' class='stm mis'> <span class='nam'>userConf</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>expanduser</span><span class='op'>(</span><span class='str'>'~'</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'.config'</span><span class='op'>,</span> <span class='str'>'youtube-dl.conf'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t273' class='stm mis'> <span class='nam'>argv</span> <span class='op'>=</span> <span class='nam'>_readOptions</span><span class='op'>(</span><span class='str'>'/etc/youtube-dl.conf'</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>_readOptions</span><span class='op'>(</span><span class='nam'>userConf</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>argv</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t274' class='stm mis'> <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>parse_args</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t275' class='pln'><span class='strut'> </span></p> -<p id='t276' class='stm mis'> <span class='key'>return</span> <span class='nam'>parser</span><span class='op'>,</span> <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>args</span><span class='strut'> </span></p> -<p id='t277' class='pln'><span class='strut'> </span></p> -<p id='t278' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>_real_main</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t279' class='stm mis'> <span class='nam'>parser</span><span class='op'>,</span> <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>parseOpts</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t280' class='pln'><span class='strut'> </span></p> -<p id='t281' class='pln'> <span class='com'># Open appropriate CookieJar</span><span class='strut'> </span></p> -<p id='t282' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>cookiefile</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t283' class='stm mis'> <span class='nam'>jar</span> <span class='op'>=</span> <span class='nam'>compat_cookiejar</span><span class='op'>.</span><span class='nam'>CookieJar</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t284' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t285' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t286' class='stm mis'> <span class='nam'>jar</span> <span class='op'>=</span> <span class='nam'>compat_cookiejar</span><span class='op'>.</span><span class='nam'>MozillaCookieJar</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>cookiefile</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t287' class='stm mis'> <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>cookiefile</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>cookiefile</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>R_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t288' class='stm mis'> <span class='nam'>jar</span><span class='op'>.</span><span class='nam'>load</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t289' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t290' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='str'>u'ERROR: unable to open cookie file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t291' class='pln'> <span class='com'># Set user agent</span><span class='strut'> </span></p> -<p id='t292' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>user_agent</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t293' class='stm mis'> <span class='nam'>std_headers</span><span class='op'>[</span><span class='str'>'User-Agent'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>user_agent</span><span class='strut'> </span></p> -<p id='t294' class='pln'><span class='strut'> </span></p> -<p id='t295' class='pln'> <span class='com'># Dump user agent</span><span class='strut'> </span></p> -<p id='t296' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>dump_user_agent</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t297' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='nam'>std_headers</span><span class='op'>[</span><span class='str'>'User-Agent'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t298' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t299' class='pln'><span class='strut'> </span></p> -<p id='t300' class='pln'> <span class='com'># Batch file verification</span><span class='strut'> </span></p> -<p id='t301' class='stm mis'> <span class='nam'>batchurls</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t302' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>batchfile</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t303' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t304' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>batchfile</span> <span class='op'>==</span> <span class='str'>'-'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t305' class='stm mis'> <span class='nam'>batchfd</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdin</span><span class='strut'> </span></p> -<p id='t306' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t307' class='stm mis'> <span class='nam'>batchfd</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>batchfile</span><span class='op'>,</span> <span class='str'>'r'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t308' class='stm mis'> <span class='nam'>batchurls</span> <span class='op'>=</span> <span class='nam'>batchfd</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t309' class='stm mis'> <span class='nam'>batchurls</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>batchurls</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t310' class='stm mis'> <span class='nam'>batchurls</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>batchurls</span> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>0</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'^[#/;]'</span><span class='op'>,</span> <span class='nam'>x</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t311' class='stm mis'> <span class='key'>except</span> <span class='nam'>IOError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t312' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='str'>u'ERROR: batch file could not be read'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t313' class='stm mis'> <span class='nam'>all_urls</span> <span class='op'>=</span> <span class='nam'>batchurls</span> <span class='op'>+</span> <span class='nam'>args</span><span class='strut'> </span></p> -<p id='t314' class='stm mis'> <span class='nam'>all_urls</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>url</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>url</span> <span class='key'>in</span> <span class='nam'>all_urls</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t315' class='pln'><span class='strut'> </span></p> -<p id='t316' class='pln'> <span class='com'># General configuration</span><span class='strut'> </span></p> -<p id='t317' class='stm mis'> <span class='nam'>cookie_processor</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPCookieProcessor</span><span class='op'>(</span><span class='nam'>jar</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t318' class='stm mis'> <span class='nam'>proxy_handler</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>ProxyHandler</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t319' class='stm mis'> <span class='nam'>opener</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>build_opener</span><span class='op'>(</span><span class='nam'>proxy_handler</span><span class='op'>,</span> <span class='nam'>cookie_processor</span><span class='op'>,</span> <span class='nam'>YoutubeDLHandler</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t320' class='stm mis'> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>install_opener</span><span class='op'>(</span><span class='nam'>opener</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t321' class='stm mis'> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>setdefaulttimeout</span><span class='op'>(</span><span class='num'>300</span><span class='op'>)</span> <span class='com'># 5 minutes should be enough (famous last words)</span><span class='strut'> </span></p> -<p id='t322' class='pln'><span class='strut'> </span></p> -<p id='t323' class='stm mis'> <span class='nam'>extractors</span> <span class='op'>=</span> <span class='nam'>gen_extractors</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t324' class='pln'><span class='strut'> </span></p> -<p id='t325' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>list_extractors</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t326' class='stm mis'> <span class='key'>for</span> <span class='nam'>ie</span> <span class='key'>in</span> <span class='nam'>extractors</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t327' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='nam'>ie</span><span class='op'>.</span><span class='nam'>IE_NAME</span> <span class='op'>+</span> <span class='op'>(</span><span class='str'>' (CURRENTLY BROKEN)'</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>_WORKING</span> <span class='key'>else</span> <span class='str'>''</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t328' class='stm mis'> <span class='nam'>matchedUrls</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>url</span> <span class='key'>for</span> <span class='nam'>url</span> <span class='key'>in</span> <span class='nam'>all_urls</span> <span class='key'>if</span> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t329' class='stm mis'> <span class='nam'>all_urls</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>url</span> <span class='key'>for</span> <span class='nam'>url</span> <span class='key'>in</span> <span class='nam'>all_urls</span> <span class='key'>if</span> <span class='nam'>url</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>matchedUrls</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t330' class='stm mis'> <span class='key'>for</span> <span class='nam'>mu</span> <span class='key'>in</span> <span class='nam'>matchedUrls</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t331' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>u' '</span> <span class='op'>+</span> <span class='nam'>mu</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t332' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t333' class='pln'><span class='strut'> </span></p> -<p id='t334' class='pln'> <span class='com'># Conflicting, missing and erroneous options</span><span class='strut'> </span></p> -<p id='t335' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usenetrc</span> <span class='key'>and</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>username</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>password</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t336' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'using .netrc conflicts with giving username/password'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t337' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>password</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>username</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t338' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'account username missing'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t339' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usetitle</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>autonumber</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>useid</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t340' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'using output template conflicts with using title, video ID or auto number'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t341' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usetitle</span> <span class='key'>and</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>useid</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t342' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'using title conflicts with using video ID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t343' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>username</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>password</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t344' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>getpass</span><span class='op'>.</span><span class='nam'>getpass</span><span class='op'>(</span><span class='str'>u'Type account password and press return:'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t345' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>ratelimit</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t346' class='stm mis'> <span class='nam'>numeric_limit</span> <span class='op'>=</span> <span class='nam'>FileDownloader</span><span class='op'>.</span><span class='nam'>parse_bytes</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>ratelimit</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t347' class='stm mis'> <span class='key'>if</span> <span class='nam'>numeric_limit</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t348' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid rate limit specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t349' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>ratelimit</span> <span class='op'>=</span> <span class='nam'>numeric_limit</span><span class='strut'> </span></p> -<p id='t350' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>retries</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t351' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t352' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>retries</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>retries</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t353' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>TypeError</span><span class='op'>,</span> <span class='nam'>ValueError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t354' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid retry count specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t355' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>buffersize</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t356' class='stm mis'> <span class='nam'>numeric_buffersize</span> <span class='op'>=</span> <span class='nam'>FileDownloader</span><span class='op'>.</span><span class='nam'>parse_bytes</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>buffersize</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t357' class='stm mis'> <span class='key'>if</span> <span class='nam'>numeric_buffersize</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t358' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid buffer size specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t359' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>buffersize</span> <span class='op'>=</span> <span class='nam'>numeric_buffersize</span><span class='strut'> </span></p> -<p id='t360' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t361' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playliststart</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t362' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playliststart</span> <span class='op'><=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t363' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ValueError</span><span class='op'>(</span><span class='str'>u'Playlist start must be positive'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t364' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>TypeError</span><span class='op'>,</span> <span class='nam'>ValueError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t365' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid playlist start number specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t366' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t367' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playlistend</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t368' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playlistend</span> <span class='op'>!=</span> <span class='op'>-</span><span class='num'>1</span> <span class='key'>and</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playlistend</span> <span class='op'><=</span> <span class='num'>0</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playlistend</span> <span class='op'><</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playliststart</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t369' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ValueError</span><span class='op'>(</span><span class='str'>u'Playlist end must be greater than playlist start'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t370' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>TypeError</span><span class='op'>,</span> <span class='nam'>ValueError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t371' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid playlist end number specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t372' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>extractaudio</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t373' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioformat</span> <span class='key'>not</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>'best'</span><span class='op'>,</span> <span class='str'>'aac'</span><span class='op'>,</span> <span class='str'>'mp3'</span><span class='op'>,</span> <span class='str'>'vorbis'</span><span class='op'>,</span> <span class='str'>'m4a'</span><span class='op'>,</span> <span class='str'>'wav'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t374' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid audio format specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t375' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioquality</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t376' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioquality</span> <span class='op'>=</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioquality</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>'k'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>'K'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t377' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioquality</span><span class='op'>.</span><span class='nam'>isdigit</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t378' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'invalid audio quality specified'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t379' class='pln'><span class='strut'> </span></p> -<p id='t380' class='stm mis'> <span class='key'>if</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>version_info</span> <span class='op'><</span> <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t381' class='pln'> <span class='com'># In Python 2, sys.argv is a bytestring (also note http://bugs.python.org/issue2128 for Windows systems)</span><span class='strut'> </span></p> -<p id='t382' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t383' class='stm mis'> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span> <span class='op'>=</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t384' class='stm mis'> <span class='nam'>outtmpl</span> <span class='op'>=</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t385' class='pln'> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>format</span> <span class='op'>==</span> <span class='str'>'-1'</span> <span class='key'>and</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usetitle</span> <span class='key'>and</span> <span class='str'>u'%(title)s-%(id)s-%(format)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t386' class='pln'> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>format</span> <span class='op'>==</span> <span class='str'>'-1'</span> <span class='key'>and</span> <span class='str'>u'%(id)s-%(format)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t387' class='pln'> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usetitle</span> <span class='key'>and</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>autonumber</span> <span class='key'>and</span> <span class='str'>u'%(autonumber)s-%(title)s-%(id)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t388' class='pln'> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usetitle</span> <span class='key'>and</span> <span class='str'>u'%(title)s-%(id)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t389' class='pln'> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>useid</span> <span class='key'>and</span> <span class='str'>u'%(id)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t390' class='pln'> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>autonumber</span> <span class='key'>and</span> <span class='str'>u'%(autonumber)s-%(id)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t391' class='pln'> <span class='key'>or</span> <span class='str'>u'%(id)s.%(ext)s'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t392' class='pln'> <span class='com'># File downloader</span><span class='strut'> </span></p> -<p id='t393' class='stm mis'> <span class='nam'>fd</span> <span class='op'>=</span> <span class='nam'>FileDownloader</span><span class='op'>(</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t394' class='pln'> <span class='str'>'usenetrc'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>usenetrc</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t395' class='pln'> <span class='str'>'username'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>username</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t396' class='pln'> <span class='str'>'password'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>password</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t397' class='pln'> <span class='str'>'quiet'</span><span class='op'>:</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>quiet</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>geturl</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>gettitle</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getthumbnail</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getdescription</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getfilename</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getformat</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t398' class='pln'> <span class='str'>'forceurl'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t399' class='pln'> <span class='str'>'forcetitle'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>gettitle</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t400' class='pln'> <span class='str'>'forcethumbnail'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getthumbnail</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t401' class='pln'> <span class='str'>'forcedescription'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getdescription</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t402' class='pln'> <span class='str'>'forcefilename'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getfilename</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t403' class='pln'> <span class='str'>'forceformat'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getformat</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t404' class='pln'> <span class='str'>'simulate'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>simulate</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t405' class='pln'> <span class='str'>'skip_download'</span><span class='op'>:</span> <span class='op'>(</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>skip_download</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>simulate</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>geturl</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>gettitle</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getthumbnail</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getdescription</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getfilename</span> <span class='key'>or</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>getformat</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t406' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t407' class='pln'> <span class='str'>'format_limit'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>format_limit</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t408' class='pln'> <span class='str'>'listformats'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>listformats</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t409' class='pln'> <span class='str'>'outtmpl'</span><span class='op'>:</span> <span class='nam'>outtmpl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t410' class='pln'> <span class='str'>'restrictfilenames'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>restrictfilenames</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t411' class='pln'> <span class='str'>'ignoreerrors'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>ignoreerrors</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t412' class='pln'> <span class='str'>'ratelimit'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>ratelimit</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t413' class='pln'> <span class='str'>'nooverwrites'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>nooverwrites</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t414' class='pln'> <span class='str'>'retries'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>retries</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t415' class='pln'> <span class='str'>'buffersize'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>buffersize</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t416' class='pln'> <span class='str'>'noresizebuffer'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>noresizebuffer</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t417' class='pln'> <span class='str'>'continuedl'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>continue_dl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t418' class='pln'> <span class='str'>'noprogress'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>noprogress</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t419' class='pln'> <span class='str'>'playliststart'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playliststart</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t420' class='pln'> <span class='str'>'playlistend'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>playlistend</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t421' class='pln'> <span class='str'>'logtostderr'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>outtmpl</span> <span class='op'>==</span> <span class='str'>'-'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t422' class='pln'> <span class='str'>'consoletitle'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>consoletitle</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t423' class='pln'> <span class='str'>'nopart'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>nopart</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t424' class='pln'> <span class='str'>'updatetime'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>updatetime</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t425' class='pln'> <span class='str'>'writedescription'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>writedescription</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t426' class='pln'> <span class='str'>'writeinfojson'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>writeinfojson</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t427' class='pln'> <span class='str'>'writesubtitles'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>writesubtitles</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t428' class='pln'> <span class='str'>'subtitleslang'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>subtitleslang</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t429' class='pln'> <span class='str'>'matchtitle'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>matchtitle</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t430' class='pln'> <span class='str'>'rejecttitle'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>rejecttitle</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t431' class='pln'> <span class='str'>'max_downloads'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>max_downloads</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t432' class='pln'> <span class='str'>'prefer_free_formats'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>prefer_free_formats</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t433' class='pln'> <span class='str'>'verbose'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>verbose</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t434' class='pln'> <span class='str'>'test'</span><span class='op'>:</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>test</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t435' class='pln'> <span class='op'>}</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t436' class='pln'><span class='strut'> </span></p> -<p id='t437' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>verbose</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t438' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[debug] youtube-dl version '</span> <span class='op'>+</span> <span class='nam'>__version__</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t439' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t440' class='stm mis'> <span class='nam'>sp</span> <span class='op'>=</span> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>Popen</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'git'</span><span class='op'>,</span> <span class='str'>'rev-parse'</span><span class='op'>,</span> <span class='str'>'--short'</span><span class='op'>,</span> <span class='str'>'HEAD'</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t441' class='pln'> <span class='nam'>cwd</span><span class='op'>=</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='nam'>__file__</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t442' class='stm mis'> <span class='nam'>out</span><span class='op'>,</span> <span class='nam'>err</span> <span class='op'>=</span> <span class='nam'>sp</span><span class='op'>.</span><span class='nam'>communicate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t443' class='stm mis'> <span class='nam'>out</span> <span class='op'>=</span> <span class='nam'>out</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t444' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>'[0-9a-f]+'</span><span class='op'>,</span> <span class='nam'>out</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t445' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[debug] Git HEAD: '</span> <span class='op'>+</span> <span class='nam'>out</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t446' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t447' class='stm mis'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t448' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[debug] Python version %s - %s'</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>platform</span><span class='op'>.</span><span class='nam'>python_version</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>platform</span><span class='op'>.</span><span class='nam'>platform</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t449' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[debug] Proxy map: '</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>proxy_handler</span><span class='op'>.</span><span class='nam'>proxies</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t450' class='pln'><span class='strut'> </span></p> -<p id='t451' class='stm mis'> <span class='key'>for</span> <span class='nam'>extractor</span> <span class='key'>in</span> <span class='nam'>extractors</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t452' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>add_info_extractor</span><span class='op'>(</span><span class='nam'>extractor</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t453' class='pln'><span class='strut'> </span></p> -<p id='t454' class='pln'> <span class='com'># PostProcessors</span><span class='strut'> </span></p> -<p id='t455' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>extractaudio</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t456' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>add_post_processor</span><span class='op'>(</span><span class='nam'>FFmpegExtractAudioPP</span><span class='op'>(</span><span class='nam'>preferredcodec</span><span class='op'>=</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioformat</span><span class='op'>,</span> <span class='nam'>preferredquality</span><span class='op'>=</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>audioquality</span><span class='op'>,</span> <span class='nam'>keepvideo</span><span class='op'>=</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>keepvideo</span><span class='op'>,</span> <span class='nam'>nopostoverwrites</span><span class='op'>=</span><span class='nam'>opts</span><span class='op'>.</span><span class='nam'>nopostoverwrites</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t457' class='pln'><span class='strut'> </span></p> -<p id='t458' class='pln'> <span class='com'># Update version</span><span class='strut'> </span></p> -<p id='t459' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>update_self</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t460' class='stm mis'> <span class='nam'>update_self</span><span class='op'>(</span><span class='nam'>fd</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>,</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>verbose</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>argv</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t461' class='pln'><span class='strut'> </span></p> -<p id='t462' class='pln'> <span class='com'># Maybe do nothing</span><span class='strut'> </span></p> -<p id='t463' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>all_urls</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t464' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>update_self</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t465' class='stm mis'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>(</span><span class='str'>u'you must provide at least one URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t466' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t467' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t468' class='pln'><span class='strut'> </span></p> -<p id='t469' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t470' class='stm mis'> <span class='nam'>retcode</span> <span class='op'>=</span> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='nam'>all_urls</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t471' class='stm mis'> <span class='key'>except</span> <span class='nam'>MaxDownloadsReached</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t472' class='stm mis'> <span class='nam'>fd</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'--max-download limit reached, aborting.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t473' class='stm mis'> <span class='nam'>retcode</span> <span class='op'>=</span> <span class='num'>101</span><span class='strut'> </span></p> -<p id='t474' class='pln'><span class='strut'> </span></p> -<p id='t475' class='pln'> <span class='com'># Dump cookie jar if requested</span><span class='strut'> </span></p> -<p id='t476' class='stm mis'> <span class='key'>if</span> <span class='nam'>opts</span><span class='op'>.</span><span class='nam'>cookiefile</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t477' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t478' class='stm mis'> <span class='nam'>jar</span><span class='op'>.</span><span class='nam'>save</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t479' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t480' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='str'>u'ERROR: unable to save cookie jar'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t481' class='pln'><span class='strut'> </span></p> -<p id='t482' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='nam'>retcode</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t483' class='pln'><span class='strut'> </span></p> -<p id='t484' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>main</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t485' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t486' class='stm mis'> <span class='nam'>_real_main</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t487' class='stm mis'> <span class='key'>except</span> <span class='nam'>DownloadError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t488' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t489' class='stm mis'> <span class='key'>except</span> <span class='nam'>SameFileError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t490' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='str'>u'ERROR: fixed output name but more than one file to download'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t491' class='stm mis'> <span class='key'>except</span> <span class='nam'>KeyboardInterrupt</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t492' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exit</span><span class='op'>(</span><span class='str'>u'\nERROR: Interrupted by user'</span><span class='op'>)</span><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/youtube_dl_FileDownloader.html b/test_coverage/youtube_dl_FileDownloader.html deleted file mode 100644 index 039f21456..000000000 --- a/test_coverage/youtube_dl_FileDownloader.html +++ /dev/null @@ -1,1542 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl.FileDownloader: 57%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl.FileDownloader</b> : - <span class='pc_cov'>57%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 479 statements - <span class='run hide_run shortkey_r button_toggle_run'>271 run</span> - <span class='mis shortkey_m button_toggle_mis'>208 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='pln'><a href='#n1'>1</a></p> -<p id='n2' class='pln'><a href='#n2'>2</a></p> -<p id='n3' class='pln'><a href='#n3'>3</a></p> -<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p> -<p id='n5' class='pln'><a href='#n5'>5</a></p> -<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p> -<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p> -<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p> -<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p> -<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p> -<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p> -<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p> -<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p> -<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p> -<p id='n15' class='pln'><a href='#n15'>15</a></p> -<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p> -<p id='n17' class='stm mis'><a href='#n17'>17</a></p> -<p id='n18' class='pln'><a href='#n18'>18</a></p> -<p id='n19' class='stm run hide_run'><a href='#n19'>19</a></p> -<p id='n20' class='pln'><a href='#n20'>20</a></p> -<p id='n21' class='pln'><a href='#n21'>21</a></p> -<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p> -<p id='n23' class='pln'><a href='#n23'>23</a></p> -<p id='n24' class='pln'><a href='#n24'>24</a></p> -<p id='n25' class='pln'><a href='#n25'>25</a></p> -<p id='n26' class='pln'><a href='#n26'>26</a></p> -<p id='n27' class='pln'><a href='#n27'>27</a></p> -<p id='n28' class='pln'><a href='#n28'>28</a></p> -<p id='n29' class='pln'><a href='#n29'>29</a></p> -<p id='n30' class='pln'><a href='#n30'>30</a></p> -<p id='n31' class='pln'><a href='#n31'>31</a></p> -<p id='n32' class='pln'><a href='#n32'>32</a></p> -<p id='n33' class='pln'><a href='#n33'>33</a></p> -<p id='n34' class='pln'><a href='#n34'>34</a></p> -<p id='n35' class='pln'><a href='#n35'>35</a></p> -<p id='n36' class='pln'><a href='#n36'>36</a></p> -<p id='n37' class='pln'><a href='#n37'>37</a></p> -<p id='n38' class='pln'><a href='#n38'>38</a></p> -<p id='n39' class='pln'><a href='#n39'>39</a></p> -<p id='n40' class='pln'><a href='#n40'>40</a></p> -<p id='n41' class='pln'><a href='#n41'>41</a></p> -<p id='n42' class='pln'><a href='#n42'>42</a></p> -<p id='n43' class='pln'><a href='#n43'>43</a></p> -<p id='n44' class='pln'><a href='#n44'>44</a></p> -<p id='n45' class='pln'><a href='#n45'>45</a></p> -<p id='n46' class='pln'><a href='#n46'>46</a></p> -<p id='n47' class='pln'><a href='#n47'>47</a></p> -<p id='n48' class='pln'><a href='#n48'>48</a></p> -<p id='n49' class='pln'><a href='#n49'>49</a></p> -<p id='n50' class='pln'><a href='#n50'>50</a></p> -<p id='n51' class='pln'><a href='#n51'>51</a></p> -<p id='n52' class='pln'><a href='#n52'>52</a></p> -<p id='n53' class='pln'><a href='#n53'>53</a></p> -<p id='n54' class='pln'><a href='#n54'>54</a></p> -<p id='n55' class='pln'><a href='#n55'>55</a></p> -<p id='n56' class='pln'><a href='#n56'>56</a></p> -<p id='n57' class='pln'><a href='#n57'>57</a></p> -<p id='n58' class='pln'><a href='#n58'>58</a></p> -<p id='n59' class='pln'><a href='#n59'>59</a></p> -<p id='n60' class='pln'><a href='#n60'>60</a></p> -<p id='n61' class='pln'><a href='#n61'>61</a></p> -<p id='n62' class='pln'><a href='#n62'>62</a></p> -<p id='n63' class='pln'><a href='#n63'>63</a></p> -<p id='n64' class='pln'><a href='#n64'>64</a></p> -<p id='n65' class='pln'><a href='#n65'>65</a></p> -<p id='n66' class='pln'><a href='#n66'>66</a></p> -<p id='n67' class='pln'><a href='#n67'>67</a></p> -<p id='n68' class='pln'><a href='#n68'>68</a></p> -<p id='n69' class='pln'><a href='#n69'>69</a></p> -<p id='n70' class='pln'><a href='#n70'>70</a></p> -<p id='n71' class='pln'><a href='#n71'>71</a></p> -<p id='n72' class='pln'><a href='#n72'>72</a></p> -<p id='n73' class='pln'><a href='#n73'>73</a></p> -<p id='n74' class='pln'><a href='#n74'>74</a></p> -<p id='n75' class='pln'><a href='#n75'>75</a></p> -<p id='n76' class='pln'><a href='#n76'>76</a></p> -<p id='n77' class='pln'><a href='#n77'>77</a></p> -<p id='n78' class='pln'><a href='#n78'>78</a></p> -<p id='n79' class='pln'><a href='#n79'>79</a></p> -<p id='n80' class='pln'><a href='#n80'>80</a></p> -<p id='n81' class='pln'><a href='#n81'>81</a></p> -<p id='n82' class='pln'><a href='#n82'>82</a></p> -<p id='n83' class='pln'><a href='#n83'>83</a></p> -<p id='n84' class='pln'><a href='#n84'>84</a></p> -<p id='n85' class='pln'><a href='#n85'>85</a></p> -<p id='n86' class='stm run hide_run'><a href='#n86'>86</a></p> -<p id='n87' class='stm run hide_run'><a href='#n87'>87</a></p> -<p id='n88' class='stm run hide_run'><a href='#n88'>88</a></p> -<p id='n89' class='stm run hide_run'><a href='#n89'>89</a></p> -<p id='n90' class='stm run hide_run'><a href='#n90'>90</a></p> -<p id='n91' class='stm run hide_run'><a href='#n91'>91</a></p> -<p id='n92' class='pln'><a href='#n92'>92</a></p> -<p id='n93' class='stm run hide_run'><a href='#n93'>93</a></p> -<p id='n94' class='pln'><a href='#n94'>94</a></p> -<p id='n95' class='stm run hide_run'><a href='#n95'>95</a></p> -<p id='n96' class='stm run hide_run'><a href='#n96'>96</a></p> -<p id='n97' class='stm run hide_run'><a href='#n97'>97</a></p> -<p id='n98' class='stm run hide_run'><a href='#n98'>98</a></p> -<p id='n99' class='stm run hide_run'><a href='#n99'>99</a></p> -<p id='n100' class='stm run hide_run'><a href='#n100'>100</a></p> -<p id='n101' class='pln'><a href='#n101'>101</a></p> -<p id='n102' class='stm run hide_run'><a href='#n102'>102</a></p> -<p id='n103' class='stm mis'><a href='#n103'>103</a></p> -<p id='n104' class='pln'><a href='#n104'>104</a></p> -<p id='n105' class='stm run hide_run'><a href='#n105'>105</a></p> -<p id='n106' class='pln'><a href='#n106'>106</a></p> -<p id='n107' class='stm run hide_run'><a href='#n107'>107</a></p> -<p id='n108' class='stm mis'><a href='#n108'>108</a></p> -<p id='n109' class='stm run hide_run'><a href='#n109'>109</a></p> -<p id='n110' class='stm mis'><a href='#n110'>110</a></p> -<p id='n111' class='stm run hide_run'><a href='#n111'>111</a></p> -<p id='n112' class='stm mis'><a href='#n112'>112</a></p> -<p id='n113' class='pln'><a href='#n113'>113</a></p> -<p id='n114' class='stm run hide_run'><a href='#n114'>114</a></p> -<p id='n115' class='stm run hide_run'><a href='#n115'>115</a></p> -<p id='n116' class='stm run hide_run'><a href='#n116'>116</a></p> -<p id='n117' class='stm run hide_run'><a href='#n117'>117</a></p> -<p id='n118' class='pln'><a href='#n118'>118</a></p> -<p id='n119' class='stm run hide_run'><a href='#n119'>119</a></p> -<p id='n120' class='pln'><a href='#n120'>120</a></p> -<p id='n121' class='stm run hide_run'><a href='#n121'>121</a></p> -<p id='n122' class='stm mis'><a href='#n122'>122</a></p> -<p id='n123' class='stm run hide_run'><a href='#n123'>123</a></p> -<p id='n124' class='pln'><a href='#n124'>124</a></p> -<p id='n125' class='stm run hide_run'><a href='#n125'>125</a></p> -<p id='n126' class='pln'><a href='#n126'>126</a></p> -<p id='n127' class='stm run hide_run'><a href='#n127'>127</a></p> -<p id='n128' class='stm mis'><a href='#n128'>128</a></p> -<p id='n129' class='stm run hide_run'><a href='#n129'>129</a></p> -<p id='n130' class='stm run hide_run'><a href='#n130'>130</a></p> -<p id='n131' class='stm run hide_run'><a href='#n131'>131</a></p> -<p id='n132' class='stm run hide_run'><a href='#n132'>132</a></p> -<p id='n133' class='stm run hide_run'><a href='#n133'>133</a></p> -<p id='n134' class='stm run hide_run'><a href='#n134'>134</a></p> -<p id='n135' class='stm run hide_run'><a href='#n135'>135</a></p> -<p id='n136' class='stm mis'><a href='#n136'>136</a></p> -<p id='n137' class='stm run hide_run'><a href='#n137'>137</a></p> -<p id='n138' class='pln'><a href='#n138'>138</a></p> -<p id='n139' class='stm run hide_run'><a href='#n139'>139</a></p> -<p id='n140' class='pln'><a href='#n140'>140</a></p> -<p id='n141' class='stm run hide_run'><a href='#n141'>141</a></p> -<p id='n142' class='stm run hide_run'><a href='#n142'>142</a></p> -<p id='n143' class='stm run hide_run'><a href='#n143'>143</a></p> -<p id='n144' class='stm run hide_run'><a href='#n144'>144</a></p> -<p id='n145' class='pln'><a href='#n145'>145</a></p> -<p id='n146' class='stm run hide_run'><a href='#n146'>146</a></p> -<p id='n147' class='pln'><a href='#n147'>147</a></p> -<p id='n148' class='stm run hide_run'><a href='#n148'>148</a></p> -<p id='n149' class='stm run hide_run'><a href='#n149'>149</a></p> -<p id='n150' class='stm run hide_run'><a href='#n150'>150</a></p> -<p id='n151' class='stm run hide_run'><a href='#n151'>151</a></p> -<p id='n152' class='stm run hide_run'><a href='#n152'>152</a></p> -<p id='n153' class='stm run hide_run'><a href='#n153'>153</a></p> -<p id='n154' class='stm run hide_run'><a href='#n154'>154</a></p> -<p id='n155' class='stm run hide_run'><a href='#n155'>155</a></p> -<p id='n156' class='stm mis'><a href='#n156'>156</a></p> -<p id='n157' class='stm run hide_run'><a href='#n157'>157</a></p> -<p id='n158' class='pln'><a href='#n158'>158</a></p> -<p id='n159' class='stm run hide_run'><a href='#n159'>159</a></p> -<p id='n160' class='pln'><a href='#n160'>160</a></p> -<p id='n161' class='pln'><a href='#n161'>161</a></p> -<p id='n162' class='stm mis'><a href='#n162'>162</a></p> -<p id='n163' class='stm mis'><a href='#n163'>163</a></p> -<p id='n164' class='stm mis'><a href='#n164'>164</a></p> -<p id='n165' class='stm mis'><a href='#n165'>165</a></p> -<p id='n166' class='stm mis'><a href='#n166'>166</a></p> -<p id='n167' class='stm mis'><a href='#n167'>167</a></p> -<p id='n168' class='pln'><a href='#n168'>168</a></p> -<p id='n169' class='stm run hide_run'><a href='#n169'>169</a></p> -<p id='n170' class='pln'><a href='#n170'>170</a></p> -<p id='n171' class='stm run hide_run'><a href='#n171'>171</a></p> -<p id='n172' class='stm run hide_run'><a href='#n172'>172</a></p> -<p id='n173' class='pln'><a href='#n173'>173</a></p> -<p id='n174' class='stm run hide_run'><a href='#n174'>174</a></p> -<p id='n175' class='pln'><a href='#n175'>175</a></p> -<p id='n176' class='stm mis'><a href='#n176'>176</a></p> -<p id='n177' class='stm mis'><a href='#n177'>177</a></p> -<p id='n178' class='pln'><a href='#n178'>178</a></p> -<p id='n179' class='stm run hide_run'><a href='#n179'>179</a></p> -<p id='n180' class='pln'><a href='#n180'>180</a></p> -<p id='n181' class='stm run hide_run'><a href='#n181'>181</a></p> -<p id='n182' class='stm run hide_run'><a href='#n182'>182</a></p> -<p id='n183' class='stm run hide_run'><a href='#n183'>183</a></p> -<p id='n184' class='stm run hide_run'><a href='#n184'>184</a></p> -<p id='n185' class='stm run hide_run'><a href='#n185'>185</a></p> -<p id='n186' class='stm run hide_run'><a href='#n186'>186</a></p> -<p id='n187' class='stm run hide_run'><a href='#n187'>187</a></p> -<p id='n188' class='stm run hide_run'><a href='#n188'>188</a></p> -<p id='n189' class='pln'><a href='#n189'>189</a></p> -<p id='n190' class='stm run hide_run'><a href='#n190'>190</a></p> -<p id='n191' class='pln'><a href='#n191'>191</a></p> -<p id='n192' class='stm mis'><a href='#n192'>192</a></p> -<p id='n193' class='stm mis'><a href='#n193'>193</a></p> -<p id='n194' class='stm mis'><a href='#n194'>194</a></p> -<p id='n195' class='stm mis'><a href='#n195'>195</a></p> -<p id='n196' class='stm mis'><a href='#n196'>196</a></p> -<p id='n197' class='pln'><a href='#n197'>197</a></p> -<p id='n198' class='stm run hide_run'><a href='#n198'>198</a></p> -<p id='n199' class='pln'><a href='#n199'>199</a></p> -<p id='n200' class='stm run hide_run'><a href='#n200'>200</a></p> -<p id='n201' class='stm run hide_run'><a href='#n201'>201</a></p> -<p id='n202' class='stm mis'><a href='#n202'>202</a></p> -<p id='n203' class='pln'><a href='#n203'>203</a></p> -<p id='n204' class='pln'><a href='#n204'>204</a></p> -<p id='n205' class='stm mis'><a href='#n205'>205</a></p> -<p id='n206' class='stm mis'><a href='#n206'>206</a></p> -<p id='n207' class='stm mis'><a href='#n207'>207</a></p> -<p id='n208' class='pln'><a href='#n208'>208</a></p> -<p id='n209' class='stm run hide_run'><a href='#n209'>209</a></p> -<p id='n210' class='pln'><a href='#n210'>210</a></p> -<p id='n211' class='stm run hide_run'><a href='#n211'>211</a></p> -<p id='n212' class='pln'><a href='#n212'>212</a></p> -<p id='n213' class='stm run hide_run'><a href='#n213'>213</a></p> -<p id='n214' class='pln'><a href='#n214'>214</a></p> -<p id='n215' class='pln'><a href='#n215'>215</a></p> -<p id='n216' class='pln'><a href='#n216'>216</a></p> -<p id='n217' class='pln'><a href='#n217'>217</a></p> -<p id='n218' class='pln'><a href='#n218'>218</a></p> -<p id='n219' class='pln'><a href='#n219'>219</a></p> -<p id='n220' class='stm mis'><a href='#n220'>220</a></p> -<p id='n221' class='stm mis'><a href='#n221'>221</a></p> -<p id='n222' class='stm mis'><a href='#n222'>222</a></p> -<p id='n223' class='stm mis'><a href='#n223'>223</a></p> -<p id='n224' class='stm mis'><a href='#n224'>224</a></p> -<p id='n225' class='stm mis'><a href='#n225'>225</a></p> -<p id='n226' class='stm mis'><a href='#n226'>226</a></p> -<p id='n227' class='stm mis'><a href='#n227'>227</a></p> -<p id='n228' class='stm mis'><a href='#n228'>228</a></p> -<p id='n229' class='pln'><a href='#n229'>229</a></p> -<p id='n230' class='stm run hide_run'><a href='#n230'>230</a></p> -<p id='n231' class='pln'><a href='#n231'>231</a></p> -<p id='n232' class='stm run hide_run'><a href='#n232'>232</a></p> -<p id='n233' class='stm run hide_run'><a href='#n233'>233</a></p> -<p id='n234' class='stm run hide_run'><a href='#n234'>234</a></p> -<p id='n235' class='stm mis'><a href='#n235'>235</a></p> -<p id='n236' class='stm mis'><a href='#n236'>236</a></p> -<p id='n237' class='stm mis'><a href='#n237'>237</a></p> -<p id='n238' class='stm mis'><a href='#n238'>238</a></p> -<p id='n239' class='stm mis'><a href='#n239'>239</a></p> -<p id='n240' class='stm mis'><a href='#n240'>240</a></p> -<p id='n241' class='stm mis'><a href='#n241'>241</a></p> -<p id='n242' class='pln'><a href='#n242'>242</a></p> -<p id='n243' class='stm run hide_run'><a href='#n243'>243</a></p> -<p id='n244' class='pln'><a href='#n244'>244</a></p> -<p id='n245' class='stm run hide_run'><a href='#n245'>245</a></p> -<p id='n246' class='pln'><a href='#n246'>246</a></p> -<p id='n247' class='stm mis'><a href='#n247'>247</a></p> -<p id='n248' class='stm run hide_run'><a href='#n248'>248</a></p> -<p id='n249' class='pln'><a href='#n249'>249</a></p> -<p id='n250' class='stm run hide_run'><a href='#n250'>250</a></p> -<p id='n251' class='stm run hide_run'><a href='#n251'>251</a></p> -<p id='n252' class='stm run hide_run'><a href='#n252'>252</a></p> -<p id='n253' class='stm mis'><a href='#n253'>253</a></p> -<p id='n254' class='pln'><a href='#n254'>254</a></p> -<p id='n255' class='stm run hide_run'><a href='#n255'>255</a></p> -<p id='n256' class='stm run hide_run'><a href='#n256'>256</a></p> -<p id='n257' class='stm run hide_run'><a href='#n257'>257</a></p> -<p id='n258' class='stm mis'><a href='#n258'>258</a></p> -<p id='n259' class='stm run hide_run'><a href='#n259'>259</a></p> -<p id='n260' class='stm mis'><a href='#n260'>260</a></p> -<p id='n261' class='stm mis'><a href='#n261'>261</a></p> -<p id='n262' class='pln'><a href='#n262'>262</a></p> -<p id='n263' class='stm run hide_run'><a href='#n263'>263</a></p> -<p id='n264' class='pln'><a href='#n264'>264</a></p> -<p id='n265' class='stm run hide_run'><a href='#n265'>265</a></p> -<p id='n266' class='stm mis'><a href='#n266'>266</a></p> -<p id='n267' class='stm run hide_run'><a href='#n267'>267</a></p> -<p id='n268' class='stm mis'><a href='#n268'>268</a></p> -<p id='n269' class='stm run hide_run'><a href='#n269'>269</a></p> -<p id='n270' class='stm run hide_run'><a href='#n270'>270</a></p> -<p id='n271' class='stm mis'><a href='#n271'>271</a></p> -<p id='n272' class='stm run hide_run'><a href='#n272'>272</a></p> -<p id='n273' class='stm run hide_run'><a href='#n273'>273</a></p> -<p id='n274' class='stm mis'><a href='#n274'>274</a></p> -<p id='n275' class='stm run hide_run'><a href='#n275'>275</a></p> -<p id='n276' class='stm run hide_run'><a href='#n276'>276</a></p> -<p id='n277' class='stm mis'><a href='#n277'>277</a></p> -<p id='n278' class='stm mis'><a href='#n278'>278</a></p> -<p id='n279' class='stm run hide_run'><a href='#n279'>279</a></p> -<p id='n280' class='pln'><a href='#n280'>280</a></p> -<p id='n281' class='stm run hide_run'><a href='#n281'>281</a></p> -<p id='n282' class='pln'><a href='#n282'>282</a></p> -<p id='n283' class='stm run hide_run'><a href='#n283'>283</a></p> -<p id='n284' class='pln'><a href='#n284'>284</a></p> -<p id='n285' class='stm run hide_run'><a href='#n285'>285</a></p> -<p id='n286' class='pln'><a href='#n286'>286</a></p> -<p id='n287' class='stm mis'><a href='#n287'>287</a></p> -<p id='n288' class='pln'><a href='#n288'>288</a></p> -<p id='n289' class='stm run hide_run'><a href='#n289'>289</a></p> -<p id='n290' class='pln'><a href='#n290'>290</a></p> -<p id='n291' class='stm run hide_run'><a href='#n291'>291</a></p> -<p id='n292' class='pln'><a href='#n292'>292</a></p> -<p id='n293' class='stm run hide_run'><a href='#n293'>293</a></p> -<p id='n294' class='pln'><a href='#n294'>294</a></p> -<p id='n295' class='stm run hide_run'><a href='#n295'>295</a></p> -<p id='n296' class='pln'><a href='#n296'>296</a></p> -<p id='n297' class='stm run hide_run'><a href='#n297'>297</a></p> -<p id='n298' class='pln'><a href='#n298'>298</a></p> -<p id='n299' class='stm run hide_run'><a href='#n299'>299</a></p> -<p id='n300' class='stm mis'><a href='#n300'>300</a></p> -<p id='n301' class='stm run hide_run'><a href='#n301'>301</a></p> -<p id='n302' class='pln'><a href='#n302'>302</a></p> -<p id='n303' class='stm run hide_run'><a href='#n303'>303</a></p> -<p id='n304' class='pln'><a href='#n304'>304</a></p> -<p id='n305' class='pln'><a href='#n305'>305</a></p> -<p id='n306' class='stm run hide_run'><a href='#n306'>306</a></p> -<p id='n307' class='pln'><a href='#n307'>307</a></p> -<p id='n308' class='stm mis'><a href='#n308'>308</a></p> -<p id='n309' class='pln'><a href='#n309'>309</a></p> -<p id='n310' class='stm run hide_run'><a href='#n310'>310</a></p> -<p id='n311' class='pln'><a href='#n311'>311</a></p> -<p id='n312' class='stm mis'><a href='#n312'>312</a></p> -<p id='n313' class='pln'><a href='#n313'>313</a></p> -<p id='n314' class='stm run hide_run'><a href='#n314'>314</a></p> -<p id='n315' class='pln'><a href='#n315'>315</a></p> -<p id='n316' class='stm mis'><a href='#n316'>316</a></p> -<p id='n317' class='stm mis'><a href='#n317'>317</a></p> -<p id='n318' class='stm mis'><a href='#n318'>318</a></p> -<p id='n319' class='stm mis'><a href='#n319'>319</a></p> -<p id='n320' class='pln'><a href='#n320'>320</a></p> -<p id='n321' class='stm run hide_run'><a href='#n321'>321</a></p> -<p id='n322' class='pln'><a href='#n322'>322</a></p> -<p id='n323' class='stm mis'><a href='#n323'>323</a></p> -<p id='n324' class='pln'><a href='#n324'>324</a></p> -<p id='n325' class='stm run hide_run'><a href='#n325'>325</a></p> -<p id='n326' class='pln'><a href='#n326'>326</a></p> -<p id='n327' class='stm run hide_run'><a href='#n327'>327</a></p> -<p id='n328' class='stm mis'><a href='#n328'>328</a></p> -<p id='n329' class='pln'><a href='#n329'>329</a></p> -<p id='n330' class='stm run hide_run'><a href='#n330'>330</a></p> -<p id='n331' class='pln'><a href='#n331'>331</a></p> -<p id='n332' class='stm run hide_run'><a href='#n332'>332</a></p> -<p id='n333' class='pln'><a href='#n333'>333</a></p> -<p id='n334' class='stm run hide_run'><a href='#n334'>334</a></p> -<p id='n335' class='pln'><a href='#n335'>335</a></p> -<p id='n336' class='stm run hide_run'><a href='#n336'>336</a></p> -<p id='n337' class='pln'><a href='#n337'>337</a></p> -<p id='n338' class='stm run hide_run'><a href='#n338'>338</a></p> -<p id='n339' class='stm run hide_run'><a href='#n339'>339</a></p> -<p id='n340' class='pln'><a href='#n340'>340</a></p> -<p id='n341' class='stm run hide_run'><a href='#n341'>341</a></p> -<p id='n342' class='stm run hide_run'><a href='#n342'>342</a></p> -<p id='n343' class='pln'><a href='#n343'>343</a></p> -<p id='n344' class='stm run hide_run'><a href='#n344'>344</a></p> -<p id='n345' class='pln'><a href='#n345'>345</a></p> -<p id='n346' class='pln'><a href='#n346'>346</a></p> -<p id='n347' class='pln'><a href='#n347'>347</a></p> -<p id='n348' class='stm run hide_run'><a href='#n348'>348</a></p> -<p id='n349' class='pln'><a href='#n349'>349</a></p> -<p id='n350' class='stm run hide_run'><a href='#n350'>350</a></p> -<p id='n351' class='stm run hide_run'><a href='#n351'>351</a></p> -<p id='n352' class='stm mis'><a href='#n352'>352</a></p> -<p id='n353' class='stm mis'><a href='#n353'>353</a></p> -<p id='n354' class='stm mis'><a href='#n354'>354</a></p> -<p id='n355' class='pln'><a href='#n355'>355</a></p> -<p id='n356' class='stm run hide_run'><a href='#n356'>356</a></p> -<p id='n357' class='pln'><a href='#n357'>357</a></p> -<p id='n358' class='pln'><a href='#n358'>358</a></p> -<p id='n359' class='stm run hide_run'><a href='#n359'>359</a></p> -<p id='n360' class='stm run hide_run'><a href='#n360'>360</a></p> -<p id='n361' class='stm run hide_run'><a href='#n361'>361</a></p> -<p id='n362' class='stm mis'><a href='#n362'>362</a></p> -<p id='n363' class='stm mis'><a href='#n363'>363</a></p> -<p id='n364' class='stm mis'><a href='#n364'>364</a></p> -<p id='n365' class='stm run hide_run'><a href='#n365'>365</a></p> -<p id='n366' class='stm run hide_run'><a href='#n366'>366</a></p> -<p id='n367' class='stm mis'><a href='#n367'>367</a></p> -<p id='n368' class='stm mis'><a href='#n368'>368</a></p> -<p id='n369' class='stm mis'><a href='#n369'>369</a></p> -<p id='n370' class='stm run hide_run'><a href='#n370'>370</a></p> -<p id='n371' class='pln'><a href='#n371'>371</a></p> -<p id='n372' class='stm run hide_run'><a href='#n372'>372</a></p> -<p id='n373' class='pln'><a href='#n373'>373</a></p> -<p id='n374' class='pln'><a href='#n374'>374</a></p> -<p id='n375' class='pln'><a href='#n375'>375</a></p> -<p id='n376' class='stm run hide_run'><a href='#n376'>376</a></p> -<p id='n377' class='pln'><a href='#n377'>377</a></p> -<p id='n378' class='stm run hide_run'><a href='#n378'>378</a></p> -<p id='n379' class='stm run hide_run'><a href='#n379'>379</a></p> -<p id='n380' class='pln'><a href='#n380'>380</a></p> -<p id='n381' class='stm run hide_run'><a href='#n381'>381</a></p> -<p id='n382' class='stm run hide_run'><a href='#n382'>382</a></p> -<p id='n383' class='stm mis'><a href='#n383'>383</a></p> -<p id='n384' class='stm mis'><a href='#n384'>384</a></p> -<p id='n385' class='pln'><a href='#n385'>385</a></p> -<p id='n386' class='stm run hide_run'><a href='#n386'>386</a></p> -<p id='n387' class='stm run hide_run'><a href='#n387'>387</a></p> -<p id='n388' class='stm mis'><a href='#n388'>388</a></p> -<p id='n389' class='stm mis'><a href='#n389'>389</a></p> -<p id='n390' class='pln'><a href='#n390'>390</a></p> -<p id='n391' class='stm run hide_run'><a href='#n391'>391</a></p> -<p id='n392' class='pln'><a href='#n392'>392</a></p> -<p id='n393' class='pln'><a href='#n393'>393</a></p> -<p id='n394' class='stm run hide_run'><a href='#n394'>394</a></p> -<p id='n395' class='stm mis'><a href='#n395'>395</a></p> -<p id='n396' class='stm run hide_run'><a href='#n396'>396</a></p> -<p id='n397' class='stm mis'><a href='#n397'>397</a></p> -<p id='n398' class='stm run hide_run'><a href='#n398'>398</a></p> -<p id='n399' class='stm mis'><a href='#n399'>399</a></p> -<p id='n400' class='stm run hide_run'><a href='#n400'>400</a></p> -<p id='n401' class='stm mis'><a href='#n401'>401</a></p> -<p id='n402' class='stm run hide_run'><a href='#n402'>402</a></p> -<p id='n403' class='stm mis'><a href='#n403'>403</a></p> -<p id='n404' class='stm run hide_run'><a href='#n404'>404</a></p> -<p id='n405' class='stm mis'><a href='#n405'>405</a></p> -<p id='n406' class='pln'><a href='#n406'>406</a></p> -<p id='n407' class='pln'><a href='#n407'>407</a></p> -<p id='n408' class='stm run hide_run'><a href='#n408'>408</a></p> -<p id='n409' class='stm mis'><a href='#n409'>409</a></p> -<p id='n410' class='pln'><a href='#n410'>410</a></p> -<p id='n411' class='stm run hide_run'><a href='#n411'>411</a></p> -<p id='n412' class='stm mis'><a href='#n412'>412</a></p> -<p id='n413' class='pln'><a href='#n413'>413</a></p> -<p id='n414' class='stm run hide_run'><a href='#n414'>414</a></p> -<p id='n415' class='stm run hide_run'><a href='#n415'>415</a></p> -<p id='n416' class='stm run hide_run'><a href='#n416'>416</a></p> -<p id='n417' class='stm mis'><a href='#n417'>417</a></p> -<p id='n418' class='stm mis'><a href='#n418'>418</a></p> -<p id='n419' class='stm mis'><a href='#n419'>419</a></p> -<p id='n420' class='stm mis'><a href='#n420'>420</a></p> -<p id='n421' class='pln'><a href='#n421'>421</a></p> -<p id='n422' class='stm run hide_run'><a href='#n422'>422</a></p> -<p id='n423' class='stm run hide_run'><a href='#n423'>423</a></p> -<p id='n424' class='stm run hide_run'><a href='#n424'>424</a></p> -<p id='n425' class='stm run hide_run'><a href='#n425'>425</a></p> -<p id='n426' class='stm run hide_run'><a href='#n426'>426</a></p> -<p id='n427' class='stm run hide_run'><a href='#n427'>427</a></p> -<p id='n428' class='stm mis'><a href='#n428'>428</a></p> -<p id='n429' class='stm mis'><a href='#n429'>429</a></p> -<p id='n430' class='stm mis'><a href='#n430'>430</a></p> -<p id='n431' class='pln'><a href='#n431'>431</a></p> -<p id='n432' class='stm run hide_run'><a href='#n432'>432</a></p> -<p id='n433' class='pln'><a href='#n433'>433</a></p> -<p id='n434' class='pln'><a href='#n434'>434</a></p> -<p id='n435' class='stm mis'><a href='#n435'>435</a></p> -<p id='n436' class='stm mis'><a href='#n436'>436</a></p> -<p id='n437' class='stm mis'><a href='#n437'>437</a></p> -<p id='n438' class='stm mis'><a href='#n438'>438</a></p> -<p id='n439' class='stm mis'><a href='#n439'>439</a></p> -<p id='n440' class='stm mis'><a href='#n440'>440</a></p> -<p id='n441' class='stm mis'><a href='#n441'>441</a></p> -<p id='n442' class='stm mis'><a href='#n442'>442</a></p> -<p id='n443' class='pln'><a href='#n443'>443</a></p> -<p id='n444' class='stm run hide_run'><a href='#n444'>444</a></p> -<p id='n445' class='stm run hide_run'><a href='#n445'>445</a></p> -<p id='n446' class='stm run hide_run'><a href='#n446'>446</a></p> -<p id='n447' class='stm run hide_run'><a href='#n447'>447</a></p> -<p id='n448' class='stm run hide_run'><a href='#n448'>448</a></p> -<p id='n449' class='stm run hide_run'><a href='#n449'>449</a></p> -<p id='n450' class='stm mis'><a href='#n450'>450</a></p> -<p id='n451' class='stm mis'><a href='#n451'>451</a></p> -<p id='n452' class='stm mis'><a href='#n452'>452</a></p> -<p id='n453' class='pln'><a href='#n453'>453</a></p> -<p id='n454' class='stm run hide_run'><a href='#n454'>454</a></p> -<p id='n455' class='stm run hide_run'><a href='#n455'>455</a></p> -<p id='n456' class='stm mis'><a href='#n456'>456</a></p> -<p id='n457' class='pln'><a href='#n457'>457</a></p> -<p id='n458' class='stm run hide_run'><a href='#n458'>458</a></p> -<p id='n459' class='stm run hide_run'><a href='#n459'>459</a></p> -<p id='n460' class='stm mis'><a href='#n460'>460</a></p> -<p id='n461' class='stm mis'><a href='#n461'>461</a></p> -<p id='n462' class='stm mis'><a href='#n462'>462</a></p> -<p id='n463' class='stm mis'><a href='#n463'>463</a></p> -<p id='n464' class='stm mis'><a href='#n464'>464</a></p> -<p id='n465' class='stm mis'><a href='#n465'>465</a></p> -<p id='n466' class='stm mis'><a href='#n466'>466</a></p> -<p id='n467' class='stm mis'><a href='#n467'>467</a></p> -<p id='n468' class='pln'><a href='#n468'>468</a></p> -<p id='n469' class='stm run hide_run'><a href='#n469'>469</a></p> -<p id='n470' class='stm run hide_run'><a href='#n470'>470</a></p> -<p id='n471' class='stm run hide_run'><a href='#n471'>471</a></p> -<p id='n472' class='stm mis'><a href='#n472'>472</a></p> -<p id='n473' class='stm mis'><a href='#n473'>473</a></p> -<p id='n474' class='stm mis'><a href='#n474'>474</a></p> -<p id='n475' class='pln'><a href='#n475'>475</a></p> -<p id='n476' class='stm run hide_run'><a href='#n476'>476</a></p> -<p id='n477' class='pln'><a href='#n477'>477</a></p> -<p id='n478' class='stm run hide_run'><a href='#n478'>478</a></p> -<p id='n479' class='stm mis'><a href='#n479'>479</a></p> -<p id='n480' class='pln'><a href='#n480'>480</a></p> -<p id='n481' class='stm run hide_run'><a href='#n481'>481</a></p> -<p id='n482' class='stm run hide_run'><a href='#n482'>482</a></p> -<p id='n483' class='stm run hide_run'><a href='#n483'>483</a></p> -<p id='n484' class='pln'><a href='#n484'>484</a></p> -<p id='n485' class='stm run hide_run'><a href='#n485'>485</a></p> -<p id='n486' class='stm run hide_run'><a href='#n486'>486</a></p> -<p id='n487' class='pln'><a href='#n487'>487</a></p> -<p id='n488' class='pln'><a href='#n488'>488</a></p> -<p id='n489' class='stm run hide_run'><a href='#n489'>489</a></p> -<p id='n490' class='stm mis'><a href='#n490'>490</a></p> -<p id='n491' class='pln'><a href='#n491'>491</a></p> -<p id='n492' class='pln'><a href='#n492'>492</a></p> -<p id='n493' class='pln'><a href='#n493'>493</a></p> -<p id='n494' class='stm run hide_run'><a href='#n494'>494</a></p> -<p id='n495' class='pln'><a href='#n495'>495</a></p> -<p id='n496' class='pln'><a href='#n496'>496</a></p> -<p id='n497' class='stm run hide_run'><a href='#n497'>497</a></p> -<p id='n498' class='stm run hide_run'><a href='#n498'>498</a></p> -<p id='n499' class='stm mis'><a href='#n499'>499</a></p> -<p id='n500' class='stm mis'><a href='#n500'>500</a></p> -<p id='n501' class='stm mis'><a href='#n501'>501</a></p> -<p id='n502' class='stm mis'><a href='#n502'>502</a></p> -<p id='n503' class='stm mis'><a href='#n503'>503</a></p> -<p id='n504' class='stm mis'><a href='#n504'>504</a></p> -<p id='n505' class='stm mis'><a href='#n505'>505</a></p> -<p id='n506' class='pln'><a href='#n506'>506</a></p> -<p id='n507' class='stm mis'><a href='#n507'>507</a></p> -<p id='n508' class='pln'><a href='#n508'>508</a></p> -<p id='n509' class='stm run hide_run'><a href='#n509'>509</a></p> -<p id='n510' class='stm mis'><a href='#n510'>510</a></p> -<p id='n511' class='pln'><a href='#n511'>511</a></p> -<p id='n512' class='stm run hide_run'><a href='#n512'>512</a></p> -<p id='n513' class='stm run hide_run'><a href='#n513'>513</a></p> -<p id='n514' class='stm run hide_run'><a href='#n514'>514</a></p> -<p id='n515' class='stm run hide_run'><a href='#n515'>515</a></p> -<p id='n516' class='stm run hide_run'><a href='#n516'>516</a></p> -<p id='n517' class='stm mis'><a href='#n517'>517</a></p> -<p id='n518' class='stm mis'><a href='#n518'>518</a></p> -<p id='n519' class='pln'><a href='#n519'>519</a></p> -<p id='n520' class='pln'><a href='#n520'>520</a></p> -<p id='n521' class='stm run hide_run'><a href='#n521'>521</a></p> -<p id='n522' class='pln'><a href='#n522'>522</a></p> -<p id='n523' class='stm run hide_run'><a href='#n523'>523</a></p> -<p id='n524' class='stm mis'><a href='#n524'>524</a></p> -<p id='n525' class='pln'><a href='#n525'>525</a></p> -<p id='n526' class='stm run hide_run'><a href='#n526'>526</a></p> -<p id='n527' class='pln'><a href='#n527'>527</a></p> -<p id='n528' class='stm run hide_run'><a href='#n528'>528</a></p> -<p id='n529' class='pln'><a href='#n529'>529</a></p> -<p id='n530' class='stm run hide_run'><a href='#n530'>530</a></p> -<p id='n531' class='stm run hide_run'><a href='#n531'>531</a></p> -<p id='n532' class='stm run hide_run'><a href='#n532'>532</a></p> -<p id='n533' class='stm mis'><a href='#n533'>533</a></p> -<p id='n534' class='stm mis'><a href='#n534'>534</a></p> -<p id='n535' class='stm mis'><a href='#n535'>535</a></p> -<p id='n536' class='pln'><a href='#n536'>536</a></p> -<p id='n537' class='stm run hide_run'><a href='#n537'>537</a></p> -<p id='n538' class='stm mis'><a href='#n538'>538</a></p> -<p id='n539' class='stm mis'><a href='#n539'>539</a></p> -<p id='n540' class='pln'><a href='#n540'>540</a></p> -<p id='n541' class='pln'><a href='#n541'>541</a></p> -<p id='n542' class='stm mis'><a href='#n542'>542</a></p> -<p id='n543' class='stm mis'><a href='#n543'>543</a></p> -<p id='n544' class='stm mis'><a href='#n544'>544</a></p> -<p id='n545' class='stm mis'><a href='#n545'>545</a></p> -<p id='n546' class='stm mis'><a href='#n546'>546</a></p> -<p id='n547' class='pln'><a href='#n547'>547</a></p> -<p id='n548' class='pln'><a href='#n548'>548</a></p> -<p id='n549' class='pln'><a href='#n549'>549</a></p> -<p id='n550' class='pln'><a href='#n550'>550</a></p> -<p id='n551' class='stm mis'><a href='#n551'>551</a></p> -<p id='n552' class='stm mis'><a href='#n552'>552</a></p> -<p id='n553' class='stm mis'><a href='#n553'>553</a></p> -<p id='n554' class='stm mis'><a href='#n554'>554</a></p> -<p id='n555' class='stm mis'><a href='#n555'>555</a></p> -<p id='n556' class='stm mis'><a href='#n556'>556</a></p> -<p id='n557' class='stm mis'><a href='#n557'>557</a></p> -<p id='n558' class='stm mis'><a href='#n558'>558</a></p> -<p id='n559' class='stm mis'><a href='#n559'>559</a></p> -<p id='n560' class='stm mis'><a href='#n560'>560</a></p> -<p id='n561' class='stm mis'><a href='#n561'>561</a></p> -<p id='n562' class='stm mis'><a href='#n562'>562</a></p> -<p id='n563' class='stm mis'><a href='#n563'>563</a></p> -<p id='n564' class='stm mis'><a href='#n564'>564</a></p> -<p id='n565' class='stm mis'><a href='#n565'>565</a></p> -<p id='n566' class='stm mis'><a href='#n566'>566</a></p> -<p id='n567' class='stm mis'><a href='#n567'>567</a></p> -<p id='n568' class='stm mis'><a href='#n568'>568</a></p> -<p id='n569' class='pln'><a href='#n569'>569</a></p> -<p id='n570' class='stm mis'><a href='#n570'>570</a></p> -<p id='n571' class='stm mis'><a href='#n571'>571</a></p> -<p id='n572' class='stm mis'><a href='#n572'>572</a></p> -<p id='n573' class='stm mis'><a href='#n573'>573</a></p> -<p id='n574' class='stm mis'><a href='#n574'>574</a></p> -<p id='n575' class='stm mis'><a href='#n575'>575</a></p> -<p id='n576' class='stm mis'><a href='#n576'>576</a></p> -<p id='n577' class='stm mis'><a href='#n577'>577</a></p> -<p id='n578' class='pln'><a href='#n578'>578</a></p> -<p id='n579' class='stm mis'><a href='#n579'>579</a></p> -<p id='n580' class='stm mis'><a href='#n580'>580</a></p> -<p id='n581' class='pln'><a href='#n581'>581</a></p> -<p id='n582' class='stm run hide_run'><a href='#n582'>582</a></p> -<p id='n583' class='stm run hide_run'><a href='#n583'>583</a></p> -<p id='n584' class='stm run hide_run'><a href='#n584'>584</a></p> -<p id='n585' class='pln'><a href='#n585'>585</a></p> -<p id='n586' class='pln'><a href='#n586'>586</a></p> -<p id='n587' class='stm run hide_run'><a href='#n587'>587</a></p> -<p id='n588' class='stm mis'><a href='#n588'>588</a></p> -<p id='n589' class='stm mis'><a href='#n589'>589</a></p> -<p id='n590' class='pln'><a href='#n590'>590</a></p> -<p id='n591' class='pln'><a href='#n591'>591</a></p> -<p id='n592' class='stm run hide_run'><a href='#n592'>592</a></p> -<p id='n593' class='stm mis'><a href='#n593'>593</a></p> -<p id='n594' class='pln'><a href='#n594'>594</a></p> -<p id='n595' class='stm run hide_run'><a href='#n595'>595</a></p> -<p id='n596' class='stm run hide_run'><a href='#n596'>596</a></p> -<p id='n597' class='pln'><a href='#n597'>597</a></p> -<p id='n598' class='pln'><a href='#n598'>598</a></p> -<p id='n599' class='stm run hide_run'><a href='#n599'>599</a></p> -<p id='n600' class='stm run hide_run'><a href='#n600'>600</a></p> -<p id='n601' class='stm run hide_run'><a href='#n601'>601</a></p> -<p id='n602' class='pln'><a href='#n602'>602</a></p> -<p id='n603' class='stm run hide_run'><a href='#n603'>603</a></p> -<p id='n604' class='stm run hide_run'><a href='#n604'>604</a></p> -<p id='n605' class='pln'><a href='#n605'>605</a></p> -<p id='n606' class='pln'><a href='#n606'>606</a></p> -<p id='n607' class='stm run hide_run'><a href='#n607'>607</a></p> -<p id='n608' class='stm mis'><a href='#n608'>608</a></p> -<p id='n609' class='pln'><a href='#n609'>609</a></p> -<p id='n610' class='stm run hide_run'><a href='#n610'>610</a></p> -<p id='n611' class='pln'><a href='#n611'>611</a></p> -<p id='n612' class='stm run hide_run'><a href='#n612'>612</a></p> -<p id='n613' class='stm run hide_run'><a href='#n613'>613</a></p> -<p id='n614' class='stm mis'><a href='#n614'>614</a></p> -<p id='n615' class='stm mis'><a href='#n615'>615</a></p> -<p id='n616' class='stm mis'><a href='#n616'>616</a></p> -<p id='n617' class='stm mis'><a href='#n617'>617</a></p> -<p id='n618' class='pln'><a href='#n618'>618</a></p> -<p id='n619' class='stm mis'><a href='#n619'>619</a></p> -<p id='n620' class='pln'><a href='#n620'>620</a></p> -<p id='n621' class='stm run hide_run'><a href='#n621'>621</a></p> -<p id='n622' class='stm run hide_run'><a href='#n622'>622</a></p> -<p id='n623' class='stm run hide_run'><a href='#n623'>623</a></p> -<p id='n624' class='pln'><a href='#n624'>624</a></p> -<p id='n625' class='stm run hide_run'><a href='#n625'>625</a></p> -<p id='n626' class='stm run hide_run'><a href='#n626'>626</a></p> -<p id='n627' class='stm mis'><a href='#n627'>627</a></p> -<p id='n628' class='stm run hide_run'><a href='#n628'>628</a></p> -<p id='n629' class='stm run hide_run'><a href='#n629'>629</a></p> -<p id='n630' class='stm mis'><a href='#n630'>630</a></p> -<p id='n631' class='stm mis'><a href='#n631'>631</a></p> -<p id='n632' class='pln'><a href='#n632'>632</a></p> -<p id='n633' class='stm mis'><a href='#n633'>633</a></p> -<p id='n634' class='stm mis'><a href='#n634'>634</a></p> -<p id='n635' class='pln'><a href='#n635'>635</a></p> -<p id='n636' class='stm mis'><a href='#n636'>636</a></p> -<p id='n637' class='pln'><a href='#n637'>637</a></p> -<p id='n638' class='stm mis'><a href='#n638'>638</a></p> -<p id='n639' class='stm mis'><a href='#n639'>639</a></p> -<p id='n640' class='stm mis'><a href='#n640'>640</a></p> -<p id='n641' class='stm mis'><a href='#n641'>641</a></p> -<p id='n642' class='stm mis'><a href='#n642'>642</a></p> -<p id='n643' class='pln'><a href='#n643'>643</a></p> -<p id='n644' class='pln'><a href='#n644'>644</a></p> -<p id='n645' class='stm mis'><a href='#n645'>645</a></p> -<p id='n646' class='pln'><a href='#n646'>646</a></p> -<p id='n647' class='pln'><a href='#n647'>647</a></p> -<p id='n648' class='pln'><a href='#n648'>648</a></p> -<p id='n649' class='pln'><a href='#n649'>649</a></p> -<p id='n650' class='pln'><a href='#n650'>650</a></p> -<p id='n651' class='pln'><a href='#n651'>651</a></p> -<p id='n652' class='pln'><a href='#n652'>652</a></p> -<p id='n653' class='pln'><a href='#n653'>653</a></p> -<p id='n654' class='stm mis'><a href='#n654'>654</a></p> -<p id='n655' class='stm mis'><a href='#n655'>655</a></p> -<p id='n656' class='stm mis'><a href='#n656'>656</a></p> -<p id='n657' class='pln'><a href='#n657'>657</a></p> -<p id='n658' class='pln'><a href='#n658'>658</a></p> -<p id='n659' class='stm mis'><a href='#n659'>659</a></p> -<p id='n660' class='stm mis'><a href='#n660'>660</a></p> -<p id='n661' class='stm mis'><a href='#n661'>661</a></p> -<p id='n662' class='pln'><a href='#n662'>662</a></p> -<p id='n663' class='stm mis'><a href='#n663'>663</a></p> -<p id='n664' class='stm mis'><a href='#n664'>664</a></p> -<p id='n665' class='stm mis'><a href='#n665'>665</a></p> -<p id='n666' class='pln'><a href='#n666'>666</a></p> -<p id='n667' class='stm run hide_run'><a href='#n667'>667</a></p> -<p id='n668' class='stm mis'><a href='#n668'>668</a></p> -<p id='n669' class='stm mis'><a href='#n669'>669</a></p> -<p id='n670' class='pln'><a href='#n670'>670</a></p> -<p id='n671' class='stm run hide_run'><a href='#n671'>671</a></p> -<p id='n672' class='stm run hide_run'><a href='#n672'>672</a></p> -<p id='n673' class='stm run hide_run'><a href='#n673'>673</a></p> -<p id='n674' class='stm run hide_run'><a href='#n674'>674</a></p> -<p id='n675' class='stm run hide_run'><a href='#n675'>675</a></p> -<p id='n676' class='stm run hide_run'><a href='#n676'>676</a></p> -<p id='n677' class='stm run hide_run'><a href='#n677'>677</a></p> -<p id='n678' class='stm run hide_run'><a href='#n678'>678</a></p> -<p id='n679' class='pln'><a href='#n679'>679</a></p> -<p id='n680' class='stm run hide_run'><a href='#n680'>680</a></p> -<p id='n681' class='stm run hide_run'><a href='#n681'>681</a></p> -<p id='n682' class='stm run hide_run'><a href='#n682'>682</a></p> -<p id='n683' class='stm run hide_run'><a href='#n683'>683</a></p> -<p id='n684' class='stm run hide_run'><a href='#n684'>684</a></p> -<p id='n685' class='stm run hide_run'><a href='#n685'>685</a></p> -<p id='n686' class='pln'><a href='#n686'>686</a></p> -<p id='n687' class='pln'><a href='#n687'>687</a></p> -<p id='n688' class='stm run hide_run'><a href='#n688'>688</a></p> -<p id='n689' class='stm run hide_run'><a href='#n689'>689</a></p> -<p id='n690' class='stm run hide_run'><a href='#n690'>690</a></p> -<p id='n691' class='stm run hide_run'><a href='#n691'>691</a></p> -<p id='n692' class='stm run hide_run'><a href='#n692'>692</a></p> -<p id='n693' class='stm run hide_run'><a href='#n693'>693</a></p> -<p id='n694' class='stm mis'><a href='#n694'>694</a></p> -<p id='n695' class='stm mis'><a href='#n695'>695</a></p> -<p id='n696' class='stm mis'><a href='#n696'>696</a></p> -<p id='n697' class='stm run hide_run'><a href='#n697'>697</a></p> -<p id='n698' class='stm run hide_run'><a href='#n698'>698</a></p> -<p id='n699' class='stm mis'><a href='#n699'>699</a></p> -<p id='n700' class='stm mis'><a href='#n700'>700</a></p> -<p id='n701' class='stm mis'><a href='#n701'>701</a></p> -<p id='n702' class='stm run hide_run'><a href='#n702'>702</a></p> -<p id='n703' class='stm run hide_run'><a href='#n703'>703</a></p> -<p id='n704' class='pln'><a href='#n704'>704</a></p> -<p id='n705' class='pln'><a href='#n705'>705</a></p> -<p id='n706' class='stm run hide_run'><a href='#n706'>706</a></p> -<p id='n707' class='stm run hide_run'><a href='#n707'>707</a></p> -<p id='n708' class='stm mis'><a href='#n708'>708</a></p> -<p id='n709' class='pln'><a href='#n709'>709</a></p> -<p id='n710' class='stm run hide_run'><a href='#n710'>710</a></p> -<p id='n711' class='stm run hide_run'><a href='#n711'>711</a></p> -<p id='n712' class='stm run hide_run'><a href='#n712'>712</a></p> -<p id='n713' class='pln'><a href='#n713'>713</a></p> -<p id='n714' class='pln'><a href='#n714'>714</a></p> -<p id='n715' class='stm run hide_run'><a href='#n715'>715</a></p> -<p id='n716' class='pln'><a href='#n716'>716</a></p> -<p id='n717' class='stm run hide_run'><a href='#n717'>717</a></p> -<p id='n718' class='stm mis'><a href='#n718'>718</a></p> -<p id='n719' class='stm mis'><a href='#n719'>719</a></p> -<p id='n720' class='stm run hide_run'><a href='#n720'>720</a></p> -<p id='n721' class='stm run hide_run'><a href='#n721'>721</a></p> -<p id='n722' class='stm run hide_run'><a href='#n722'>722</a></p> -<p id='n723' class='stm mis'><a href='#n723'>723</a></p> -<p id='n724' class='stm run hide_run'><a href='#n724'>724</a></p> -<p id='n725' class='pln'><a href='#n725'>725</a></p> -<p id='n726' class='pln'><a href='#n726'>726</a></p> -<p id='n727' class='stm run hide_run'><a href='#n727'>727</a></p> -<p id='n728' class='stm run hide_run'><a href='#n728'>728</a></p> -<p id='n729' class='pln'><a href='#n729'>729</a></p> -<p id='n730' class='stm run hide_run'><a href='#n730'>730</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='pln'><span class='com'>#!/usr/bin/env python</span><span class='strut'> </span></p> -<p id='t2' class='pln'><span class='com'># -*- coding: utf-8 -*-</span><span class='strut'> </span></p> -<p id='t3' class='pln'><span class='strut'> </span></p> -<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>absolute_import</span><span class='strut'> </span></p> -<p id='t5' class='pln'><span class='strut'> </span></p> -<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>math</span><span class='strut'> </span></p> -<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>io</span><span class='strut'> </span></p> -<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='strut'> </span></p> -<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>re</span><span class='strut'> </span></p> -<p id='t10' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>socket</span><span class='strut'> </span></p> -<p id='t11' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>subprocess</span><span class='strut'> </span></p> -<p id='t12' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>sys</span><span class='strut'> </span></p> -<p id='t13' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>time</span><span class='strut'> </span></p> -<p id='t14' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>traceback</span><span class='strut'> </span></p> -<p id='t15' class='pln'><span class='strut'> </span></p> -<p id='t16' class='stm run hide_run'><span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>name</span> <span class='op'>==</span> <span class='str'>'nt'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t17' class='stm mis'> <span class='key'>import</span> <span class='nam'>ctypes</span><span class='strut'> </span></p> -<p id='t18' class='pln'><span class='strut'> </span></p> -<p id='t19' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>utils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t20' class='pln'><span class='strut'> </span></p> -<p id='t21' class='pln'><span class='strut'> </span></p> -<p id='t22' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FileDownloader</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t23' class='pln'> <span class='str'>"""File Downloader class.</span><span class='strut'> </span></p> -<p id='t24' class='pln'><span class='strut'> </span></p> -<p id='t25' class='pln'><span class='str'> File downloader objects are the ones responsible of downloading the</span><span class='strut'> </span></p> -<p id='t26' class='pln'><span class='str'> actual video file and writing it to disk if the user has requested</span><span class='strut'> </span></p> -<p id='t27' class='pln'><span class='str'> it, among some other tasks. In most cases there should be one per</span><span class='strut'> </span></p> -<p id='t28' class='pln'><span class='str'> program. As, given a video URL, the downloader doesn't know how to</span><span class='strut'> </span></p> -<p id='t29' class='pln'><span class='str'> extract all the needed information, task that InfoExtractors do, it</span><span class='strut'> </span></p> -<p id='t30' class='pln'><span class='str'> has to pass the URL to one of them.</span><span class='strut'> </span></p> -<p id='t31' class='pln'><span class='strut'> </span></p> -<p id='t32' class='pln'><span class='str'> For this, file downloader objects have a method that allows</span><span class='strut'> </span></p> -<p id='t33' class='pln'><span class='str'> InfoExtractors to be registered in a given order. When it is passed</span><span class='strut'> </span></p> -<p id='t34' class='pln'><span class='str'> a URL, the file downloader handles it to the first InfoExtractor it</span><span class='strut'> </span></p> -<p id='t35' class='pln'><span class='str'> finds that reports being able to handle it. The InfoExtractor extracts</span><span class='strut'> </span></p> -<p id='t36' class='pln'><span class='str'> all the information about the video or videos the URL refers to, and</span><span class='strut'> </span></p> -<p id='t37' class='pln'><span class='str'> asks the FileDownloader to process the video information, possibly</span><span class='strut'> </span></p> -<p id='t38' class='pln'><span class='str'> downloading the video.</span><span class='strut'> </span></p> -<p id='t39' class='pln'><span class='strut'> </span></p> -<p id='t40' class='pln'><span class='str'> File downloaders accept a lot of parameters. In order not to saturate</span><span class='strut'> </span></p> -<p id='t41' class='pln'><span class='str'> the object constructor with arguments, it receives a dictionary of</span><span class='strut'> </span></p> -<p id='t42' class='pln'><span class='str'> options instead. These options are available through the params</span><span class='strut'> </span></p> -<p id='t43' class='pln'><span class='str'> attribute for the InfoExtractors to use. The FileDownloader also</span><span class='strut'> </span></p> -<p id='t44' class='pln'><span class='str'> registers itself as the downloader in charge for the InfoExtractors</span><span class='strut'> </span></p> -<p id='t45' class='pln'><span class='str'> that are added to it, so this is a "mutual registration".</span><span class='strut'> </span></p> -<p id='t46' class='pln'><span class='strut'> </span></p> -<p id='t47' class='pln'><span class='str'> Available options:</span><span class='strut'> </span></p> -<p id='t48' class='pln'><span class='strut'> </span></p> -<p id='t49' class='pln'><span class='str'> username: Username for authentication purposes.</span><span class='strut'> </span></p> -<p id='t50' class='pln'><span class='str'> password: Password for authentication purposes.</span><span class='strut'> </span></p> -<p id='t51' class='pln'><span class='str'> usenetrc: Use netrc for authentication instead.</span><span class='strut'> </span></p> -<p id='t52' class='pln'><span class='str'> quiet: Do not print messages to stdout.</span><span class='strut'> </span></p> -<p id='t53' class='pln'><span class='str'> forceurl: Force printing final URL.</span><span class='strut'> </span></p> -<p id='t54' class='pln'><span class='str'> forcetitle: Force printing title.</span><span class='strut'> </span></p> -<p id='t55' class='pln'><span class='str'> forcethumbnail: Force printing thumbnail URL.</span><span class='strut'> </span></p> -<p id='t56' class='pln'><span class='str'> forcedescription: Force printing description.</span><span class='strut'> </span></p> -<p id='t57' class='pln'><span class='str'> forcefilename: Force printing final filename.</span><span class='strut'> </span></p> -<p id='t58' class='pln'><span class='str'> simulate: Do not download the video files.</span><span class='strut'> </span></p> -<p id='t59' class='pln'><span class='str'> format: Video format code.</span><span class='strut'> </span></p> -<p id='t60' class='pln'><span class='str'> format_limit: Highest quality format to try.</span><span class='strut'> </span></p> -<p id='t61' class='pln'><span class='str'> outtmpl: Template for output names.</span><span class='strut'> </span></p> -<p id='t62' class='pln'><span class='str'> restrictfilenames: Do not allow "&" and spaces in file names</span><span class='strut'> </span></p> -<p id='t63' class='pln'><span class='str'> ignoreerrors: Do not stop on download errors.</span><span class='strut'> </span></p> -<p id='t64' class='pln'><span class='str'> ratelimit: Download speed limit, in bytes/sec.</span><span class='strut'> </span></p> -<p id='t65' class='pln'><span class='str'> nooverwrites: Prevent overwriting files.</span><span class='strut'> </span></p> -<p id='t66' class='pln'><span class='str'> retries: Number of times to retry for HTTP error 5xx</span><span class='strut'> </span></p> -<p id='t67' class='pln'><span class='str'> buffersize: Size of download buffer in bytes.</span><span class='strut'> </span></p> -<p id='t68' class='pln'><span class='str'> noresizebuffer: Do not automatically resize the download buffer.</span><span class='strut'> </span></p> -<p id='t69' class='pln'><span class='str'> continuedl: Try to continue downloads if possible.</span><span class='strut'> </span></p> -<p id='t70' class='pln'><span class='str'> noprogress: Do not print the progress bar.</span><span class='strut'> </span></p> -<p id='t71' class='pln'><span class='str'> playliststart: Playlist item to start at.</span><span class='strut'> </span></p> -<p id='t72' class='pln'><span class='str'> playlistend: Playlist item to end at.</span><span class='strut'> </span></p> -<p id='t73' class='pln'><span class='str'> matchtitle: Download only matching titles.</span><span class='strut'> </span></p> -<p id='t74' class='pln'><span class='str'> rejecttitle: Reject downloads for matching titles.</span><span class='strut'> </span></p> -<p id='t75' class='pln'><span class='str'> logtostderr: Log messages to stderr instead of stdout.</span><span class='strut'> </span></p> -<p id='t76' class='pln'><span class='str'> consoletitle: Display progress in console window's titlebar.</span><span class='strut'> </span></p> -<p id='t77' class='pln'><span class='str'> nopart: Do not use temporary .part files.</span><span class='strut'> </span></p> -<p id='t78' class='pln'><span class='str'> updatetime: Use the Last-modified header to set output file timestamps.</span><span class='strut'> </span></p> -<p id='t79' class='pln'><span class='str'> writedescription: Write the video description to a .description file</span><span class='strut'> </span></p> -<p id='t80' class='pln'><span class='str'> writeinfojson: Write the video description to a .info.json file</span><span class='strut'> </span></p> -<p id='t81' class='pln'><span class='str'> writesubtitles: Write the video subtitles to a .srt file</span><span class='strut'> </span></p> -<p id='t82' class='pln'><span class='str'> subtitleslang: Language of the subtitles to download</span><span class='strut'> </span></p> -<p id='t83' class='pln'><span class='str'> test: Download only first bytes to test the downloader.</span><span class='strut'> </span></p> -<p id='t84' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t85' class='pln'><span class='strut'> </span></p> -<p id='t86' class='stm run hide_run'> <span class='nam'>params</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t87' class='stm run hide_run'> <span class='nam'>_ies</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t88' class='stm run hide_run'> <span class='nam'>_pps</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t89' class='stm run hide_run'> <span class='nam'>_download_retcode</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t90' class='stm run hide_run'> <span class='nam'>_num_downloads</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t91' class='stm run hide_run'> <span class='nam'>_screen_file</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t92' class='pln'><span class='strut'> </span></p> -<p id='t93' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>params</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t94' class='pln'> <span class='str'>"""Create a FileDownloader object with the given options."""</span><span class='strut'> </span></p> -<p id='t95' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ies</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t96' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_pps</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t97' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_retcode</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t98' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_num_downloads</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t99' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_screen_file</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'logtostderr'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t100' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span> <span class='op'>=</span> <span class='nam'>params</span><span class='strut'> </span></p> -<p id='t101' class='pln'><span class='strut'> </span></p> -<p id='t102' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'%(stitle)s'</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>[</span><span class='str'>'outtmpl'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t103' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: %(stitle)s is deprecated. Use the %(title)s and the --restrict-filenames flag(which also secures %(uploader)s et al) instead.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t104' class='pln'><span class='strut'> </span></p> -<p id='t105' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t106' class='pln'> <span class='key'>def</span> <span class='nam'>format_bytes</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t107' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>bytes</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t108' class='stm mis'> <span class='key'>return</span> <span class='str'>'N/A'</span><span class='strut'> </span></p> -<p id='t109' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>str</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t110' class='stm mis'> <span class='nam'>bytes</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t111' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>bytes</span> <span class='op'>==</span> <span class='num'>0.0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t112' class='stm mis'> <span class='nam'>exponent</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t113' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t114' class='stm run hide_run'> <span class='nam'>exponent</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>math</span><span class='op'>.</span><span class='nam'>log</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>,</span> <span class='num'>1024.0</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t115' class='stm run hide_run'> <span class='nam'>suffix</span> <span class='op'>=</span> <span class='str'>'bkMGTPEZY'</span><span class='op'>[</span><span class='nam'>exponent</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t116' class='stm run hide_run'> <span class='nam'>converted</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>float</span><span class='op'>(</span><span class='num'>1024</span> <span class='op'>**</span> <span class='nam'>exponent</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t117' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'%.2f%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>converted</span><span class='op'>,</span> <span class='nam'>suffix</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t118' class='pln'><span class='strut'> </span></p> -<p id='t119' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t120' class='pln'> <span class='key'>def</span> <span class='nam'>calc_percent</span><span class='op'>(</span><span class='nam'>byte_counter</span><span class='op'>,</span> <span class='nam'>data_len</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t121' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>data_len</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t122' class='stm mis'> <span class='key'>return</span> <span class='str'>'---.-%'</span><span class='strut'> </span></p> -<p id='t123' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'%6s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='str'>'%3.1f%%'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>float</span><span class='op'>(</span><span class='nam'>byte_counter</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>data_len</span><span class='op'>)</span> <span class='op'>*</span> <span class='num'>100.0</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t124' class='pln'><span class='strut'> </span></p> -<p id='t125' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t126' class='pln'> <span class='key'>def</span> <span class='nam'>calc_eta</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>now</span><span class='op'>,</span> <span class='nam'>total</span><span class='op'>,</span> <span class='nam'>current</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t127' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>total</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t128' class='stm mis'> <span class='key'>return</span> <span class='str'>'--:--'</span><span class='strut'> </span></p> -<p id='t129' class='stm run hide_run'> <span class='nam'>dif</span> <span class='op'>=</span> <span class='nam'>now</span> <span class='op'>-</span> <span class='nam'>start</span><span class='strut'> </span></p> -<p id='t130' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>current</span> <span class='op'>==</span> <span class='num'>0</span> <span class='key'>or</span> <span class='nam'>dif</span> <span class='op'><</span> <span class='num'>0.001</span><span class='op'>:</span> <span class='com'># One millisecond</span><span class='strut'> </span></p> -<p id='t131' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'--:--'</span><span class='strut'> </span></p> -<p id='t132' class='stm run hide_run'> <span class='nam'>rate</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>current</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>dif</span><span class='strut'> </span></p> -<p id='t133' class='stm run hide_run'> <span class='nam'>eta</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>float</span><span class='op'>(</span><span class='nam'>total</span><span class='op'>)</span> <span class='op'>-</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>current</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>rate</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t134' class='stm run hide_run'> <span class='op'>(</span><span class='nam'>eta_mins</span><span class='op'>,</span> <span class='nam'>eta_secs</span><span class='op'>)</span> <span class='op'>=</span> <span class='nam'>divmod</span><span class='op'>(</span><span class='nam'>eta</span><span class='op'>,</span> <span class='num'>60</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t135' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>eta_mins</span> <span class='op'>></span> <span class='num'>99</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t136' class='stm mis'> <span class='key'>return</span> <span class='str'>'--:--'</span><span class='strut'> </span></p> -<p id='t137' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'%02d:%02d'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>eta_mins</span><span class='op'>,</span> <span class='nam'>eta_secs</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t138' class='pln'><span class='strut'> </span></p> -<p id='t139' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t140' class='pln'> <span class='key'>def</span> <span class='nam'>calc_speed</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>now</span><span class='op'>,</span> <span class='nam'>bytes</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t141' class='stm run hide_run'> <span class='nam'>dif</span> <span class='op'>=</span> <span class='nam'>now</span> <span class='op'>-</span> <span class='nam'>start</span><span class='strut'> </span></p> -<p id='t142' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>bytes</span> <span class='op'>==</span> <span class='num'>0</span> <span class='key'>or</span> <span class='nam'>dif</span> <span class='op'><</span> <span class='num'>0.001</span><span class='op'>:</span> <span class='com'># One millisecond</span><span class='strut'> </span></p> -<p id='t143' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'%10s'</span> <span class='op'>%</span> <span class='str'>'---b/s'</span><span class='strut'> </span></p> -<p id='t144' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'%10s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='str'>'%s/s'</span> <span class='op'>%</span> <span class='nam'>FileDownloader</span><span class='op'>.</span><span class='nam'>format_bytes</span><span class='op'>(</span><span class='nam'>float</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>dif</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t145' class='pln'><span class='strut'> </span></p> -<p id='t146' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t147' class='pln'> <span class='key'>def</span> <span class='nam'>best_block_size</span><span class='op'>(</span><span class='nam'>elapsed_time</span><span class='op'>,</span> <span class='nam'>bytes</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t148' class='stm run hide_run'> <span class='nam'>new_min</span> <span class='op'>=</span> <span class='nam'>max</span><span class='op'>(</span><span class='nam'>bytes</span> <span class='op'>/</span> <span class='num'>2.0</span><span class='op'>,</span> <span class='num'>1.0</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t149' class='stm run hide_run'> <span class='nam'>new_max</span> <span class='op'>=</span> <span class='nam'>min</span><span class='op'>(</span><span class='nam'>max</span><span class='op'>(</span><span class='nam'>bytes</span> <span class='op'>*</span> <span class='num'>2.0</span><span class='op'>,</span> <span class='num'>1.0</span><span class='op'>)</span><span class='op'>,</span> <span class='num'>4194304</span><span class='op'>)</span> <span class='com'># Do not surpass 4 MB</span><span class='strut'> </span></p> -<p id='t150' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>elapsed_time</span> <span class='op'><</span> <span class='num'>0.001</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t151' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>new_max</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t152' class='stm run hide_run'> <span class='nam'>rate</span> <span class='op'>=</span> <span class='nam'>bytes</span> <span class='op'>/</span> <span class='nam'>elapsed_time</span><span class='strut'> </span></p> -<p id='t153' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>rate</span> <span class='op'>></span> <span class='nam'>new_max</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t154' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>new_max</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t155' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>rate</span> <span class='op'><</span> <span class='nam'>new_min</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t156' class='stm mis'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>new_min</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t157' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>rate</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t158' class='pln'><span class='strut'> </span></p> -<p id='t159' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t160' class='pln'> <span class='key'>def</span> <span class='nam'>parse_bytes</span><span class='op'>(</span><span class='nam'>bytestr</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t161' class='pln'> <span class='str'>"""Parse a string indicating a byte quantity into an integer."""</span><span class='strut'> </span></p> -<p id='t162' class='stm mis'> <span class='nam'>matchobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r'(?i)^(\d+(?:\.\d+)?)([kMGTPEZY]?)$'</span><span class='op'>,</span> <span class='nam'>bytestr</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t163' class='stm mis'> <span class='key'>if</span> <span class='nam'>matchobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t164' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t165' class='stm mis'> <span class='nam'>number</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>matchobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t166' class='stm mis'> <span class='nam'>multiplier</span> <span class='op'>=</span> <span class='num'>1024.0</span> <span class='op'>**</span> <span class='str'>'bkmgtpezy'</span><span class='op'>.</span><span class='nam'>index</span><span class='op'>(</span><span class='nam'>matchobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>lower</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t167' class='stm mis'> <span class='key'>return</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>round</span><span class='op'>(</span><span class='nam'>number</span> <span class='op'>*</span> <span class='nam'>multiplier</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t168' class='pln'><span class='strut'> </span></p> -<p id='t169' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>add_info_extractor</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>ie</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t170' class='pln'> <span class='str'>"""Add an InfoExtractor object to the end of the list."""</span><span class='strut'> </span></p> -<p id='t171' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ies</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>ie</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t172' class='stm run hide_run'> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t173' class='pln'><span class='strut'> </span></p> -<p id='t174' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>add_post_processor</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pp</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t175' class='pln'> <span class='str'>"""Add a PostProcessor object to the end of the chain."""</span><span class='strut'> </span></p> -<p id='t176' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_pps</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>pp</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t177' class='stm mis'> <span class='nam'>pp</span><span class='op'>.</span><span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t178' class='pln'><span class='strut'> </span></p> -<p id='t179' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>,</span> <span class='nam'>skip_eol</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t180' class='pln'> <span class='str'>"""Print message to stdout if not in quiet mode."""</span><span class='strut'> </span></p> -<p id='t181' class='stm run hide_run'> <span class='key'>assert</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>type</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t182' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'quiet'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t183' class='stm run hide_run'> <span class='nam'>terminator</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>u'\n'</span><span class='op'>,</span> <span class='str'>u''</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>skip_eol</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t184' class='stm run hide_run'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>message</span> <span class='op'>+</span> <span class='nam'>terminator</span><span class='strut'> </span></p> -<p id='t185' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'b'</span> <span class='key'>in</span> <span class='nam'>getattr</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_screen_file</span><span class='op'>,</span> <span class='str'>'mode'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>version_info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'><</span> <span class='num'>3</span><span class='op'>:</span> <span class='com'># Python 2 lies about the mode of sys.stdout/sys.stderr</span><span class='strut'> </span></p> -<p id='t186' class='stm run hide_run'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>output</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'ignore'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t187' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_screen_file</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t188' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_screen_file</span><span class='op'>.</span><span class='nam'>flush</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t189' class='pln'><span class='strut'> </span></p> -<p id='t190' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>to_stderr</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t191' class='pln'> <span class='str'>"""Print message to stderr."""</span><span class='strut'> </span></p> -<p id='t192' class='stm mis'> <span class='key'>assert</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>type</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t193' class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>message</span> <span class='op'>+</span> <span class='str'>u'\n'</span><span class='strut'> </span></p> -<p id='t194' class='stm mis'> <span class='key'>if</span> <span class='str'>'b'</span> <span class='key'>in</span> <span class='nam'>getattr</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_screen_file</span><span class='op'>,</span> <span class='str'>'mode'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>version_info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'><</span> <span class='num'>3</span><span class='op'>:</span> <span class='com'># Python 2 lies about the mode of sys.stdout/sys.stderr</span><span class='strut'> </span></p> -<p id='t195' class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>output</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t196' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t197' class='pln'><span class='strut'> </span></p> -<p id='t198' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>to_cons_title</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t199' class='pln'> <span class='str'>"""Set console/terminal window title to message."""</span><span class='strut'> </span></p> -<p id='t200' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'consoletitle'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t201' class='stm run hide_run'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t202' class='stm mis'> <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>name</span> <span class='op'>==</span> <span class='str'>'nt'</span> <span class='key'>and</span> <span class='nam'>ctypes</span><span class='op'>.</span><span class='nam'>windll</span><span class='op'>.</span><span class='nam'>kernel32</span><span class='op'>.</span><span class='nam'>GetConsoleWindow</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t203' class='pln'> <span class='com'># c_wchar_p() might not be necessary if `message` is</span><span class='strut'> </span></p> -<p id='t204' class='pln'> <span class='com'># already of type unicode()</span><span class='strut'> </span></p> -<p id='t205' class='stm mis'> <span class='nam'>ctypes</span><span class='op'>.</span><span class='nam'>windll</span><span class='op'>.</span><span class='nam'>kernel32</span><span class='op'>.</span><span class='nam'>SetConsoleTitleW</span><span class='op'>(</span><span class='nam'>ctypes</span><span class='op'>.</span><span class='nam'>c_wchar_p</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t206' class='stm mis'> <span class='key'>elif</span> <span class='str'>'TERM'</span> <span class='key'>in</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>environ</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t207' class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='str'>'\033]0;%s\007'</span> <span class='op'>%</span> <span class='nam'>message</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t208' class='pln'><span class='strut'> </span></p> -<p id='t209' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>fixed_template</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t210' class='pln'> <span class='str'>"""Checks if the output template is fixed."""</span><span class='strut'> </span></p> -<p id='t211' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>u'(?u)%\\(.+?\\)s'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>[</span><span class='str'>'outtmpl'</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t212' class='pln'><span class='strut'> </span></p> -<p id='t213' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>trouble</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>tb</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t214' class='pln'> <span class='str'>"""Determine action to take when a download problem appears.</span><span class='strut'> </span></p> -<p id='t215' class='pln'><span class='strut'> </span></p> -<p id='t216' class='pln'><span class='str'> Depending on if the downloader has been configured to ignore</span><span class='strut'> </span></p> -<p id='t217' class='pln'><span class='str'> download errors or not, this method may throw an exception or</span><span class='strut'> </span></p> -<p id='t218' class='pln'><span class='str'> not when errors are found, after printing the message.</span><span class='strut'> </span></p> -<p id='t219' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t220' class='stm mis'> <span class='key'>if</span> <span class='nam'>message</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t221' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t222' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'verbose'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t223' class='stm mis'> <span class='key'>if</span> <span class='nam'>tb</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t224' class='stm mis'> <span class='nam'>tb</span> <span class='op'>=</span> <span class='str'>u''</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_list</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>extract_stack</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t225' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='nam'>tb</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t226' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'ignoreerrors'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t227' class='stm mis'> <span class='key'>raise</span> <span class='nam'>DownloadError</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t228' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_retcode</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t229' class='pln'><span class='strut'> </span></p> -<p id='t230' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>slow_down</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>start_time</span><span class='op'>,</span> <span class='nam'>byte_counter</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t231' class='pln'> <span class='str'>"""Sleep if the download speed is over the rate limit."""</span><span class='strut'> </span></p> -<p id='t232' class='stm run hide_run'> <span class='nam'>rate_limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'ratelimit'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t233' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>rate_limit</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>byte_counter</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t234' class='stm run hide_run'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t235' class='stm mis'> <span class='nam'>now</span> <span class='op'>=</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t236' class='stm mis'> <span class='nam'>elapsed</span> <span class='op'>=</span> <span class='nam'>now</span> <span class='op'>-</span> <span class='nam'>start_time</span><span class='strut'> </span></p> -<p id='t237' class='stm mis'> <span class='key'>if</span> <span class='nam'>elapsed</span> <span class='op'><=</span> <span class='num'>0.0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t238' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t239' class='stm mis'> <span class='nam'>speed</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>byte_counter</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>elapsed</span><span class='strut'> </span></p> -<p id='t240' class='stm mis'> <span class='key'>if</span> <span class='nam'>speed</span> <span class='op'>></span> <span class='nam'>rate_limit</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t241' class='stm mis'> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>sleep</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>byte_counter</span> <span class='op'>-</span> <span class='nam'>rate_limit</span> <span class='op'>*</span> <span class='op'>(</span><span class='nam'>now</span> <span class='op'>-</span> <span class='nam'>start_time</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>/</span> <span class='nam'>rate_limit</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t242' class='pln'><span class='strut'> </span></p> -<p id='t243' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>temp_name</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t244' class='pln'> <span class='str'>"""Returns a temporary filename for the given filename."""</span><span class='strut'> </span></p> -<p id='t245' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'nopart'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>filename</span> <span class='op'>==</span> <span class='str'>u'-'</span> <span class='key'>or</span> <span class='xx'>\</span><span class='strut'> </span></p> -<p id='t246' class='pln'> <span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>exists</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>)</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t247' class='stm mis'> <span class='key'>return</span> <span class='nam'>filename</span><span class='strut'> </span></p> -<p id='t248' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>filename</span> <span class='op'>+</span> <span class='str'>u'.part'</span><span class='strut'> </span></p> -<p id='t249' class='pln'><span class='strut'> </span></p> -<p id='t250' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>undo_temp_name</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t251' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>filename</span><span class='op'>.</span><span class='nam'>endswith</span><span class='op'>(</span><span class='str'>u'.part'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t252' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>filename</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='nam'>len</span><span class='op'>(</span><span class='str'>u'.part'</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t253' class='stm mis'> <span class='key'>return</span> <span class='nam'>filename</span><span class='strut'> </span></p> -<p id='t254' class='pln'><span class='strut'> </span></p> -<p id='t255' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>try_rename</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>old_filename</span><span class='op'>,</span> <span class='nam'>new_filename</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t256' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t257' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>old_filename</span> <span class='op'>==</span> <span class='nam'>new_filename</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t258' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t259' class='stm run hide_run'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>rename</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>old_filename</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>new_filename</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t260' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t261' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to rename file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t262' class='pln'><span class='strut'> </span></p> -<p id='t263' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>try_utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>last_modified_hdr</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t264' class='pln'> <span class='str'>"""Try to set the last-modified time of the given file."""</span><span class='strut'> </span></p> -<p id='t265' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>last_modified_hdr</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t266' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t267' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t268' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t269' class='stm run hide_run'> <span class='nam'>timestr</span> <span class='op'>=</span> <span class='nam'>last_modified_hdr</span><span class='strut'> </span></p> -<p id='t270' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>timestr</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t271' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t272' class='stm run hide_run'> <span class='nam'>filetime</span> <span class='op'>=</span> <span class='nam'>timeconvert</span><span class='op'>(</span><span class='nam'>timestr</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t273' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>filetime</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t274' class='stm mis'> <span class='key'>return</span> <span class='nam'>filetime</span><span class='strut'> </span></p> -<p id='t275' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t276' class='stm run hide_run'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>utime</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>filetime</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t277' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t278' class='stm mis'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t279' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>filetime</span><span class='strut'> </span></p> -<p id='t280' class='pln'><span class='strut'> </span></p> -<p id='t281' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_writedescription</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>descfn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t282' class='pln'> <span class='str'>""" Report that the description file is being written """</span><span class='strut'> </span></p> -<p id='t283' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[info] Writing video description to: '</span> <span class='op'>+</span> <span class='nam'>descfn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t284' class='pln'><span class='strut'> </span></p> -<p id='t285' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_writesubtitles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>srtfn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t286' class='pln'> <span class='str'>""" Report that the subtitles file is being written """</span><span class='strut'> </span></p> -<p id='t287' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[info] Writing video subtitles to: '</span> <span class='op'>+</span> <span class='nam'>srtfn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t288' class='pln'><span class='strut'> </span></p> -<p id='t289' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_writeinfojson</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>infofn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t290' class='pln'> <span class='str'>""" Report that the metadata file has been written """</span><span class='strut'> </span></p> -<p id='t291' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[info] Video description metadata as JSON to: '</span> <span class='op'>+</span> <span class='nam'>infofn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t292' class='pln'><span class='strut'> </span></p> -<p id='t293' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_destination</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t294' class='pln'> <span class='str'>"""Report destination filename."""</span><span class='strut'> </span></p> -<p id='t295' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] Destination: '</span> <span class='op'>+</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t296' class='pln'><span class='strut'> </span></p> -<p id='t297' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_progress</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>percent_str</span><span class='op'>,</span> <span class='nam'>data_len_str</span><span class='op'>,</span> <span class='nam'>speed_str</span><span class='op'>,</span> <span class='nam'>eta_str</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t298' class='pln'> <span class='str'>"""Report download progress."""</span><span class='strut'> </span></p> -<p id='t299' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'noprogress'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t300' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t301' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'\r[download] %s of %s at %s ETA %s'</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t302' class='pln'> <span class='op'>(</span><span class='nam'>percent_str</span><span class='op'>,</span> <span class='nam'>data_len_str</span><span class='op'>,</span> <span class='nam'>speed_str</span><span class='op'>,</span> <span class='nam'>eta_str</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>skip_eol</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t303' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_cons_title</span><span class='op'>(</span><span class='str'>u'youtube-dl - %s of %s at %s ETA %s'</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t304' class='pln'> <span class='op'>(</span><span class='nam'>percent_str</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>data_len_str</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>speed_str</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>eta_str</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t305' class='pln'><span class='strut'> </span></p> -<p id='t306' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_resuming_byte</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>resume_len</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t307' class='pln'> <span class='str'>"""Report attempt to resume at given byte."""</span><span class='strut'> </span></p> -<p id='t308' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] Resuming download at byte %s'</span> <span class='op'>%</span> <span class='nam'>resume_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t309' class='pln'><span class='strut'> </span></p> -<p id='t310' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_retry</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>count</span><span class='op'>,</span> <span class='nam'>retries</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t311' class='pln'> <span class='str'>"""Report retry in case of HTTP error 5xx"""</span><span class='strut'> </span></p> -<p id='t312' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] Got server HTTP error. Retrying (attempt %d of %d)...'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>count</span><span class='op'>,</span> <span class='nam'>retries</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t313' class='pln'><span class='strut'> </span></p> -<p id='t314' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_file_already_downloaded</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_name</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t315' class='pln'> <span class='str'>"""Report file has already been fully downloaded."""</span><span class='strut'> </span></p> -<p id='t316' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t317' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] %s has already been downloaded'</span> <span class='op'>%</span> <span class='nam'>file_name</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t318' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>UnicodeEncodeError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t319' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] The file has already been downloaded'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t320' class='pln'><span class='strut'> </span></p> -<p id='t321' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_unable_to_resume</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t322' class='pln'> <span class='str'>"""Report it was impossible to resume download."""</span><span class='strut'> </span></p> -<p id='t323' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] Unable to resume'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t324' class='pln'><span class='strut'> </span></p> -<p id='t325' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_finish</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t326' class='pln'> <span class='str'>"""Report download finished."""</span><span class='strut'> </span></p> -<p id='t327' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'noprogress'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t328' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] Download completed'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t329' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t330' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t331' class='pln'><span class='strut'> </span></p> -<p id='t332' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>increment_downloads</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t333' class='pln'> <span class='str'>"""Increment the ordinal that assigns a number to each file."""</span><span class='strut'> </span></p> -<p id='t334' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_num_downloads</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t335' class='pln'><span class='strut'> </span></p> -<p id='t336' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>prepare_filename</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>info_dict</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t337' class='pln'> <span class='str'>"""Generate the output filename."""</span><span class='strut'> </span></p> -<p id='t338' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t339' class='stm run hide_run'> <span class='nam'>template_dict</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t340' class='pln'><span class='strut'> </span></p> -<p id='t341' class='stm run hide_run'> <span class='nam'>template_dict</span><span class='op'>[</span><span class='str'>'epoch'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t342' class='stm run hide_run'> <span class='nam'>template_dict</span><span class='op'>[</span><span class='str'>'autonumber'</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>u'%05d'</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_num_downloads</span><span class='strut'> </span></p> -<p id='t343' class='pln'><span class='strut'> </span></p> -<p id='t344' class='stm run hide_run'> <span class='nam'>sanitize</span> <span class='op'>=</span> <span class='key'>lambda</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span><span class='op'>:</span> <span class='nam'>sanitize_filename</span><span class='op'>(</span><span class='strut'> </span></p> -<p id='t345' class='pln'> <span class='str'>u'NA'</span> <span class='key'>if</span> <span class='nam'>v</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>else</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>v</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t346' class='pln'> <span class='nam'>restricted</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'restrictfilenames'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t347' class='pln'> <span class='nam'>is_id</span><span class='op'>=</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>==</span><span class='str'>u'id'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t348' class='stm run hide_run'> <span class='nam'>template_dict</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span> <span class='nam'>sanitize</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span> <span class='nam'>v</span><span class='op'>)</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>template_dict</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t349' class='pln'><span class='strut'> </span></p> -<p id='t350' class='stm run hide_run'> <span class='nam'>filename</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>[</span><span class='str'>'outtmpl'</span><span class='op'>]</span> <span class='op'>%</span> <span class='nam'>template_dict</span><span class='strut'> </span></p> -<p id='t351' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>filename</span><span class='strut'> </span></p> -<p id='t352' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>ValueError</span><span class='op'>,</span> <span class='nam'>KeyError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t353' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid system charset or erroneous output template'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t354' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t355' class='pln'><span class='strut'> </span></p> -<p id='t356' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_match_entry</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>info_dict</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t357' class='pln'> <span class='str'>""" Returns None iff the file should be downloaded """</span><span class='strut'> </span></p> -<p id='t358' class='pln'><span class='strut'> </span></p> -<p id='t359' class='stm run hide_run'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t360' class='stm run hide_run'> <span class='nam'>matchtitle</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'matchtitle'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t361' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>matchtitle</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t362' class='stm mis'> <span class='nam'>matchtitle</span> <span class='op'>=</span> <span class='nam'>matchtitle</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t363' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>matchtitle</span><span class='op'>,</span> <span class='nam'>title</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>IGNORECASE</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t364' class='stm mis'> <span class='key'>return</span> <span class='str'>u'[download] "'</span> <span class='op'>+</span> <span class='nam'>title</span> <span class='op'>+</span> <span class='str'>'" title did not match pattern "'</span> <span class='op'>+</span> <span class='nam'>matchtitle</span> <span class='op'>+</span> <span class='str'>'"'</span><span class='strut'> </span></p> -<p id='t365' class='stm run hide_run'> <span class='nam'>rejecttitle</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'rejecttitle'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t366' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>rejecttitle</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t367' class='stm mis'> <span class='nam'>rejecttitle</span> <span class='op'>=</span> <span class='nam'>rejecttitle</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t368' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>rejecttitle</span><span class='op'>,</span> <span class='nam'>title</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>IGNORECASE</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t369' class='stm mis'> <span class='key'>return</span> <span class='str'>u'"'</span> <span class='op'>+</span> <span class='nam'>title</span> <span class='op'>+</span> <span class='str'>'" title matched reject pattern "'</span> <span class='op'>+</span> <span class='nam'>rejecttitle</span> <span class='op'>+</span> <span class='str'>'"'</span><span class='strut'> </span></p> -<p id='t370' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t371' class='pln'><span class='strut'> </span></p> -<p id='t372' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>process_info</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>info_dict</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t373' class='pln'> <span class='str'>"""Process a single dictionary returned by an InfoExtractor."""</span><span class='strut'> </span></p> -<p id='t374' class='pln'><span class='strut'> </span></p> -<p id='t375' class='pln'> <span class='com'># Keep for backwards compatibility</span><span class='strut'> </span></p> -<p id='t376' class='stm run hide_run'> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'stitle'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t377' class='pln'><span class='strut'> </span></p> -<p id='t378' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='str'>'format'</span> <span class='key'>in</span> <span class='nam'>info_dict</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t379' class='stm run hide_run'> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'format'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'ext'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t380' class='pln'><span class='strut'> </span></p> -<p id='t381' class='stm run hide_run'> <span class='nam'>reason</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_match_entry</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t382' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>reason</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t383' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[download] '</span> <span class='op'>+</span> <span class='nam'>reason</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t384' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t385' class='pln'><span class='strut'> </span></p> -<p id='t386' class='stm run hide_run'> <span class='nam'>max_downloads</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'max_downloads'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t387' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>max_downloads</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t388' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_num_downloads</span> <span class='op'>></span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>max_downloads</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t389' class='stm mis'> <span class='key'>raise</span> <span class='nam'>MaxDownloadsReached</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t390' class='pln'><span class='strut'> </span></p> -<p id='t391' class='stm run hide_run'> <span class='nam'>filename</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>prepare_filename</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t392' class='pln'><span class='strut'> </span></p> -<p id='t393' class='pln'> <span class='com'># Forced printings</span><span class='strut'> </span></p> -<p id='t394' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'forcetitle'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t395' class='stm mis'> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t396' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'forceurl'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t397' class='stm mis'> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t398' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'forcethumbnail'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>and</span> <span class='str'>'thumbnail'</span> <span class='key'>in</span> <span class='nam'>info_dict</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t399' class='stm mis'> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'thumbnail'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t400' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'forcedescription'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>and</span> <span class='str'>'description'</span> <span class='key'>in</span> <span class='nam'>info_dict</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t401' class='stm mis'> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t402' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'forcefilename'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>filename</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t403' class='stm mis'> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t404' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'forceformat'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t405' class='stm mis'> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'format'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t406' class='pln'><span class='strut'> </span></p> -<p id='t407' class='pln'> <span class='com'># Do nothing else if in simulate mode</span><span class='strut'> </span></p> -<p id='t408' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'simulate'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t409' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t410' class='pln'><span class='strut'> </span></p> -<p id='t411' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>filename</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t412' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t413' class='pln'><span class='strut'> </span></p> -<p id='t414' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t415' class='stm run hide_run'> <span class='nam'>dn</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t416' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>dn</span> <span class='op'>!=</span> <span class='str'>''</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>exists</span><span class='op'>(</span><span class='nam'>dn</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># dn is already encoded</span><span class='strut'> </span></p> -<p id='t417' class='stm mis'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>makedirs</span><span class='op'>(</span><span class='nam'>dn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t418' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t419' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to create directory '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t420' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t421' class='pln'><span class='strut'> </span></p> -<p id='t422' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'writedescription'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t423' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t424' class='stm run hide_run'> <span class='nam'>descfn</span> <span class='op'>=</span> <span class='nam'>filename</span> <span class='op'>+</span> <span class='str'>u'.description'</span><span class='strut'> </span></p> -<p id='t425' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_writedescription</span><span class='op'>(</span><span class='nam'>descfn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t426' class='stm run hide_run'> <span class='key'>with</span> <span class='nam'>io</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>descfn</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'w'</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='str'>'utf-8'</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>descfile</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t427' class='stm run hide_run'> <span class='nam'>descfile</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t428' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t429' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot write description file '</span> <span class='op'>+</span> <span class='nam'>descfn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t430' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t431' class='pln'><span class='strut'> </span></p> -<p id='t432' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'writesubtitles'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>and</span> <span class='str'>'subtitles'</span> <span class='key'>in</span> <span class='nam'>info_dict</span> <span class='key'>and</span> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'subtitles'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t433' class='pln'> <span class='com'># subtitles download errors are already managed as troubles in relevant IE</span><span class='strut'> </span></p> -<p id='t434' class='pln'> <span class='com'># that way it will silently go on when used with unsupporting IE</span><span class='strut'> </span></p> -<p id='t435' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t436' class='stm mis'> <span class='nam'>srtfn</span> <span class='op'>=</span> <span class='nam'>filename</span><span class='op'>.</span><span class='nam'>rsplit</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>u'.srt'</span><span class='strut'> </span></p> -<p id='t437' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_writesubtitles</span><span class='op'>(</span><span class='nam'>srtfn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t438' class='stm mis'> <span class='key'>with</span> <span class='nam'>io</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>srtfn</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'w'</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='str'>'utf-8'</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>srtfile</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t439' class='stm mis'> <span class='nam'>srtfile</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'subtitles'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t440' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t441' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot write subtitles file '</span> <span class='op'>+</span> <span class='nam'>descfn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t442' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t443' class='pln'><span class='strut'> </span></p> -<p id='t444' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'writeinfojson'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t445' class='stm run hide_run'> <span class='nam'>infofn</span> <span class='op'>=</span> <span class='nam'>filename</span> <span class='op'>+</span> <span class='str'>u'.info.json'</span><span class='strut'> </span></p> -<p id='t446' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_writeinfojson</span><span class='op'>(</span><span class='nam'>infofn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t447' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t448' class='stm run hide_run'> <span class='nam'>json_info_dict</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span> <span class='nam'>v</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>info_dict</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>k</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>'urlhandle'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t449' class='stm run hide_run'> <span class='nam'>write_json_file</span><span class='op'>(</span><span class='nam'>json_info_dict</span><span class='op'>,</span> <span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>infofn</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t450' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t451' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot write metadata to JSON file '</span> <span class='op'>+</span> <span class='nam'>infofn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t452' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t453' class='pln'><span class='strut'> </span></p> -<p id='t454' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'skip_download'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t455' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'nooverwrites'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>exists</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t456' class='stm mis'> <span class='nam'>success</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t457' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t458' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t459' class='stm run hide_run'> <span class='nam'>success</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_do_download</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>info_dict</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t460' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t461' class='stm mis'> <span class='key'>raise</span> <span class='nam'>UnavailableVideoError</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t462' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t463' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video data: %s'</span> <span class='op'>%</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t464' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t465' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>ContentTooShortError</span><span class='op'>,</span> <span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t466' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: content too short (expected %s bytes and served %s)'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>err</span><span class='op'>.</span><span class='nam'>expected</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>.</span><span class='nam'>downloaded</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t467' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t468' class='pln'><span class='strut'> </span></p> -<p id='t469' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>success</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t470' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t471' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>post_process</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>info_dict</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t472' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>PostProcessingError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t473' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: postprocessing: %s'</span> <span class='op'>%</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t474' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t475' class='pln'><span class='strut'> </span></p> -<p id='t476' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url_list</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t477' class='pln'> <span class='str'>"""Download a given list of URLs."""</span><span class='strut'> </span></p> -<p id='t478' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>url_list</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>1</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>fixed_template</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t479' class='stm mis'> <span class='key'>raise</span> <span class='nam'>SameFileError</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>[</span><span class='str'>'outtmpl'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t480' class='pln'><span class='strut'> </span></p> -<p id='t481' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>url</span> <span class='key'>in</span> <span class='nam'>url_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t482' class='stm run hide_run'> <span class='nam'>suitable_found</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t483' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>ie</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ies</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t484' class='pln'> <span class='com'># Go to next InfoExtractor if not suitable</span><span class='strut'> </span></p> -<p id='t485' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t486' class='stm run hide_run'> <span class='key'>continue</span><span class='strut'> </span></p> -<p id='t487' class='pln'><span class='strut'> </span></p> -<p id='t488' class='pln'> <span class='com'># Warn if the _WORKING attribute is False</span><span class='strut'> </span></p> -<p id='t489' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>working</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t490' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: the program functionality for this site has been marked as broken, '</span><span class='strut'> </span></p> -<p id='t491' class='pln'> <span class='str'>u'and will probably not work. If you want to go on, use the -i option.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t492' class='pln'><span class='strut'> </span></p> -<p id='t493' class='pln'> <span class='com'># Suitable InfoExtractor found</span><span class='strut'> </span></p> -<p id='t494' class='stm run hide_run'> <span class='nam'>suitable_found</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t495' class='pln'><span class='strut'> </span></p> -<p id='t496' class='pln'> <span class='com'># Extract information from URL and process it</span><span class='strut'> </span></p> -<p id='t497' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t498' class='stm run hide_run'> <span class='nam'>videos</span> <span class='op'>=</span> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>extract</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t499' class='stm mis'> <span class='key'>except</span> <span class='nam'>ExtractorError</span> <span class='key'>as</span> <span class='nam'>de</span><span class='op'>:</span> <span class='com'># An error we somewhat expected</span><span class='strut'> </span></p> -<p id='t500' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>de</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_tb</span><span class='op'>(</span><span class='nam'>de</span><span class='op'>.</span><span class='nam'>traceback</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t501' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t502' class='stm mis'> <span class='key'>except</span> <span class='nam'>Exception</span> <span class='key'>as</span> <span class='nam'>e</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t503' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'ignoreerrors'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t504' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>e</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>tb</span><span class='op'>=</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t505' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t506' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t507' class='stm mis'> <span class='key'>raise</span><span class='strut'> </span></p> -<p id='t508' class='pln'><span class='strut'> </span></p> -<p id='t509' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>videos</span> <span class='key'>or</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>1</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>fixed_template</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t510' class='stm mis'> <span class='key'>raise</span> <span class='nam'>SameFileError</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>[</span><span class='str'>'outtmpl'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t511' class='pln'><span class='strut'> </span></p> -<p id='t512' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>video</span> <span class='key'>in</span> <span class='nam'>videos</span> <span class='key'>or</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t513' class='stm run hide_run'> <span class='nam'>video</span><span class='op'>[</span><span class='str'>'extractor'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>ie</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='strut'> </span></p> -<p id='t514' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t515' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>increment_downloads</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t516' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>process_info</span><span class='op'>(</span><span class='nam'>video</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t517' class='stm mis'> <span class='key'>except</span> <span class='nam'>UnavailableVideoError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t518' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: unable to download video'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t519' class='pln'><span class='strut'> </span></p> -<p id='t520' class='pln'> <span class='com'># Suitable InfoExtractor had been found; go to next URL</span><span class='strut'> </span></p> -<p id='t521' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t522' class='pln'><span class='strut'> </span></p> -<p id='t523' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>suitable_found</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t524' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: no suitable InfoExtractor: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t525' class='pln'><span class='strut'> </span></p> -<p id='t526' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_retcode</span><span class='strut'> </span></p> -<p id='t527' class='pln'><span class='strut'> </span></p> -<p id='t528' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>post_process</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>ie_info</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t529' class='pln'> <span class='str'>"""Run the postprocessing chain on the given file."""</span><span class='strut'> </span></p> -<p id='t530' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='nam'>ie_info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t531' class='stm run hide_run'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'filepath'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>filename</span><span class='strut'> </span></p> -<p id='t532' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>pp</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_pps</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t533' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>pp</span><span class='op'>.</span><span class='nam'>run</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t534' class='stm mis'> <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t535' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t536' class='pln'><span class='strut'> </span></p> -<p id='t537' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_download_with_rtmpdump</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>player_url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t538' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_destination</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t539' class='stm mis'> <span class='nam'>tmpfilename</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>temp_name</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t540' class='pln'><span class='strut'> </span></p> -<p id='t541' class='pln'> <span class='com'># Check for rtmpdump first</span><span class='strut'> </span></p> -<p id='t542' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t543' class='stm mis'> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>call</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'rtmpdump'</span><span class='op'>,</span> <span class='str'>'-h'</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='op'>(</span><span class='nam'>file</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>devnull</span><span class='op'>,</span> <span class='str'>'w'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>STDOUT</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t544' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t545' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: RTMP download detected but "rtmpdump" could not be run'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t546' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t547' class='pln'><span class='strut'> </span></p> -<p id='t548' class='pln'> <span class='com'># Download using rtmpdump. rtmpdump returns exit code 2 when</span><span class='strut'> </span></p> -<p id='t549' class='pln'> <span class='com'># the connection was interrumpted and resuming appears to be</span><span class='strut'> </span></p> -<p id='t550' class='pln'> <span class='com'># possible. This is part of rtmpdump's normal usage, AFAIK.</span><span class='strut'> </span></p> -<p id='t551' class='stm mis'> <span class='nam'>basic_args</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'rtmpdump'</span><span class='op'>,</span> <span class='str'>'-q'</span><span class='op'>]</span> <span class='op'>+</span> <span class='op'>[</span><span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='op'>[</span><span class='str'>'-W'</span><span class='op'>,</span> <span class='nam'>player_url</span><span class='op'>]</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>player_url</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>]</span> <span class='op'>+</span> <span class='op'>[</span><span class='str'>'-r'</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='nam'>tmpfilename</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t552' class='stm mis'> <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>basic_args</span> <span class='op'>+</span> <span class='op'>[</span><span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='op'>[</span><span class='str'>'-e'</span><span class='op'>,</span> <span class='str'>'-k'</span><span class='op'>,</span> <span class='str'>'1'</span><span class='op'>]</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'continuedl'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t553' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'verbose'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t554' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t555' class='stm mis'> <span class='key'>import</span> <span class='nam'>pipes</span><span class='strut'> </span></p> -<p id='t556' class='stm mis'> <span class='nam'>shell_quote</span> <span class='op'>=</span> <span class='key'>lambda</span> <span class='nam'>args</span><span class='op'>:</span> <span class='str'>' '</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>map</span><span class='op'>(</span><span class='nam'>pipes</span><span class='op'>.</span><span class='nam'>quote</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t557' class='stm mis'> <span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t558' class='stm mis'> <span class='nam'>shell_quote</span> <span class='op'>=</span> <span class='nam'>repr</span><span class='strut'> </span></p> -<p id='t559' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[debug] rtmpdump command line: '</span> <span class='op'>+</span> <span class='nam'>shell_quote</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t560' class='stm mis'> <span class='nam'>retval</span> <span class='op'>=</span> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>call</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t561' class='stm mis'> <span class='key'>while</span> <span class='nam'>retval</span> <span class='op'>==</span> <span class='num'>2</span> <span class='key'>or</span> <span class='nam'>retval</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t562' class='stm mis'> <span class='nam'>prevsize</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getsize</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t563' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'\r[rtmpdump] %s bytes'</span> <span class='op'>%</span> <span class='nam'>prevsize</span><span class='op'>,</span> <span class='nam'>skip_eol</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t564' class='stm mis'> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>sleep</span><span class='op'>(</span><span class='num'>5.0</span><span class='op'>)</span> <span class='com'># This seems to be needed</span><span class='strut'> </span></p> -<p id='t565' class='stm mis'> <span class='nam'>retval</span> <span class='op'>=</span> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>call</span><span class='op'>(</span><span class='nam'>basic_args</span> <span class='op'>+</span> <span class='op'>[</span><span class='str'>'-e'</span><span class='op'>]</span> <span class='op'>+</span> <span class='op'>[</span><span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='op'>[</span><span class='str'>'-k'</span><span class='op'>,</span> <span class='str'>'1'</span><span class='op'>]</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>retval</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t566' class='stm mis'> <span class='nam'>cursize</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getsize</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t567' class='stm mis'> <span class='key'>if</span> <span class='nam'>prevsize</span> <span class='op'>==</span> <span class='nam'>cursize</span> <span class='key'>and</span> <span class='nam'>retval</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t568' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t569' class='pln'> <span class='com'># Some rtmp streams seem abort after ~ 99.8%. Don't complain for those</span><span class='strut'> </span></p> -<p id='t570' class='stm mis'> <span class='key'>if</span> <span class='nam'>prevsize</span> <span class='op'>==</span> <span class='nam'>cursize</span> <span class='key'>and</span> <span class='nam'>retval</span> <span class='op'>==</span> <span class='num'>2</span> <span class='key'>and</span> <span class='nam'>cursize</span> <span class='op'>></span> <span class='num'>1024</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t571' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'\r[rtmpdump] Could not download the whole video. This can happen for some advertisements.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t572' class='stm mis'> <span class='nam'>retval</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t573' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t574' class='stm mis'> <span class='key'>if</span> <span class='nam'>retval</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t575' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'\r[rtmpdump] %s bytes'</span> <span class='op'>%</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getsize</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t576' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>try_rename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t577' class='stm mis'> <span class='key'>return</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t578' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t579' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: rtmpdump exited with code %d'</span> <span class='op'>%</span> <span class='nam'>retval</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t580' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t581' class='pln'><span class='strut'> </span></p> -<p id='t582' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_do_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>info_dict</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t583' class='stm run hide_run'> <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t584' class='stm run hide_run'> <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>info_dict</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'player_url'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t585' class='pln'><span class='strut'> </span></p> -<p id='t586' class='pln'> <span class='com'># Check file already present</span><span class='strut'> </span></p> -<p id='t587' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'continuedl'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>)</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'nopart'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t588' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_file_already_downloaded</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t589' class='stm mis'> <span class='key'>return</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t590' class='pln'><span class='strut'> </span></p> -<p id='t591' class='pln'> <span class='com'># Attempt to download using rtmpdump</span><span class='strut'> </span></p> -<p id='t592' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>'rtmp'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t593' class='stm mis'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_with_rtmpdump</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>player_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t594' class='pln'><span class='strut'> </span></p> -<p id='t595' class='stm run hide_run'> <span class='nam'>tmpfilename</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>temp_name</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t596' class='stm run hide_run'> <span class='nam'>stream</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t597' class='pln'><span class='strut'> </span></p> -<p id='t598' class='pln'> <span class='com'># Do not include the Accept-Encoding header</span><span class='strut'> </span></p> -<p id='t599' class='stm run hide_run'> <span class='nam'>headers</span> <span class='op'>=</span> <span class='op'>{</span><span class='str'>'Youtubedl-no-compression'</span><span class='op'>:</span> <span class='str'>'True'</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t600' class='stm run hide_run'> <span class='nam'>basic_request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t601' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t602' class='pln'><span class='strut'> </span></p> -<p id='t603' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'test'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t604' class='stm run hide_run'> <span class='nam'>request</span><span class='op'>.</span><span class='nam'>add_header</span><span class='op'>(</span><span class='str'>'Range'</span><span class='op'>,</span><span class='str'>'bytes=0-10240'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t605' class='pln'><span class='strut'> </span></p> -<p id='t606' class='pln'> <span class='com'># Establish possible resume length</span><span class='strut'> </span></p> -<p id='t607' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t608' class='stm mis'> <span class='nam'>resume_len</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getsize</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t609' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t610' class='stm run hide_run'> <span class='nam'>resume_len</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t611' class='pln'><span class='strut'> </span></p> -<p id='t612' class='stm run hide_run'> <span class='nam'>open_mode</span> <span class='op'>=</span> <span class='str'>'wb'</span><span class='strut'> </span></p> -<p id='t613' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>resume_len</span> <span class='op'>!=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t614' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'continuedl'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t615' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_resuming_byte</span><span class='op'>(</span><span class='nam'>resume_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t616' class='stm mis'> <span class='nam'>request</span><span class='op'>.</span><span class='nam'>add_header</span><span class='op'>(</span><span class='str'>'Range'</span><span class='op'>,</span><span class='str'>'bytes=%d-'</span> <span class='op'>%</span> <span class='nam'>resume_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t617' class='stm mis'> <span class='nam'>open_mode</span> <span class='op'>=</span> <span class='str'>'ab'</span><span class='strut'> </span></p> -<p id='t618' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t619' class='stm mis'> <span class='nam'>resume_len</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t620' class='pln'><span class='strut'> </span></p> -<p id='t621' class='stm run hide_run'> <span class='nam'>count</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t622' class='stm run hide_run'> <span class='nam'>retries</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'retries'</span><span class='op'>,</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t623' class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>count</span> <span class='op'><=</span> <span class='nam'>retries</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t624' class='pln'> <span class='com'># Establish connection</span><span class='strut'> </span></p> -<p id='t625' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t626' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>count</span> <span class='op'>==</span> <span class='num'>0</span> <span class='key'>and</span> <span class='str'>'urlhandle'</span> <span class='key'>in</span> <span class='nam'>info_dict</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t627' class='stm mis'> <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'urlhandle'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t628' class='stm run hide_run'> <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t629' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t630' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>HTTPError</span><span class='op'>,</span> <span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t631' class='stm mis'> <span class='key'>if</span> <span class='op'>(</span><span class='nam'>err</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'><</span> <span class='num'>500</span> <span class='key'>or</span> <span class='nam'>err</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'>>=</span> <span class='num'>600</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>err</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'>!=</span> <span class='num'>416</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t632' class='pln'> <span class='com'># Unexpected HTTP error</span><span class='strut'> </span></p> -<p id='t633' class='stm mis'> <span class='key'>raise</span><span class='strut'> </span></p> -<p id='t634' class='stm mis'> <span class='key'>elif</span> <span class='nam'>err</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'>==</span> <span class='num'>416</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t635' class='pln'> <span class='com'># Unable to resume (requested range not satisfiable)</span><span class='strut'> </span></p> -<p id='t636' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t637' class='pln'> <span class='com'># Open the connection again without the range header</span><span class='strut'> </span></p> -<p id='t638' class='stm mis'> <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>basic_request</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t639' class='stm mis'> <span class='nam'>content_length</span> <span class='op'>=</span> <span class='nam'>data</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>'Content-Length'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t640' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>HTTPError</span><span class='op'>,</span> <span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t641' class='stm mis'> <span class='key'>if</span> <span class='nam'>err</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'><</span> <span class='num'>500</span> <span class='key'>or</span> <span class='nam'>err</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'>>=</span> <span class='num'>600</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t642' class='stm mis'> <span class='key'>raise</span><span class='strut'> </span></p> -<p id='t643' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t644' class='pln'> <span class='com'># Examine the reported length</span><span class='strut'> </span></p> -<p id='t645' class='stm mis'> <span class='key'>if</span> <span class='op'>(</span><span class='nam'>content_length</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span><span class='strut'> </span></p> -<p id='t646' class='pln'> <span class='op'>(</span><span class='nam'>resume_len</span> <span class='op'>-</span> <span class='num'>100</span> <span class='op'><</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>content_length</span><span class='op'>)</span> <span class='op'><</span> <span class='nam'>resume_len</span> <span class='op'>+</span> <span class='num'>100</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t647' class='pln'> <span class='com'># The file had already been fully downloaded.</span><span class='strut'> </span></p> -<p id='t648' class='pln'> <span class='com'># Explanation to the above condition: in issue #175 it was revealed that</span><span class='strut'> </span></p> -<p id='t649' class='pln'> <span class='com'># YouTube sometimes adds or removes a few bytes from the end of the file,</span><span class='strut'> </span></p> -<p id='t650' class='pln'> <span class='com'># changing the file size slightly and causing problems for some users. So</span><span class='strut'> </span></p> -<p id='t651' class='pln'> <span class='com'># I decided to implement a suggested change and consider the file</span><span class='strut'> </span></p> -<p id='t652' class='pln'> <span class='com'># completely downloaded if the file size differs less than 100 bytes from</span><span class='strut'> </span></p> -<p id='t653' class='pln'> <span class='com'># the one in the hard drive.</span><span class='strut'> </span></p> -<p id='t654' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_file_already_downloaded</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t655' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>try_rename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t656' class='stm mis'> <span class='key'>return</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t657' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t658' class='pln'> <span class='com'># The length does not match, we start the download over</span><span class='strut'> </span></p> -<p id='t659' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_unable_to_resume</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t660' class='stm mis'> <span class='nam'>open_mode</span> <span class='op'>=</span> <span class='str'>'wb'</span><span class='strut'> </span></p> -<p id='t661' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t662' class='pln'> <span class='com'># Retry</span><span class='strut'> </span></p> -<p id='t663' class='stm mis'> <span class='nam'>count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t664' class='stm mis'> <span class='key'>if</span> <span class='nam'>count</span> <span class='op'><=</span> <span class='nam'>retries</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t665' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_retry</span><span class='op'>(</span><span class='nam'>count</span><span class='op'>,</span> <span class='nam'>retries</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t666' class='pln'><span class='strut'> </span></p> -<p id='t667' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>count</span> <span class='op'>></span> <span class='nam'>retries</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t668' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: giving up after %s retries'</span> <span class='op'>%</span> <span class='nam'>retries</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t669' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t670' class='pln'><span class='strut'> </span></p> -<p id='t671' class='stm run hide_run'> <span class='nam'>data_len</span> <span class='op'>=</span> <span class='nam'>data</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'Content-length'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t672' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>data_len</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t673' class='stm run hide_run'> <span class='nam'>data_len</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>data_len</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>resume_len</span><span class='strut'> </span></p> -<p id='t674' class='stm run hide_run'> <span class='nam'>data_len_str</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>format_bytes</span><span class='op'>(</span><span class='nam'>data_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t675' class='stm run hide_run'> <span class='nam'>byte_counter</span> <span class='op'>=</span> <span class='num'>0</span> <span class='op'>+</span> <span class='nam'>resume_len</span><span class='strut'> </span></p> -<p id='t676' class='stm run hide_run'> <span class='nam'>block_size</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'buffersize'</span><span class='op'>,</span> <span class='num'>1024</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t677' class='stm run hide_run'> <span class='nam'>start</span> <span class='op'>=</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t678' class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t679' class='pln'> <span class='com'># Download and write</span><span class='strut'> </span></p> -<p id='t680' class='stm run hide_run'> <span class='nam'>before</span> <span class='op'>=</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t681' class='stm run hide_run'> <span class='nam'>data_block</span> <span class='op'>=</span> <span class='nam'>data</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='nam'>block_size</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t682' class='stm run hide_run'> <span class='nam'>after</span> <span class='op'>=</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t683' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>data_block</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t684' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t685' class='stm run hide_run'> <span class='nam'>byte_counter</span> <span class='op'>+=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>data_block</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t686' class='pln'><span class='strut'> </span></p> -<p id='t687' class='pln'> <span class='com'># Open file just in time</span><span class='strut'> </span></p> -<p id='t688' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>stream</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t689' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t690' class='stm run hide_run'> <span class='op'>(</span><span class='nam'>stream</span><span class='op'>,</span> <span class='nam'>tmpfilename</span><span class='op'>)</span> <span class='op'>=</span> <span class='nam'>sanitize_open</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>,</span> <span class='nam'>open_mode</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t691' class='stm run hide_run'> <span class='key'>assert</span> <span class='nam'>stream</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t692' class='stm run hide_run'> <span class='nam'>filename</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>undo_temp_name</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t693' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_destination</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t694' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>OSError</span><span class='op'>,</span> <span class='nam'>IOError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t695' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to open for writing: %s'</span> <span class='op'>%</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t696' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t697' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t698' class='stm run hide_run'> <span class='nam'>stream</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>data_block</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t699' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t700' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: unable to write data: %s'</span> <span class='op'>%</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t701' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t702' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'noresizebuffer'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t703' class='stm run hide_run'> <span class='nam'>block_size</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>best_block_size</span><span class='op'>(</span><span class='nam'>after</span> <span class='op'>-</span> <span class='nam'>before</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>data_block</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t704' class='pln'><span class='strut'> </span></p> -<p id='t705' class='pln'> <span class='com'># Progress message</span><span class='strut'> </span></p> -<p id='t706' class='stm run hide_run'> <span class='nam'>speed_str</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>calc_speed</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>byte_counter</span> <span class='op'>-</span> <span class='nam'>resume_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t707' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>data_len</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t708' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_progress</span><span class='op'>(</span><span class='str'>'Unknown %'</span><span class='op'>,</span> <span class='nam'>data_len_str</span><span class='op'>,</span> <span class='nam'>speed_str</span><span class='op'>,</span> <span class='str'>'Unknown ETA'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t709' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t710' class='stm run hide_run'> <span class='nam'>percent_str</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>calc_percent</span><span class='op'>(</span><span class='nam'>byte_counter</span><span class='op'>,</span> <span class='nam'>data_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t711' class='stm run hide_run'> <span class='nam'>eta_str</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>calc_eta</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>data_len</span> <span class='op'>-</span> <span class='nam'>resume_len</span><span class='op'>,</span> <span class='nam'>byte_counter</span> <span class='op'>-</span> <span class='nam'>resume_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t712' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_progress</span><span class='op'>(</span><span class='nam'>percent_str</span><span class='op'>,</span> <span class='nam'>data_len_str</span><span class='op'>,</span> <span class='nam'>speed_str</span><span class='op'>,</span> <span class='nam'>eta_str</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t713' class='pln'><span class='strut'> </span></p> -<p id='t714' class='pln'> <span class='com'># Apply rate limit</span><span class='strut'> </span></p> -<p id='t715' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>slow_down</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>byte_counter</span> <span class='op'>-</span> <span class='nam'>resume_len</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t716' class='pln'><span class='strut'> </span></p> -<p id='t717' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>stream</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t718' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: Did not get any data blocks'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t719' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t720' class='stm run hide_run'> <span class='nam'>stream</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t721' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_finish</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t722' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>data_len</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>byte_counter</span> <span class='op'>!=</span> <span class='nam'>data_len</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t723' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ContentTooShortError</span><span class='op'>(</span><span class='nam'>byte_counter</span><span class='op'>,</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>data_len</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t724' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>try_rename</span><span class='op'>(</span><span class='nam'>tmpfilename</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t725' class='pln'><span class='strut'> </span></p> -<p id='t726' class='pln'> <span class='com'># Update file modification time</span><span class='strut'> </span></p> -<p id='t727' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'updatetime'</span><span class='op'>,</span> <span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t728' class='stm run hide_run'> <span class='nam'>info_dict</span><span class='op'>[</span><span class='str'>'filetime'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>try_utime</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>data</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'last-modified'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t729' class='pln'><span class='strut'> </span></p> -<p id='t730' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>True</span><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/youtube_dl_InfoExtractors.html b/test_coverage/youtube_dl_InfoExtractors.html deleted file mode 100644 index 3122ac66f..000000000 --- a/test_coverage/youtube_dl_InfoExtractors.html +++ /dev/null @@ -1,7646 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl.InfoExtractors: 44%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl.InfoExtractors</b> : - <span class='pc_cov'>44%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 2275 statements - <span class='run hide_run shortkey_r button_toggle_run'>1002 run</span> - <span class='mis shortkey_m button_toggle_mis'>1273 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='pln'><a href='#n1'>1</a></p> -<p id='n2' class='pln'><a href='#n2'>2</a></p> -<p id='n3' class='pln'><a href='#n3'>3</a></p> -<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p> -<p id='n5' class='pln'><a href='#n5'>5</a></p> -<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p> -<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p> -<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p> -<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p> -<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p> -<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p> -<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p> -<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p> -<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p> -<p id='n15' class='stm run hide_run'><a href='#n15'>15</a></p> -<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p> -<p id='n17' class='pln'><a href='#n17'>17</a></p> -<p id='n18' class='stm run hide_run'><a href='#n18'>18</a></p> -<p id='n19' class='pln'><a href='#n19'>19</a></p> -<p id='n20' class='pln'><a href='#n20'>20</a></p> -<p id='n21' class='stm run hide_run'><a href='#n21'>21</a></p> -<p id='n22' class='pln'><a href='#n22'>22</a></p> -<p id='n23' class='pln'><a href='#n23'>23</a></p> -<p id='n24' class='pln'><a href='#n24'>24</a></p> -<p id='n25' class='pln'><a href='#n25'>25</a></p> -<p id='n26' class='pln'><a href='#n26'>26</a></p> -<p id='n27' class='pln'><a href='#n27'>27</a></p> -<p id='n28' class='pln'><a href='#n28'>28</a></p> -<p id='n29' class='pln'><a href='#n29'>29</a></p> -<p id='n30' class='pln'><a href='#n30'>30</a></p> -<p id='n31' class='pln'><a href='#n31'>31</a></p> -<p id='n32' class='pln'><a href='#n32'>32</a></p> -<p id='n33' class='pln'><a href='#n33'>33</a></p> -<p id='n34' class='pln'><a href='#n34'>34</a></p> -<p id='n35' class='pln'><a href='#n35'>35</a></p> -<p id='n36' class='pln'><a href='#n36'>36</a></p> -<p id='n37' class='pln'><a href='#n37'>37</a></p> -<p id='n38' class='pln'><a href='#n38'>38</a></p> -<p id='n39' class='pln'><a href='#n39'>39</a></p> -<p id='n40' class='pln'><a href='#n40'>40</a></p> -<p id='n41' class='pln'><a href='#n41'>41</a></p> -<p id='n42' class='pln'><a href='#n42'>42</a></p> -<p id='n43' class='pln'><a href='#n43'>43</a></p> -<p id='n44' class='pln'><a href='#n44'>44</a></p> -<p id='n45' class='pln'><a href='#n45'>45</a></p> -<p id='n46' class='pln'><a href='#n46'>46</a></p> -<p id='n47' class='pln'><a href='#n47'>47</a></p> -<p id='n48' class='pln'><a href='#n48'>48</a></p> -<p id='n49' class='pln'><a href='#n49'>49</a></p> -<p id='n50' class='pln'><a href='#n50'>50</a></p> -<p id='n51' class='pln'><a href='#n51'>51</a></p> -<p id='n52' class='pln'><a href='#n52'>52</a></p> -<p id='n53' class='pln'><a href='#n53'>53</a></p> -<p id='n54' class='pln'><a href='#n54'>54</a></p> -<p id='n55' class='pln'><a href='#n55'>55</a></p> -<p id='n56' class='pln'><a href='#n56'>56</a></p> -<p id='n57' class='pln'><a href='#n57'>57</a></p> -<p id='n58' class='pln'><a href='#n58'>58</a></p> -<p id='n59' class='pln'><a href='#n59'>59</a></p> -<p id='n60' class='pln'><a href='#n60'>60</a></p> -<p id='n61' class='pln'><a href='#n61'>61</a></p> -<p id='n62' class='pln'><a href='#n62'>62</a></p> -<p id='n63' class='pln'><a href='#n63'>63</a></p> -<p id='n64' class='pln'><a href='#n64'>64</a></p> -<p id='n65' class='stm run hide_run'><a href='#n65'>65</a></p> -<p id='n66' class='stm run hide_run'><a href='#n66'>66</a></p> -<p id='n67' class='stm run hide_run'><a href='#n67'>67</a></p> -<p id='n68' class='pln'><a href='#n68'>68</a></p> -<p id='n69' class='stm run hide_run'><a href='#n69'>69</a></p> -<p id='n70' class='pln'><a href='#n70'>70</a></p> -<p id='n71' class='stm run hide_run'><a href='#n71'>71</a></p> -<p id='n72' class='stm run hide_run'><a href='#n72'>72</a></p> -<p id='n73' class='pln'><a href='#n73'>73</a></p> -<p id='n74' class='stm run hide_run'><a href='#n74'>74</a></p> -<p id='n75' class='pln'><a href='#n75'>75</a></p> -<p id='n76' class='stm run hide_run'><a href='#n76'>76</a></p> -<p id='n77' class='pln'><a href='#n77'>77</a></p> -<p id='n78' class='stm run hide_run'><a href='#n78'>78</a></p> -<p id='n79' class='pln'><a href='#n79'>79</a></p> -<p id='n80' class='stm run hide_run'><a href='#n80'>80</a></p> -<p id='n81' class='pln'><a href='#n81'>81</a></p> -<p id='n82' class='stm run hide_run'><a href='#n82'>82</a></p> -<p id='n83' class='pln'><a href='#n83'>83</a></p> -<p id='n84' class='stm run hide_run'><a href='#n84'>84</a></p> -<p id='n85' class='stm run hide_run'><a href='#n85'>85</a></p> -<p id='n86' class='stm run hide_run'><a href='#n86'>86</a></p> -<p id='n87' class='pln'><a href='#n87'>87</a></p> -<p id='n88' class='stm run hide_run'><a href='#n88'>88</a></p> -<p id='n89' class='pln'><a href='#n89'>89</a></p> -<p id='n90' class='stm run hide_run'><a href='#n90'>90</a></p> -<p id='n91' class='stm run hide_run'><a href='#n91'>91</a></p> -<p id='n92' class='pln'><a href='#n92'>92</a></p> -<p id='n93' class='stm run hide_run'><a href='#n93'>93</a></p> -<p id='n94' class='pln'><a href='#n94'>94</a></p> -<p id='n95' class='stm run hide_run'><a href='#n95'>95</a></p> -<p id='n96' class='pln'><a href='#n96'>96</a></p> -<p id='n97' class='stm run hide_run'><a href='#n97'>97</a></p> -<p id='n98' class='pln'><a href='#n98'>98</a></p> -<p id='n99' class='stm run hide_run'><a href='#n99'>99</a></p> -<p id='n100' class='pln'><a href='#n100'>100</a></p> -<p id='n101' class='stm run hide_run'><a href='#n101'>101</a></p> -<p id='n102' class='pln'><a href='#n102'>102</a></p> -<p id='n103' class='stm mis'><a href='#n103'>103</a></p> -<p id='n104' class='pln'><a href='#n104'>104</a></p> -<p id='n105' class='stm run hide_run'><a href='#n105'>105</a></p> -<p id='n106' class='pln'><a href='#n106'>106</a></p> -<p id='n107' class='stm run hide_run'><a href='#n107'>107</a></p> -<p id='n108' class='pln'><a href='#n108'>108</a></p> -<p id='n109' class='stm run hide_run'><a href='#n109'>109</a></p> -<p id='n110' class='stm run hide_run'><a href='#n110'>110</a></p> -<p id='n111' class='stm run hide_run'><a href='#n111'>111</a></p> -<p id='n112' class='stm run hide_run'><a href='#n112'>112</a></p> -<p id='n113' class='stm run hide_run'><a href='#n113'>113</a></p> -<p id='n114' class='stm run hide_run'><a href='#n114'>114</a></p> -<p id='n115' class='stm run hide_run'><a href='#n115'>115</a></p> -<p id='n116' class='stm run hide_run'><a href='#n116'>116</a></p> -<p id='n117' class='stm mis'><a href='#n117'>117</a></p> -<p id='n118' class='stm mis'><a href='#n118'>118</a></p> -<p id='n119' class='stm mis'><a href='#n119'>119</a></p> -<p id='n120' class='stm mis'><a href='#n120'>120</a></p> -<p id='n121' class='pln'><a href='#n121'>121</a></p> -<p id='n122' class='pln'><a href='#n122'>122</a></p> -<p id='n123' class='stm run hide_run'><a href='#n123'>123</a></p> -<p id='n124' class='pln'><a href='#n124'>124</a></p> -<p id='n125' class='pln'><a href='#n125'>125</a></p> -<p id='n126' class='stm run hide_run'><a href='#n126'>126</a></p> -<p id='n127' class='pln'><a href='#n127'>127</a></p> -<p id='n128' class='pln'><a href='#n128'>128</a></p> -<p id='n129' class='pln'><a href='#n129'>129</a></p> -<p id='n130' class='pln'><a href='#n130'>130</a></p> -<p id='n131' class='pln'><a href='#n131'>131</a></p> -<p id='n132' class='pln'><a href='#n132'>132</a></p> -<p id='n133' class='pln'><a href='#n133'>133</a></p> -<p id='n134' class='pln'><a href='#n134'>134</a></p> -<p id='n135' class='pln'><a href='#n135'>135</a></p> -<p id='n136' class='pln'><a href='#n136'>136</a></p> -<p id='n137' class='pln'><a href='#n137'>137</a></p> -<p id='n138' class='pln'><a href='#n138'>138</a></p> -<p id='n139' class='pln'><a href='#n139'>139</a></p> -<p id='n140' class='pln'><a href='#n140'>140</a></p> -<p id='n141' class='pln'><a href='#n141'>141</a></p> -<p id='n142' class='pln'><a href='#n142'>142</a></p> -<p id='n143' class='pln'><a href='#n143'>143</a></p> -<p id='n144' class='pln'><a href='#n144'>144</a></p> -<p id='n145' class='pln'><a href='#n145'>145</a></p> -<p id='n146' class='stm run hide_run'><a href='#n146'>146</a></p> -<p id='n147' class='stm run hide_run'><a href='#n147'>147</a></p> -<p id='n148' class='stm run hide_run'><a href='#n148'>148</a></p> -<p id='n149' class='stm run hide_run'><a href='#n149'>149</a></p> -<p id='n150' class='stm run hide_run'><a href='#n150'>150</a></p> -<p id='n151' class='pln'><a href='#n151'>151</a></p> -<p id='n152' class='stm run hide_run'><a href='#n152'>152</a></p> -<p id='n153' class='stm run hide_run'><a href='#n153'>153</a></p> -<p id='n154' class='stm run hide_run'><a href='#n154'>154</a></p> -<p id='n155' class='pln'><a href='#n155'>155</a></p> -<p id='n156' class='pln'><a href='#n156'>156</a></p> -<p id='n157' class='pln'><a href='#n157'>157</a></p> -<p id='n158' class='pln'><a href='#n158'>158</a></p> -<p id='n159' class='pln'><a href='#n159'>159</a></p> -<p id='n160' class='pln'><a href='#n160'>160</a></p> -<p id='n161' class='pln'><a href='#n161'>161</a></p> -<p id='n162' class='pln'><a href='#n162'>162</a></p> -<p id='n163' class='pln'><a href='#n163'>163</a></p> -<p id='n164' class='pln'><a href='#n164'>164</a></p> -<p id='n165' class='pln'><a href='#n165'>165</a></p> -<p id='n166' class='stm run hide_run'><a href='#n166'>166</a></p> -<p id='n167' class='pln'><a href='#n167'>167</a></p> -<p id='n168' class='pln'><a href='#n168'>168</a></p> -<p id='n169' class='pln'><a href='#n169'>169</a></p> -<p id='n170' class='pln'><a href='#n170'>170</a></p> -<p id='n171' class='pln'><a href='#n171'>171</a></p> -<p id='n172' class='pln'><a href='#n172'>172</a></p> -<p id='n173' class='pln'><a href='#n173'>173</a></p> -<p id='n174' class='pln'><a href='#n174'>174</a></p> -<p id='n175' class='pln'><a href='#n175'>175</a></p> -<p id='n176' class='pln'><a href='#n176'>176</a></p> -<p id='n177' class='pln'><a href='#n177'>177</a></p> -<p id='n178' class='pln'><a href='#n178'>178</a></p> -<p id='n179' class='pln'><a href='#n179'>179</a></p> -<p id='n180' class='pln'><a href='#n180'>180</a></p> -<p id='n181' class='pln'><a href='#n181'>181</a></p> -<p id='n182' class='stm run hide_run'><a href='#n182'>182</a></p> -<p id='n183' class='pln'><a href='#n183'>183</a></p> -<p id='n184' class='stm run hide_run'><a href='#n184'>184</a></p> -<p id='n185' class='pln'><a href='#n185'>185</a></p> -<p id='n186' class='stm run hide_run'><a href='#n186'>186</a></p> -<p id='n187' class='pln'><a href='#n187'>187</a></p> -<p id='n188' class='stm run hide_run'><a href='#n188'>188</a></p> -<p id='n189' class='pln'><a href='#n189'>189</a></p> -<p id='n190' class='stm run hide_run'><a href='#n190'>190</a></p> -<p id='n191' class='pln'><a href='#n191'>191</a></p> -<p id='n192' class='stm run hide_run'><a href='#n192'>192</a></p> -<p id='n193' class='pln'><a href='#n193'>193</a></p> -<p id='n194' class='stm mis'><a href='#n194'>194</a></p> -<p id='n195' class='pln'><a href='#n195'>195</a></p> -<p id='n196' class='stm run hide_run'><a href='#n196'>196</a></p> -<p id='n197' class='pln'><a href='#n197'>197</a></p> -<p id='n198' class='stm mis'><a href='#n198'>198</a></p> -<p id='n199' class='pln'><a href='#n199'>199</a></p> -<p id='n200' class='stm run hide_run'><a href='#n200'>200</a></p> -<p id='n201' class='pln'><a href='#n201'>201</a></p> -<p id='n202' class='stm run hide_run'><a href='#n202'>202</a></p> -<p id='n203' class='pln'><a href='#n203'>203</a></p> -<p id='n204' class='stm run hide_run'><a href='#n204'>204</a></p> -<p id='n205' class='pln'><a href='#n205'>205</a></p> -<p id='n206' class='stm run hide_run'><a href='#n206'>206</a></p> -<p id='n207' class='pln'><a href='#n207'>207</a></p> -<p id='n208' class='stm run hide_run'><a href='#n208'>208</a></p> -<p id='n209' class='pln'><a href='#n209'>209</a></p> -<p id='n210' class='stm run hide_run'><a href='#n210'>210</a></p> -<p id='n211' class='pln'><a href='#n211'>211</a></p> -<p id='n212' class='stm run hide_run'><a href='#n212'>212</a></p> -<p id='n213' class='pln'><a href='#n213'>213</a></p> -<p id='n214' class='stm run hide_run'><a href='#n214'>214</a></p> -<p id='n215' class='pln'><a href='#n215'>215</a></p> -<p id='n216' class='stm run hide_run'><a href='#n216'>216</a></p> -<p id='n217' class='pln'><a href='#n217'>217</a></p> -<p id='n218' class='stm mis'><a href='#n218'>218</a></p> -<p id='n219' class='pln'><a href='#n219'>219</a></p> -<p id='n220' class='stm run hide_run'><a href='#n220'>220</a></p> -<p id='n221' class='pln'><a href='#n221'>221</a></p> -<p id='n222' class='stm mis'><a href='#n222'>222</a></p> -<p id='n223' class='pln'><a href='#n223'>223</a></p> -<p id='n224' class='stm run hide_run'><a href='#n224'>224</a></p> -<p id='n225' class='stm run hide_run'><a href='#n225'>225</a></p> -<p id='n226' class='stm run hide_run'><a href='#n226'>226</a></p> -<p id='n227' class='pln'><a href='#n227'>227</a></p> -<p id='n228' class='stm run hide_run'><a href='#n228'>228</a></p> -<p id='n229' class='stm run hide_run'><a href='#n229'>229</a></p> -<p id='n230' class='stm run hide_run'><a href='#n230'>230</a></p> -<p id='n231' class='stm run hide_run'><a href='#n231'>231</a></p> -<p id='n232' class='stm run hide_run'><a href='#n232'>232</a></p> -<p id='n233' class='stm run hide_run'><a href='#n233'>233</a></p> -<p id='n234' class='stm run hide_run'><a href='#n234'>234</a></p> -<p id='n235' class='stm run hide_run'><a href='#n235'>235</a></p> -<p id='n236' class='stm run hide_run'><a href='#n236'>236</a></p> -<p id='n237' class='stm run hide_run'><a href='#n237'>237</a></p> -<p id='n238' class='stm run hide_run'><a href='#n238'>238</a></p> -<p id='n239' class='stm run hide_run'><a href='#n239'>239</a></p> -<p id='n240' class='pln'><a href='#n240'>240</a></p> -<p id='n241' class='stm run hide_run'><a href='#n241'>241</a></p> -<p id='n242' class='stm run hide_run'><a href='#n242'>242</a></p> -<p id='n243' class='stm run hide_run'><a href='#n243'>243</a></p> -<p id='n244' class='stm run hide_run'><a href='#n244'>244</a></p> -<p id='n245' class='stm run hide_run'><a href='#n245'>245</a></p> -<p id='n246' class='stm mis'><a href='#n246'>246</a></p> -<p id='n247' class='stm mis'><a href='#n247'>247</a></p> -<p id='n248' class='stm run hide_run'><a href='#n248'>248</a></p> -<p id='n249' class='stm run hide_run'><a href='#n249'>249</a></p> -<p id='n250' class='stm run hide_run'><a href='#n250'>250</a></p> -<p id='n251' class='stm mis'><a href='#n251'>251</a></p> -<p id='n252' class='stm run hide_run'><a href='#n252'>252</a></p> -<p id='n253' class='stm run hide_run'><a href='#n253'>253</a></p> -<p id='n254' class='stm run hide_run'><a href='#n254'>254</a></p> -<p id='n255' class='stm run hide_run'><a href='#n255'>255</a></p> -<p id='n256' class='pln'><a href='#n256'>256</a></p> -<p id='n257' class='stm mis'><a href='#n257'>257</a></p> -<p id='n258' class='stm run hide_run'><a href='#n258'>258</a></p> -<p id='n259' class='stm mis'><a href='#n259'>259</a></p> -<p id='n260' class='stm run hide_run'><a href='#n260'>260</a></p> -<p id='n261' class='stm run hide_run'><a href='#n261'>261</a></p> -<p id='n262' class='stm run hide_run'><a href='#n262'>262</a></p> -<p id='n263' class='stm mis'><a href='#n263'>263</a></p> -<p id='n264' class='stm mis'><a href='#n264'>264</a></p> -<p id='n265' class='stm run hide_run'><a href='#n265'>265</a></p> -<p id='n266' class='stm mis'><a href='#n266'>266</a></p> -<p id='n267' class='stm run hide_run'><a href='#n267'>267</a></p> -<p id='n268' class='pln'><a href='#n268'>268</a></p> -<p id='n269' class='stm run hide_run'><a href='#n269'>269</a></p> -<p id='n270' class='stm mis'><a href='#n270'>270</a></p> -<p id='n271' class='stm mis'><a href='#n271'>271</a></p> -<p id='n272' class='stm mis'><a href='#n272'>272</a></p> -<p id='n273' class='pln'><a href='#n273'>273</a></p> -<p id='n274' class='stm run hide_run'><a href='#n274'>274</a></p> -<p id='n275' class='stm run hide_run'><a href='#n275'>275</a></p> -<p id='n276' class='stm mis'><a href='#n276'>276</a></p> -<p id='n277' class='pln'><a href='#n277'>277</a></p> -<p id='n278' class='stm run hide_run'><a href='#n278'>278</a></p> -<p id='n279' class='stm run hide_run'><a href='#n279'>279</a></p> -<p id='n280' class='stm run hide_run'><a href='#n280'>280</a></p> -<p id='n281' class='pln'><a href='#n281'>281</a></p> -<p id='n282' class='pln'><a href='#n282'>282</a></p> -<p id='n283' class='stm run hide_run'><a href='#n283'>283</a></p> -<p id='n284' class='stm mis'><a href='#n284'>284</a></p> -<p id='n285' class='stm mis'><a href='#n285'>285</a></p> -<p id='n286' class='stm run hide_run'><a href='#n286'>286</a></p> -<p id='n287' class='stm mis'><a href='#n287'>287</a></p> -<p id='n288' class='stm mis'><a href='#n288'>288</a></p> -<p id='n289' class='stm mis'><a href='#n289'>289</a></p> -<p id='n290' class='stm mis'><a href='#n290'>290</a></p> -<p id='n291' class='stm mis'><a href='#n291'>291</a></p> -<p id='n292' class='pln'><a href='#n292'>292</a></p> -<p id='n293' class='stm mis'><a href='#n293'>293</a></p> -<p id='n294' class='stm mis'><a href='#n294'>294</a></p> -<p id='n295' class='stm mis'><a href='#n295'>295</a></p> -<p id='n296' class='stm mis'><a href='#n296'>296</a></p> -<p id='n297' class='pln'><a href='#n297'>297</a></p> -<p id='n298' class='pln'><a href='#n298'>298</a></p> -<p id='n299' class='stm run hide_run'><a href='#n299'>299</a></p> -<p id='n300' class='stm run hide_run'><a href='#n300'>300</a></p> -<p id='n301' class='stm run hide_run'><a href='#n301'>301</a></p> -<p id='n302' class='stm run hide_run'><a href='#n302'>302</a></p> -<p id='n303' class='stm mis'><a href='#n303'>303</a></p> -<p id='n304' class='stm mis'><a href='#n304'>304</a></p> -<p id='n305' class='stm mis'><a href='#n305'>305</a></p> -<p id='n306' class='pln'><a href='#n306'>306</a></p> -<p id='n307' class='pln'><a href='#n307'>307</a></p> -<p id='n308' class='stm run hide_run'><a href='#n308'>308</a></p> -<p id='n309' class='stm run hide_run'><a href='#n309'>309</a></p> -<p id='n310' class='pln'><a href='#n310'>310</a></p> -<p id='n311' class='pln'><a href='#n311'>311</a></p> -<p id='n312' class='stm mis'><a href='#n312'>312</a></p> -<p id='n313' class='pln'><a href='#n313'>313</a></p> -<p id='n314' class='pln'><a href='#n314'>314</a></p> -<p id='n315' class='pln'><a href='#n315'>315</a></p> -<p id='n316' class='pln'><a href='#n316'>316</a></p> -<p id='n317' class='pln'><a href='#n317'>317</a></p> -<p id='n318' class='pln'><a href='#n318'>318</a></p> -<p id='n319' class='stm mis'><a href='#n319'>319</a></p> -<p id='n320' class='stm mis'><a href='#n320'>320</a></p> -<p id='n321' class='stm mis'><a href='#n321'>321</a></p> -<p id='n322' class='stm mis'><a href='#n322'>322</a></p> -<p id='n323' class='stm mis'><a href='#n323'>323</a></p> -<p id='n324' class='stm mis'><a href='#n324'>324</a></p> -<p id='n325' class='stm mis'><a href='#n325'>325</a></p> -<p id='n326' class='stm mis'><a href='#n326'>326</a></p> -<p id='n327' class='stm mis'><a href='#n327'>327</a></p> -<p id='n328' class='stm mis'><a href='#n328'>328</a></p> -<p id='n329' class='pln'><a href='#n329'>329</a></p> -<p id='n330' class='pln'><a href='#n330'>330</a></p> -<p id='n331' class='stm mis'><a href='#n331'>331</a></p> -<p id='n332' class='pln'><a href='#n332'>332</a></p> -<p id='n333' class='pln'><a href='#n333'>333</a></p> -<p id='n334' class='pln'><a href='#n334'>334</a></p> -<p id='n335' class='stm mis'><a href='#n335'>335</a></p> -<p id='n336' class='stm mis'><a href='#n336'>336</a></p> -<p id='n337' class='stm mis'><a href='#n337'>337</a></p> -<p id='n338' class='stm mis'><a href='#n338'>338</a></p> -<p id='n339' class='stm mis'><a href='#n339'>339</a></p> -<p id='n340' class='stm mis'><a href='#n340'>340</a></p> -<p id='n341' class='stm mis'><a href='#n341'>341</a></p> -<p id='n342' class='pln'><a href='#n342'>342</a></p> -<p id='n343' class='stm run hide_run'><a href='#n343'>343</a></p> -<p id='n344' class='stm run hide_run'><a href='#n344'>344</a></p> -<p id='n345' class='stm run hide_run'><a href='#n345'>345</a></p> -<p id='n346' class='stm mis'><a href='#n346'>346</a></p> -<p id='n347' class='stm mis'><a href='#n347'>347</a></p> -<p id='n348' class='stm run hide_run'><a href='#n348'>348</a></p> -<p id='n349' class='stm run hide_run'><a href='#n349'>349</a></p> -<p id='n350' class='pln'><a href='#n350'>350</a></p> -<p id='n351' class='stm run hide_run'><a href='#n351'>351</a></p> -<p id='n352' class='pln'><a href='#n352'>352</a></p> -<p id='n353' class='stm run hide_run'><a href='#n353'>353</a></p> -<p id='n354' class='stm run hide_run'><a href='#n354'>354</a></p> -<p id='n355' class='stm mis'><a href='#n355'>355</a></p> -<p id='n356' class='stm run hide_run'><a href='#n356'>356</a></p> -<p id='n357' class='pln'><a href='#n357'>357</a></p> -<p id='n358' class='pln'><a href='#n358'>358</a></p> -<p id='n359' class='stm run hide_run'><a href='#n359'>359</a></p> -<p id='n360' class='stm run hide_run'><a href='#n360'>360</a></p> -<p id='n361' class='stm run hide_run'><a href='#n361'>361</a></p> -<p id='n362' class='stm run hide_run'><a href='#n362'>362</a></p> -<p id='n363' class='stm run hide_run'><a href='#n363'>363</a></p> -<p id='n364' class='stm mis'><a href='#n364'>364</a></p> -<p id='n365' class='stm mis'><a href='#n365'>365</a></p> -<p id='n366' class='stm mis'><a href='#n366'>366</a></p> -<p id='n367' class='pln'><a href='#n367'>367</a></p> -<p id='n368' class='stm run hide_run'><a href='#n368'>368</a></p> -<p id='n369' class='pln'><a href='#n369'>369</a></p> -<p id='n370' class='pln'><a href='#n370'>370</a></p> -<p id='n371' class='stm run hide_run'><a href='#n371'>371</a></p> -<p id='n372' class='stm run hide_run'><a href='#n372'>372</a></p> -<p id='n373' class='stm mis'><a href='#n373'>373</a></p> -<p id='n374' class='pln'><a href='#n374'>374</a></p> -<p id='n375' class='stm run hide_run'><a href='#n375'>375</a></p> -<p id='n376' class='pln'><a href='#n376'>376</a></p> -<p id='n377' class='pln'><a href='#n377'>377</a></p> -<p id='n378' class='stm run hide_run'><a href='#n378'>378</a></p> -<p id='n379' class='stm run hide_run'><a href='#n379'>379</a></p> -<p id='n380' class='stm run hide_run'><a href='#n380'>380</a></p> -<p id='n381' class='pln'><a href='#n381'>381</a></p> -<p id='n382' class='stm run hide_run'><a href='#n382'>382</a></p> -<p id='n383' class='stm run hide_run'><a href='#n383'>383</a></p> -<p id='n384' class='stm run hide_run'><a href='#n384'>384</a></p> -<p id='n385' class='stm run hide_run'><a href='#n385'>385</a></p> -<p id='n386' class='stm run hide_run'><a href='#n386'>386</a></p> -<p id='n387' class='stm run hide_run'><a href='#n387'>387</a></p> -<p id='n388' class='stm run hide_run'><a href='#n388'>388</a></p> -<p id='n389' class='stm mis'><a href='#n389'>389</a></p> -<p id='n390' class='stm mis'><a href='#n390'>390</a></p> -<p id='n391' class='stm mis'><a href='#n391'>391</a></p> -<p id='n392' class='stm run hide_run'><a href='#n392'>392</a></p> -<p id='n393' class='stm mis'><a href='#n393'>393</a></p> -<p id='n394' class='stm mis'><a href='#n394'>394</a></p> -<p id='n395' class='pln'><a href='#n395'>395</a></p> -<p id='n396' class='stm mis'><a href='#n396'>396</a></p> -<p id='n397' class='stm mis'><a href='#n397'>397</a></p> -<p id='n398' class='pln'><a href='#n398'>398</a></p> -<p id='n399' class='pln'><a href='#n399'>399</a></p> -<p id='n400' class='stm run hide_run'><a href='#n400'>400</a></p> -<p id='n401' class='stm mis'><a href='#n401'>401</a></p> -<p id='n402' class='stm mis'><a href='#n402'>402</a></p> -<p id='n403' class='pln'><a href='#n403'>403</a></p> -<p id='n404' class='pln'><a href='#n404'>404</a></p> -<p id='n405' class='stm run hide_run'><a href='#n405'>405</a></p> -<p id='n406' class='pln'><a href='#n406'>406</a></p> -<p id='n407' class='pln'><a href='#n407'>407</a></p> -<p id='n408' class='stm run hide_run'><a href='#n408'>408</a></p> -<p id='n409' class='stm mis'><a href='#n409'>409</a></p> -<p id='n410' class='stm mis'><a href='#n410'>410</a></p> -<p id='n411' class='stm run hide_run'><a href='#n411'>411</a></p> -<p id='n412' class='pln'><a href='#n412'>412</a></p> -<p id='n413' class='pln'><a href='#n413'>413</a></p> -<p id='n414' class='stm run hide_run'><a href='#n414'>414</a></p> -<p id='n415' class='stm run hide_run'><a href='#n415'>415</a></p> -<p id='n416' class='stm run hide_run'><a href='#n416'>416</a></p> -<p id='n417' class='stm run hide_run'><a href='#n417'>417</a></p> -<p id='n418' class='pln'><a href='#n418'>418</a></p> -<p id='n419' class='stm mis'><a href='#n419'>419</a></p> -<p id='n420' class='pln'><a href='#n420'>420</a></p> -<p id='n421' class='pln'><a href='#n421'>421</a></p> -<p id='n422' class='stm run hide_run'><a href='#n422'>422</a></p> -<p id='n423' class='stm mis'><a href='#n423'>423</a></p> -<p id='n424' class='stm mis'><a href='#n424'>424</a></p> -<p id='n425' class='stm run hide_run'><a href='#n425'>425</a></p> -<p id='n426' class='pln'><a href='#n426'>426</a></p> -<p id='n427' class='pln'><a href='#n427'>427</a></p> -<p id='n428' class='stm run hide_run'><a href='#n428'>428</a></p> -<p id='n429' class='stm mis'><a href='#n429'>429</a></p> -<p id='n430' class='stm mis'><a href='#n430'>430</a></p> -<p id='n431' class='pln'><a href='#n431'>431</a></p> -<p id='n432' class='stm run hide_run'><a href='#n432'>432</a></p> -<p id='n433' class='pln'><a href='#n433'>433</a></p> -<p id='n434' class='pln'><a href='#n434'>434</a></p> -<p id='n435' class='stm run hide_run'><a href='#n435'>435</a></p> -<p id='n436' class='stm run hide_run'><a href='#n436'>436</a></p> -<p id='n437' class='stm run hide_run'><a href='#n437'>437</a></p> -<p id='n438' class='stm run hide_run'><a href='#n438'>438</a></p> -<p id='n439' class='stm run hide_run'><a href='#n439'>439</a></p> -<p id='n440' class='stm run hide_run'><a href='#n440'>440</a></p> -<p id='n441' class='stm run hide_run'><a href='#n441'>441</a></p> -<p id='n442' class='stm run hide_run'><a href='#n442'>442</a></p> -<p id='n443' class='stm run hide_run'><a href='#n443'>443</a></p> -<p id='n444' class='stm run hide_run'><a href='#n444'>444</a></p> -<p id='n445' class='pln'><a href='#n445'>445</a></p> -<p id='n446' class='pln'><a href='#n446'>446</a></p> -<p id='n447' class='stm run hide_run'><a href='#n447'>447</a></p> -<p id='n448' class='stm run hide_run'><a href='#n448'>448</a></p> -<p id='n449' class='stm run hide_run'><a href='#n449'>449</a></p> -<p id='n450' class='pln'><a href='#n450'>450</a></p> -<p id='n451' class='stm mis'><a href='#n451'>451</a></p> -<p id='n452' class='pln'><a href='#n452'>452</a></p> -<p id='n453' class='pln'><a href='#n453'>453</a></p> -<p id='n454' class='stm run hide_run'><a href='#n454'>454</a></p> -<p id='n455' class='stm run hide_run'><a href='#n455'>455</a></p> -<p id='n456' class='stm run hide_run'><a href='#n456'>456</a></p> -<p id='n457' class='stm run hide_run'><a href='#n457'>457</a></p> -<p id='n458' class='stm mis'><a href='#n458'>458</a></p> -<p id='n459' class='pln'><a href='#n459'>459</a></p> -<p id='n460' class='stm run hide_run'><a href='#n460'>460</a></p> -<p id='n461' class='stm mis'><a href='#n461'>461</a></p> -<p id='n462' class='stm mis'><a href='#n462'>462</a></p> -<p id='n463' class='pln'><a href='#n463'>463</a></p> -<p id='n464' class='stm run hide_run'><a href='#n464'>464</a></p> -<p id='n465' class='pln'><a href='#n465'>465</a></p> -<p id='n466' class='pln'><a href='#n466'>466</a></p> -<p id='n467' class='stm run hide_run'><a href='#n467'>467</a></p> -<p id='n468' class='pln'><a href='#n468'>468</a></p> -<p id='n469' class='pln'><a href='#n469'>469</a></p> -<p id='n470' class='stm run hide_run'><a href='#n470'>470</a></p> -<p id='n471' class='pln'><a href='#n471'>471</a></p> -<p id='n472' class='stm run hide_run'><a href='#n472'>472</a></p> -<p id='n473' class='stm mis'><a href='#n473'>473</a></p> -<p id='n474' class='stm mis'><a href='#n474'>474</a></p> -<p id='n475' class='stm run hide_run'><a href='#n475'>475</a></p> -<p id='n476' class='stm run hide_run'><a href='#n476'>476</a></p> -<p id='n477' class='stm run hide_run'><a href='#n477'>477</a></p> -<p id='n478' class='stm run hide_run'><a href='#n478'>478</a></p> -<p id='n479' class='stm run hide_run'><a href='#n479'>479</a></p> -<p id='n480' class='pln'><a href='#n480'>480</a></p> -<p id='n481' class='stm run hide_run'><a href='#n481'>481</a></p> -<p id='n482' class='stm run hide_run'><a href='#n482'>482</a></p> -<p id='n483' class='stm run hide_run'><a href='#n483'>483</a></p> -<p id='n484' class='stm mis'><a href='#n484'>484</a></p> -<p id='n485' class='pln'><a href='#n485'>485</a></p> -<p id='n486' class='stm run hide_run'><a href='#n486'>486</a></p> -<p id='n487' class='stm run hide_run'><a href='#n487'>487</a></p> -<p id='n488' class='stm run hide_run'><a href='#n488'>488</a></p> -<p id='n489' class='stm mis'><a href='#n489'>489</a></p> -<p id='n490' class='stm mis'><a href='#n490'>490</a></p> -<p id='n491' class='stm run hide_run'><a href='#n491'>491</a></p> -<p id='n492' class='stm mis'><a href='#n492'>492</a></p> -<p id='n493' class='stm mis'><a href='#n493'>493</a></p> -<p id='n494' class='stm run hide_run'><a href='#n494'>494</a></p> -<p id='n495' class='stm run hide_run'><a href='#n495'>495</a></p> -<p id='n496' class='stm mis'><a href='#n496'>496</a></p> -<p id='n497' class='stm mis'><a href='#n497'>497</a></p> -<p id='n498' class='stm mis'><a href='#n498'>498</a></p> -<p id='n499' class='stm mis'><a href='#n499'>499</a></p> -<p id='n500' class='pln'><a href='#n500'>500</a></p> -<p id='n501' class='pln'><a href='#n501'>501</a></p> -<p id='n502' class='pln'><a href='#n502'>502</a></p> -<p id='n503' class='stm mis'><a href='#n503'>503</a></p> -<p id='n504' class='stm mis'><a href='#n504'>504</a></p> -<p id='n505' class='stm mis'><a href='#n505'>505</a></p> -<p id='n506' class='stm mis'><a href='#n506'>506</a></p> -<p id='n507' class='stm mis'><a href='#n507'>507</a></p> -<p id='n508' class='stm mis'><a href='#n508'>508</a></p> -<p id='n509' class='stm mis'><a href='#n509'>509</a></p> -<p id='n510' class='stm mis'><a href='#n510'>510</a></p> -<p id='n511' class='stm mis'><a href='#n511'>511</a></p> -<p id='n512' class='pln'><a href='#n512'>512</a></p> -<p id='n513' class='stm mis'><a href='#n513'>513</a></p> -<p id='n514' class='stm mis'><a href='#n514'>514</a></p> -<p id='n515' class='pln'><a href='#n515'>515</a></p> -<p id='n516' class='stm run hide_run'><a href='#n516'>516</a></p> -<p id='n517' class='stm run hide_run'><a href='#n517'>517</a></p> -<p id='n518' class='pln'><a href='#n518'>518</a></p> -<p id='n519' class='stm run hide_run'><a href='#n519'>519</a></p> -<p id='n520' class='pln'><a href='#n520'>520</a></p> -<p id='n521' class='stm run hide_run'><a href='#n521'>521</a></p> -<p id='n522' class='pln'><a href='#n522'>522</a></p> -<p id='n523' class='pln'><a href='#n523'>523</a></p> -<p id='n524' class='stm run hide_run'><a href='#n524'>524</a></p> -<p id='n525' class='pln'><a href='#n525'>525</a></p> -<p id='n526' class='pln'><a href='#n526'>526</a></p> -<p id='n527' class='pln'><a href='#n527'>527</a></p> -<p id='n528' class='pln'><a href='#n528'>528</a></p> -<p id='n529' class='pln'><a href='#n529'>529</a></p> -<p id='n530' class='pln'><a href='#n530'>530</a></p> -<p id='n531' class='pln'><a href='#n531'>531</a></p> -<p id='n532' class='pln'><a href='#n532'>532</a></p> -<p id='n533' class='pln'><a href='#n533'>533</a></p> -<p id='n534' class='pln'><a href='#n534'>534</a></p> -<p id='n535' class='pln'><a href='#n535'>535</a></p> -<p id='n536' class='pln'><a href='#n536'>536</a></p> -<p id='n537' class='pln'><a href='#n537'>537</a></p> -<p id='n538' class='pln'><a href='#n538'>538</a></p> -<p id='n539' class='stm run hide_run'><a href='#n539'>539</a></p> -<p id='n540' class='pln'><a href='#n540'>540</a></p> -<p id='n541' class='pln'><a href='#n541'>541</a></p> -<p id='n542' class='stm run hide_run'><a href='#n542'>542</a></p> -<p id='n543' class='pln'><a href='#n543'>543</a></p> -<p id='n544' class='pln'><a href='#n544'>544</a></p> -<p id='n545' class='stm run hide_run'><a href='#n545'>545</a></p> -<p id='n546' class='stm run hide_run'><a href='#n546'>546</a></p> -<p id='n547' class='stm run hide_run'><a href='#n547'>547</a></p> -<p id='n548' class='stm run hide_run'><a href='#n548'>548</a></p> -<p id='n549' class='pln'><a href='#n549'>549</a></p> -<p id='n550' class='stm run hide_run'><a href='#n550'>550</a></p> -<p id='n551' class='stm run hide_run'><a href='#n551'>551</a></p> -<p id='n552' class='pln'><a href='#n552'>552</a></p> -<p id='n553' class='stm run hide_run'><a href='#n553'>553</a></p> -<p id='n554' class='pln'><a href='#n554'>554</a></p> -<p id='n555' class='stm run hide_run'><a href='#n555'>555</a></p> -<p id='n556' class='pln'><a href='#n556'>556</a></p> -<p id='n557' class='stm run hide_run'><a href='#n557'>557</a></p> -<p id='n558' class='pln'><a href='#n558'>558</a></p> -<p id='n559' class='stm run hide_run'><a href='#n559'>559</a></p> -<p id='n560' class='pln'><a href='#n560'>560</a></p> -<p id='n561' class='stm run hide_run'><a href='#n561'>561</a></p> -<p id='n562' class='pln'><a href='#n562'>562</a></p> -<p id='n563' class='stm mis'><a href='#n563'>563</a></p> -<p id='n564' class='pln'><a href='#n564'>564</a></p> -<p id='n565' class='stm run hide_run'><a href='#n565'>565</a></p> -<p id='n566' class='pln'><a href='#n566'>566</a></p> -<p id='n567' class='stm mis'><a href='#n567'>567</a></p> -<p id='n568' class='pln'><a href='#n568'>568</a></p> -<p id='n569' class='stm run hide_run'><a href='#n569'>569</a></p> -<p id='n570' class='pln'><a href='#n570'>570</a></p> -<p id='n571' class='stm run hide_run'><a href='#n571'>571</a></p> -<p id='n572' class='stm run hide_run'><a href='#n572'>572</a></p> -<p id='n573' class='stm run hide_run'><a href='#n573'>573</a></p> -<p id='n574' class='stm run hide_run'><a href='#n574'>574</a></p> -<p id='n575' class='stm mis'><a href='#n575'>575</a></p> -<p id='n576' class='stm mis'><a href='#n576'>576</a></p> -<p id='n577' class='stm mis'><a href='#n577'>577</a></p> -<p id='n578' class='pln'><a href='#n578'>578</a></p> -<p id='n579' class='pln'><a href='#n579'>579</a></p> -<p id='n580' class='stm run hide_run'><a href='#n580'>580</a></p> -<p id='n581' class='pln'><a href='#n581'>581</a></p> -<p id='n582' class='pln'><a href='#n582'>582</a></p> -<p id='n583' class='pln'><a href='#n583'>583</a></p> -<p id='n584' class='stm run hide_run'><a href='#n584'>584</a></p> -<p id='n585' class='stm run hide_run'><a href='#n585'>585</a></p> -<p id='n586' class='stm run hide_run'><a href='#n586'>586</a></p> -<p id='n587' class='stm run hide_run'><a href='#n587'>587</a></p> -<p id='n588' class='stm mis'><a href='#n588'>588</a></p> -<p id='n589' class='stm mis'><a href='#n589'>589</a></p> -<p id='n590' class='stm mis'><a href='#n590'>590</a></p> -<p id='n591' class='pln'><a href='#n591'>591</a></p> -<p id='n592' class='stm run hide_run'><a href='#n592'>592</a></p> -<p id='n593' class='pln'><a href='#n593'>593</a></p> -<p id='n594' class='stm run hide_run'><a href='#n594'>594</a></p> -<p id='n595' class='stm run hide_run'><a href='#n595'>595</a></p> -<p id='n596' class='stm mis'><a href='#n596'>596</a></p> -<p id='n597' class='stm mis'><a href='#n597'>597</a></p> -<p id='n598' class='pln'><a href='#n598'>598</a></p> -<p id='n599' class='stm run hide_run'><a href='#n599'>599</a></p> -<p id='n600' class='pln'><a href='#n600'>600</a></p> -<p id='n601' class='pln'><a href='#n601'>601</a></p> -<p id='n602' class='stm run hide_run'><a href='#n602'>602</a></p> -<p id='n603' class='stm run hide_run'><a href='#n603'>603</a></p> -<p id='n604' class='stm run hide_run'><a href='#n604'>604</a></p> -<p id='n605' class='stm run hide_run'><a href='#n605'>605</a></p> -<p id='n606' class='pln'><a href='#n606'>606</a></p> -<p id='n607' class='pln'><a href='#n607'>607</a></p> -<p id='n608' class='stm mis'><a href='#n608'>608</a></p> -<p id='n609' class='stm mis'><a href='#n609'>609</a></p> -<p id='n610' class='stm mis'><a href='#n610'>610</a></p> -<p id='n611' class='stm mis'><a href='#n611'>611</a></p> -<p id='n612' class='stm mis'><a href='#n612'>612</a></p> -<p id='n613' class='stm mis'><a href='#n613'>613</a></p> -<p id='n614' class='stm mis'><a href='#n614'>614</a></p> -<p id='n615' class='pln'><a href='#n615'>615</a></p> -<p id='n616' class='pln'><a href='#n616'>616</a></p> -<p id='n617' class='stm mis'><a href='#n617'>617</a></p> -<p id='n618' class='stm mis'><a href='#n618'>618</a></p> -<p id='n619' class='stm mis'><a href='#n619'>619</a></p> -<p id='n620' class='stm mis'><a href='#n620'>620</a></p> -<p id='n621' class='stm mis'><a href='#n621'>621</a></p> -<p id='n622' class='pln'><a href='#n622'>622</a></p> -<p id='n623' class='pln'><a href='#n623'>623</a></p> -<p id='n624' class='stm mis'><a href='#n624'>624</a></p> -<p id='n625' class='stm mis'><a href='#n625'>625</a></p> -<p id='n626' class='stm mis'><a href='#n626'>626</a></p> -<p id='n627' class='pln'><a href='#n627'>627</a></p> -<p id='n628' class='stm mis'><a href='#n628'>628</a></p> -<p id='n629' class='stm mis'><a href='#n629'>629</a></p> -<p id='n630' class='pln'><a href='#n630'>630</a></p> -<p id='n631' class='stm mis'><a href='#n631'>631</a></p> -<p id='n632' class='stm mis'><a href='#n632'>632</a></p> -<p id='n633' class='stm mis'><a href='#n633'>633</a></p> -<p id='n634' class='stm mis'><a href='#n634'>634</a></p> -<p id='n635' class='stm mis'><a href='#n635'>635</a></p> -<p id='n636' class='stm mis'><a href='#n636'>636</a></p> -<p id='n637' class='stm mis'><a href='#n637'>637</a></p> -<p id='n638' class='stm mis'><a href='#n638'>638</a></p> -<p id='n639' class='stm mis'><a href='#n639'>639</a></p> -<p id='n640' class='stm mis'><a href='#n640'>640</a></p> -<p id='n641' class='stm mis'><a href='#n641'>641</a></p> -<p id='n642' class='stm mis'><a href='#n642'>642</a></p> -<p id='n643' class='stm mis'><a href='#n643'>643</a></p> -<p id='n644' class='stm mis'><a href='#n644'>644</a></p> -<p id='n645' class='stm mis'><a href='#n645'>645</a></p> -<p id='n646' class='pln'><a href='#n646'>646</a></p> -<p id='n647' class='stm mis'><a href='#n647'>647</a></p> -<p id='n648' class='stm mis'><a href='#n648'>648</a></p> -<p id='n649' class='stm mis'><a href='#n649'>649</a></p> -<p id='n650' class='stm mis'><a href='#n650'>650</a></p> -<p id='n651' class='stm mis'><a href='#n651'>651</a></p> -<p id='n652' class='pln'><a href='#n652'>652</a></p> -<p id='n653' class='stm mis'><a href='#n653'>653</a></p> -<p id='n654' class='stm mis'><a href='#n654'>654</a></p> -<p id='n655' class='stm mis'><a href='#n655'>655</a></p> -<p id='n656' class='stm mis'><a href='#n656'>656</a></p> -<p id='n657' class='stm mis'><a href='#n657'>657</a></p> -<p id='n658' class='pln'><a href='#n658'>658</a></p> -<p id='n659' class='stm mis'><a href='#n659'>659</a></p> -<p id='n660' class='pln'><a href='#n660'>660</a></p> -<p id='n661' class='pln'><a href='#n661'>661</a></p> -<p id='n662' class='pln'><a href='#n662'>662</a></p> -<p id='n663' class='pln'><a href='#n663'>663</a></p> -<p id='n664' class='pln'><a href='#n664'>664</a></p> -<p id='n665' class='pln'><a href='#n665'>665</a></p> -<p id='n666' class='pln'><a href='#n666'>666</a></p> -<p id='n667' class='pln'><a href='#n667'>667</a></p> -<p id='n668' class='pln'><a href='#n668'>668</a></p> -<p id='n669' class='stm run hide_run'><a href='#n669'>669</a></p> -<p id='n670' class='pln'><a href='#n670'>670</a></p> -<p id='n671' class='pln'><a href='#n671'>671</a></p> -<p id='n672' class='stm run hide_run'><a href='#n672'>672</a></p> -<p id='n673' class='stm run hide_run'><a href='#n673'>673</a></p> -<p id='n674' class='pln'><a href='#n674'>674</a></p> -<p id='n675' class='stm run hide_run'><a href='#n675'>675</a></p> -<p id='n676' class='stm run hide_run'><a href='#n676'>676</a></p> -<p id='n677' class='pln'><a href='#n677'>677</a></p> -<p id='n678' class='stm run hide_run'><a href='#n678'>678</a></p> -<p id='n679' class='pln'><a href='#n679'>679</a></p> -<p id='n680' class='stm run hide_run'><a href='#n680'>680</a></p> -<p id='n681' class='pln'><a href='#n681'>681</a></p> -<p id='n682' class='stm run hide_run'><a href='#n682'>682</a></p> -<p id='n683' class='pln'><a href='#n683'>683</a></p> -<p id='n684' class='stm run hide_run'><a href='#n684'>684</a></p> -<p id='n685' class='stm run hide_run'><a href='#n685'>685</a></p> -<p id='n686' class='stm mis'><a href='#n686'>686</a></p> -<p id='n687' class='stm mis'><a href='#n687'>687</a></p> -<p id='n688' class='pln'><a href='#n688'>688</a></p> -<p id='n689' class='stm run hide_run'><a href='#n689'>689</a></p> -<p id='n690' class='pln'><a href='#n690'>690</a></p> -<p id='n691' class='stm run hide_run'><a href='#n691'>691</a></p> -<p id='n692' class='pln'><a href='#n692'>692</a></p> -<p id='n693' class='pln'><a href='#n693'>693</a></p> -<p id='n694' class='stm run hide_run'><a href='#n694'>694</a></p> -<p id='n695' class='stm run hide_run'><a href='#n695'>695</a></p> -<p id='n696' class='stm run hide_run'><a href='#n696'>696</a></p> -<p id='n697' class='pln'><a href='#n697'>697</a></p> -<p id='n698' class='pln'><a href='#n698'>698</a></p> -<p id='n699' class='stm run hide_run'><a href='#n699'>699</a></p> -<p id='n700' class='stm run hide_run'><a href='#n700'>700</a></p> -<p id='n701' class='stm run hide_run'><a href='#n701'>701</a></p> -<p id='n702' class='stm mis'><a href='#n702'>702</a></p> -<p id='n703' class='stm mis'><a href='#n703'>703</a></p> -<p id='n704' class='stm run hide_run'><a href='#n704'>704</a></p> -<p id='n705' class='pln'><a href='#n705'>705</a></p> -<p id='n706' class='stm run hide_run'><a href='#n706'>706</a></p> -<p id='n707' class='stm run hide_run'><a href='#n707'>707</a></p> -<p id='n708' class='stm run hide_run'><a href='#n708'>708</a></p> -<p id='n709' class='stm run hide_run'><a href='#n709'>709</a></p> -<p id='n710' class='stm run hide_run'><a href='#n710'>710</a></p> -<p id='n711' class='pln'><a href='#n711'>711</a></p> -<p id='n712' class='stm mis'><a href='#n712'>712</a></p> -<p id='n713' class='stm mis'><a href='#n713'>713</a></p> -<p id='n714' class='pln'><a href='#n714'>714</a></p> -<p id='n715' class='stm run hide_run'><a href='#n715'>715</a></p> -<p id='n716' class='stm run hide_run'><a href='#n716'>716</a></p> -<p id='n717' class='stm mis'><a href='#n717'>717</a></p> -<p id='n718' class='stm mis'><a href='#n718'>718</a></p> -<p id='n719' class='pln'><a href='#n719'>719</a></p> -<p id='n720' class='stm run hide_run'><a href='#n720'>720</a></p> -<p id='n721' class='pln'><a href='#n721'>721</a></p> -<p id='n722' class='pln'><a href='#n722'>722</a></p> -<p id='n723' class='pln'><a href='#n723'>723</a></p> -<p id='n724' class='stm run hide_run'><a href='#n724'>724</a></p> -<p id='n725' class='stm run hide_run'><a href='#n725'>725</a></p> -<p id='n726' class='stm mis'><a href='#n726'>726</a></p> -<p id='n727' class='stm mis'><a href='#n727'>727</a></p> -<p id='n728' class='stm run hide_run'><a href='#n728'>728</a></p> -<p id='n729' class='pln'><a href='#n729'>729</a></p> -<p id='n730' class='stm run hide_run'><a href='#n730'>730</a></p> -<p id='n731' class='stm run hide_run'><a href='#n731'>731</a></p> -<p id='n732' class='stm run hide_run'><a href='#n732'>732</a></p> -<p id='n733' class='pln'><a href='#n733'>733</a></p> -<p id='n734' class='stm mis'><a href='#n734'>734</a></p> -<p id='n735' class='stm mis'><a href='#n735'>735</a></p> -<p id='n736' class='stm mis'><a href='#n736'>736</a></p> -<p id='n737' class='pln'><a href='#n737'>737</a></p> -<p id='n738' class='stm mis'><a href='#n738'>738</a></p> -<p id='n739' class='pln'><a href='#n739'>739</a></p> -<p id='n740' class='stm run hide_run'><a href='#n740'>740</a></p> -<p id='n741' class='pln'><a href='#n741'>741</a></p> -<p id='n742' class='stm run hide_run'><a href='#n742'>742</a></p> -<p id='n743' class='stm run hide_run'><a href='#n743'>743</a></p> -<p id='n744' class='stm run hide_run'><a href='#n744'>744</a></p> -<p id='n745' class='stm mis'><a href='#n745'>745</a></p> -<p id='n746' class='pln'><a href='#n746'>746</a></p> -<p id='n747' class='stm run hide_run'><a href='#n747'>747</a></p> -<p id='n748' class='pln'><a href='#n748'>748</a></p> -<p id='n749' class='pln'><a href='#n749'>749</a></p> -<p id='n750' class='pln'><a href='#n750'>750</a></p> -<p id='n751' class='pln'><a href='#n751'>751</a></p> -<p id='n752' class='pln'><a href='#n752'>752</a></p> -<p id='n753' class='pln'><a href='#n753'>753</a></p> -<p id='n754' class='pln'><a href='#n754'>754</a></p> -<p id='n755' class='pln'><a href='#n755'>755</a></p> -<p id='n756' class='pln'><a href='#n756'>756</a></p> -<p id='n757' class='stm run hide_run'><a href='#n757'>757</a></p> -<p id='n758' class='pln'><a href='#n758'>758</a></p> -<p id='n759' class='pln'><a href='#n759'>759</a></p> -<p id='n760' class='stm run hide_run'><a href='#n760'>760</a></p> -<p id='n761' class='stm run hide_run'><a href='#n761'>761</a></p> -<p id='n762' class='pln'><a href='#n762'>762</a></p> -<p id='n763' class='stm run hide_run'><a href='#n763'>763</a></p> -<p id='n764' class='stm mis'><a href='#n764'>764</a></p> -<p id='n765' class='pln'><a href='#n765'>765</a></p> -<p id='n766' class='stm run hide_run'><a href='#n766'>766</a></p> -<p id='n767' class='pln'><a href='#n767'>767</a></p> -<p id='n768' class='stm mis'><a href='#n768'>768</a></p> -<p id='n769' class='pln'><a href='#n769'>769</a></p> -<p id='n770' class='stm run hide_run'><a href='#n770'>770</a></p> -<p id='n771' class='pln'><a href='#n771'>771</a></p> -<p id='n772' class='stm mis'><a href='#n772'>772</a></p> -<p id='n773' class='pln'><a href='#n773'>773</a></p> -<p id='n774' class='stm run hide_run'><a href='#n774'>774</a></p> -<p id='n775' class='pln'><a href='#n775'>775</a></p> -<p id='n776' class='stm mis'><a href='#n776'>776</a></p> -<p id='n777' class='stm mis'><a href='#n777'>777</a></p> -<p id='n778' class='stm mis'><a href='#n778'>778</a></p> -<p id='n779' class='stm mis'><a href='#n779'>779</a></p> -<p id='n780' class='pln'><a href='#n780'>780</a></p> -<p id='n781' class='stm mis'><a href='#n781'>781</a></p> -<p id='n782' class='pln'><a href='#n782'>782</a></p> -<p id='n783' class='stm mis'><a href='#n783'>783</a></p> -<p id='n784' class='pln'><a href='#n784'>784</a></p> -<p id='n785' class='pln'><a href='#n785'>785</a></p> -<p id='n786' class='stm mis'><a href='#n786'>786</a></p> -<p id='n787' class='stm mis'><a href='#n787'>787</a></p> -<p id='n788' class='stm mis'><a href='#n788'>788</a></p> -<p id='n789' class='stm mis'><a href='#n789'>789</a></p> -<p id='n790' class='stm mis'><a href='#n790'>790</a></p> -<p id='n791' class='stm mis'><a href='#n791'>791</a></p> -<p id='n792' class='stm mis'><a href='#n792'>792</a></p> -<p id='n793' class='pln'><a href='#n793'>793</a></p> -<p id='n794' class='pln'><a href='#n794'>794</a></p> -<p id='n795' class='stm mis'><a href='#n795'>795</a></p> -<p id='n796' class='stm mis'><a href='#n796'>796</a></p> -<p id='n797' class='stm mis'><a href='#n797'>797</a></p> -<p id='n798' class='stm mis'><a href='#n798'>798</a></p> -<p id='n799' class='stm mis'><a href='#n799'>799</a></p> -<p id='n800' class='stm mis'><a href='#n800'>800</a></p> -<p id='n801' class='pln'><a href='#n801'>801</a></p> -<p id='n802' class='stm mis'><a href='#n802'>802</a></p> -<p id='n803' class='pln'><a href='#n803'>803</a></p> -<p id='n804' class='stm mis'><a href='#n804'>804</a></p> -<p id='n805' class='stm mis'><a href='#n805'>805</a></p> -<p id='n806' class='stm mis'><a href='#n806'>806</a></p> -<p id='n807' class='stm mis'><a href='#n807'>807</a></p> -<p id='n808' class='stm mis'><a href='#n808'>808</a></p> -<p id='n809' class='pln'><a href='#n809'>809</a></p> -<p id='n810' class='stm mis'><a href='#n810'>810</a></p> -<p id='n811' class='pln'><a href='#n811'>811</a></p> -<p id='n812' class='stm mis'><a href='#n812'>812</a></p> -<p id='n813' class='pln'><a href='#n813'>813</a></p> -<p id='n814' class='pln'><a href='#n814'>814</a></p> -<p id='n815' class='pln'><a href='#n815'>815</a></p> -<p id='n816' class='pln'><a href='#n816'>816</a></p> -<p id='n817' class='pln'><a href='#n817'>817</a></p> -<p id='n818' class='pln'><a href='#n818'>818</a></p> -<p id='n819' class='pln'><a href='#n819'>819</a></p> -<p id='n820' class='pln'><a href='#n820'>820</a></p> -<p id='n821' class='pln'><a href='#n821'>821</a></p> -<p id='n822' class='stm run hide_run'><a href='#n822'>822</a></p> -<p id='n823' class='pln'><a href='#n823'>823</a></p> -<p id='n824' class='pln'><a href='#n824'>824</a></p> -<p id='n825' class='stm run hide_run'><a href='#n825'>825</a></p> -<p id='n826' class='pln'><a href='#n826'>826</a></p> -<p id='n827' class='pln'><a href='#n827'>827</a></p> -<p id='n828' class='stm run hide_run'><a href='#n828'>828</a></p> -<p id='n829' class='stm run hide_run'><a href='#n829'>829</a></p> -<p id='n830' class='stm run hide_run'><a href='#n830'>830</a></p> -<p id='n831' class='pln'><a href='#n831'>831</a></p> -<p id='n832' class='stm run hide_run'><a href='#n832'>832</a></p> -<p id='n833' class='stm mis'><a href='#n833'>833</a></p> -<p id='n834' class='pln'><a href='#n834'>834</a></p> -<p id='n835' class='stm run hide_run'><a href='#n835'>835</a></p> -<p id='n836' class='pln'><a href='#n836'>836</a></p> -<p id='n837' class='stm mis'><a href='#n837'>837</a></p> -<p id='n838' class='pln'><a href='#n838'>838</a></p> -<p id='n839' class='stm run hide_run'><a href='#n839'>839</a></p> -<p id='n840' class='pln'><a href='#n840'>840</a></p> -<p id='n841' class='stm mis'><a href='#n841'>841</a></p> -<p id='n842' class='pln'><a href='#n842'>842</a></p> -<p id='n843' class='stm run hide_run'><a href='#n843'>843</a></p> -<p id='n844' class='pln'><a href='#n844'>844</a></p> -<p id='n845' class='stm mis'><a href='#n845'>845</a></p> -<p id='n846' class='stm mis'><a href='#n846'>846</a></p> -<p id='n847' class='stm mis'><a href='#n847'>847</a></p> -<p id='n848' class='stm mis'><a href='#n848'>848</a></p> -<p id='n849' class='pln'><a href='#n849'>849</a></p> -<p id='n850' class='stm mis'><a href='#n850'>850</a></p> -<p id='n851' class='stm mis'><a href='#n851'>851</a></p> -<p id='n852' class='pln'><a href='#n852'>852</a></p> -<p id='n853' class='pln'><a href='#n853'>853</a></p> -<p id='n854' class='pln'><a href='#n854'>854</a></p> -<p id='n855' class='stm mis'><a href='#n855'>855</a></p> -<p id='n856' class='stm mis'><a href='#n856'>856</a></p> -<p id='n857' class='stm mis'><a href='#n857'>857</a></p> -<p id='n858' class='stm mis'><a href='#n858'>858</a></p> -<p id='n859' class='stm mis'><a href='#n859'>859</a></p> -<p id='n860' class='stm mis'><a href='#n860'>860</a></p> -<p id='n861' class='stm mis'><a href='#n861'>861</a></p> -<p id='n862' class='pln'><a href='#n862'>862</a></p> -<p id='n863' class='stm mis'><a href='#n863'>863</a></p> -<p id='n864' class='stm mis'><a href='#n864'>864</a></p> -<p id='n865' class='stm mis'><a href='#n865'>865</a></p> -<p id='n866' class='stm mis'><a href='#n866'>866</a></p> -<p id='n867' class='stm mis'><a href='#n867'>867</a></p> -<p id='n868' class='pln'><a href='#n868'>868</a></p> -<p id='n869' class='stm mis'><a href='#n869'>869</a></p> -<p id='n870' class='stm mis'><a href='#n870'>870</a></p> -<p id='n871' class='stm mis'><a href='#n871'>871</a></p> -<p id='n872' class='stm mis'><a href='#n872'>872</a></p> -<p id='n873' class='stm mis'><a href='#n873'>873</a></p> -<p id='n874' class='pln'><a href='#n874'>874</a></p> -<p id='n875' class='stm mis'><a href='#n875'>875</a></p> -<p id='n876' class='stm mis'><a href='#n876'>876</a></p> -<p id='n877' class='pln'><a href='#n877'>877</a></p> -<p id='n878' class='pln'><a href='#n878'>878</a></p> -<p id='n879' class='stm mis'><a href='#n879'>879</a></p> -<p id='n880' class='stm mis'><a href='#n880'>880</a></p> -<p id='n881' class='stm mis'><a href='#n881'>881</a></p> -<p id='n882' class='stm mis'><a href='#n882'>882</a></p> -<p id='n883' class='stm mis'><a href='#n883'>883</a></p> -<p id='n884' class='stm mis'><a href='#n884'>884</a></p> -<p id='n885' class='stm mis'><a href='#n885'>885</a></p> -<p id='n886' class='pln'><a href='#n886'>886</a></p> -<p id='n887' class='pln'><a href='#n887'>887</a></p> -<p id='n888' class='stm mis'><a href='#n888'>888</a></p> -<p id='n889' class='stm mis'><a href='#n889'>889</a></p> -<p id='n890' class='stm mis'><a href='#n890'>890</a></p> -<p id='n891' class='stm mis'><a href='#n891'>891</a></p> -<p id='n892' class='stm mis'><a href='#n892'>892</a></p> -<p id='n893' class='stm mis'><a href='#n893'>893</a></p> -<p id='n894' class='pln'><a href='#n894'>894</a></p> -<p id='n895' class='stm mis'><a href='#n895'>895</a></p> -<p id='n896' class='stm mis'><a href='#n896'>896</a></p> -<p id='n897' class='stm mis'><a href='#n897'>897</a></p> -<p id='n898' class='stm mis'><a href='#n898'>898</a></p> -<p id='n899' class='stm mis'><a href='#n899'>899</a></p> -<p id='n900' class='pln'><a href='#n900'>900</a></p> -<p id='n901' class='pln'><a href='#n901'>901</a></p> -<p id='n902' class='stm mis'><a href='#n902'>902</a></p> -<p id='n903' class='stm mis'><a href='#n903'>903</a></p> -<p id='n904' class='stm mis'><a href='#n904'>904</a></p> -<p id='n905' class='stm mis'><a href='#n905'>905</a></p> -<p id='n906' class='stm mis'><a href='#n906'>906</a></p> -<p id='n907' class='pln'><a href='#n907'>907</a></p> -<p id='n908' class='pln'><a href='#n908'>908</a></p> -<p id='n909' class='stm mis'><a href='#n909'>909</a></p> -<p id='n910' class='stm mis'><a href='#n910'>910</a></p> -<p id='n911' class='stm mis'><a href='#n911'>911</a></p> -<p id='n912' class='stm mis'><a href='#n912'>912</a></p> -<p id='n913' class='stm mis'><a href='#n913'>913</a></p> -<p id='n914' class='stm mis'><a href='#n914'>914</a></p> -<p id='n915' class='stm mis'><a href='#n915'>915</a></p> -<p id='n916' class='pln'><a href='#n916'>916</a></p> -<p id='n917' class='pln'><a href='#n917'>917</a></p> -<p id='n918' class='stm mis'><a href='#n918'>918</a></p> -<p id='n919' class='stm mis'><a href='#n919'>919</a></p> -<p id='n920' class='stm mis'><a href='#n920'>920</a></p> -<p id='n921' class='stm mis'><a href='#n921'>921</a></p> -<p id='n922' class='stm mis'><a href='#n922'>922</a></p> -<p id='n923' class='pln'><a href='#n923'>923</a></p> -<p id='n924' class='stm mis'><a href='#n924'>924</a></p> -<p id='n925' class='stm mis'><a href='#n925'>925</a></p> -<p id='n926' class='stm mis'><a href='#n926'>926</a></p> -<p id='n927' class='stm mis'><a href='#n927'>927</a></p> -<p id='n928' class='stm mis'><a href='#n928'>928</a></p> -<p id='n929' class='pln'><a href='#n929'>929</a></p> -<p id='n930' class='pln'><a href='#n930'>930</a></p> -<p id='n931' class='pln'><a href='#n931'>931</a></p> -<p id='n932' class='pln'><a href='#n932'>932</a></p> -<p id='n933' class='stm mis'><a href='#n933'>933</a></p> -<p id='n934' class='stm mis'><a href='#n934'>934</a></p> -<p id='n935' class='stm mis'><a href='#n935'>935</a></p> -<p id='n936' class='pln'><a href='#n936'>936</a></p> -<p id='n937' class='pln'><a href='#n937'>937</a></p> -<p id='n938' class='stm mis'><a href='#n938'>938</a></p> -<p id='n939' class='stm mis'><a href='#n939'>939</a></p> -<p id='n940' class='stm mis'><a href='#n940'>940</a></p> -<p id='n941' class='stm mis'><a href='#n941'>941</a></p> -<p id='n942' class='stm mis'><a href='#n942'>942</a></p> -<p id='n943' class='stm mis'><a href='#n943'>943</a></p> -<p id='n944' class='pln'><a href='#n944'>944</a></p> -<p id='n945' class='pln'><a href='#n945'>945</a></p> -<p id='n946' class='stm mis'><a href='#n946'>946</a></p> -<p id='n947' class='stm mis'><a href='#n947'>947</a></p> -<p id='n948' class='stm mis'><a href='#n948'>948</a></p> -<p id='n949' class='stm mis'><a href='#n949'>949</a></p> -<p id='n950' class='stm mis'><a href='#n950'>950</a></p> -<p id='n951' class='stm mis'><a href='#n951'>951</a></p> -<p id='n952' class='pln'><a href='#n952'>952</a></p> -<p id='n953' class='stm mis'><a href='#n953'>953</a></p> -<p id='n954' class='pln'><a href='#n954'>954</a></p> -<p id='n955' class='pln'><a href='#n955'>955</a></p> -<p id='n956' class='pln'><a href='#n956'>956</a></p> -<p id='n957' class='pln'><a href='#n957'>957</a></p> -<p id='n958' class='pln'><a href='#n958'>958</a></p> -<p id='n959' class='pln'><a href='#n959'>959</a></p> -<p id='n960' class='pln'><a href='#n960'>960</a></p> -<p id='n961' class='pln'><a href='#n961'>961</a></p> -<p id='n962' class='pln'><a href='#n962'>962</a></p> -<p id='n963' class='pln'><a href='#n963'>963</a></p> -<p id='n964' class='pln'><a href='#n964'>964</a></p> -<p id='n965' class='stm run hide_run'><a href='#n965'>965</a></p> -<p id='n966' class='pln'><a href='#n966'>966</a></p> -<p id='n967' class='pln'><a href='#n967'>967</a></p> -<p id='n968' class='pln'><a href='#n968'>968</a></p> -<p id='n969' class='stm run hide_run'><a href='#n969'>969</a></p> -<p id='n970' class='stm run hide_run'><a href='#n970'>970</a></p> -<p id='n971' class='pln'><a href='#n971'>971</a></p> -<p id='n972' class='stm run hide_run'><a href='#n972'>972</a></p> -<p id='n973' class='stm run hide_run'><a href='#n973'>973</a></p> -<p id='n974' class='pln'><a href='#n974'>974</a></p> -<p id='n975' class='stm run hide_run'><a href='#n975'>975</a></p> -<p id='n976' class='pln'><a href='#n976'>976</a></p> -<p id='n977' class='stm run hide_run'><a href='#n977'>977</a></p> -<p id='n978' class='pln'><a href='#n978'>978</a></p> -<p id='n979' class='stm run hide_run'><a href='#n979'>979</a></p> -<p id='n980' class='pln'><a href='#n980'>980</a></p> -<p id='n981' class='stm run hide_run'><a href='#n981'>981</a></p> -<p id='n982' class='pln'><a href='#n982'>982</a></p> -<p id='n983' class='stm run hide_run'><a href='#n983'>983</a></p> -<p id='n984' class='pln'><a href='#n984'>984</a></p> -<p id='n985' class='stm run hide_run'><a href='#n985'>985</a></p> -<p id='n986' class='stm run hide_run'><a href='#n986'>986</a></p> -<p id='n987' class='stm mis'><a href='#n987'>987</a></p> -<p id='n988' class='stm mis'><a href='#n988'>988</a></p> -<p id='n989' class='pln'><a href='#n989'>989</a></p> -<p id='n990' class='stm run hide_run'><a href='#n990'>990</a></p> -<p id='n991' class='pln'><a href='#n991'>991</a></p> -<p id='n992' class='pln'><a href='#n992'>992</a></p> -<p id='n993' class='stm run hide_run'><a href='#n993'>993</a></p> -<p id='n994' class='stm run hide_run'><a href='#n994'>994</a></p> -<p id='n995' class='stm run hide_run'><a href='#n995'>995</a></p> -<p id='n996' class='stm run hide_run'><a href='#n996'>996</a></p> -<p id='n997' class='stm run hide_run'><a href='#n997'>997</a></p> -<p id='n998' class='stm mis'><a href='#n998'>998</a></p> -<p id='n999' class='stm mis'><a href='#n999'>999</a></p> -<p id='n1000' class='stm mis'><a href='#n1000'>1000</a></p> -<p id='n1001' class='pln'><a href='#n1001'>1001</a></p> -<p id='n1002' class='pln'><a href='#n1002'>1002</a></p> -<p id='n1003' class='pln'><a href='#n1003'>1003</a></p> -<p id='n1004' class='pln'><a href='#n1004'>1004</a></p> -<p id='n1005' class='stm run hide_run'><a href='#n1005'>1005</a></p> -<p id='n1006' class='pln'><a href='#n1006'>1006</a></p> -<p id='n1007' class='pln'><a href='#n1007'>1007</a></p> -<p id='n1008' class='stm run hide_run'><a href='#n1008'>1008</a></p> -<p id='n1009' class='stm run hide_run'><a href='#n1009'>1009</a></p> -<p id='n1010' class='stm run hide_run'><a href='#n1010'>1010</a></p> -<p id='n1011' class='stm mis'><a href='#n1011'>1011</a></p> -<p id='n1012' class='stm mis'><a href='#n1012'>1012</a></p> -<p id='n1013' class='stm mis'><a href='#n1013'>1013</a></p> -<p id='n1014' class='pln'><a href='#n1014'>1014</a></p> -<p id='n1015' class='pln'><a href='#n1015'>1015</a></p> -<p id='n1016' class='stm run hide_run'><a href='#n1016'>1016</a></p> -<p id='n1017' class='pln'><a href='#n1017'>1017</a></p> -<p id='n1018' class='pln'><a href='#n1018'>1018</a></p> -<p id='n1019' class='stm run hide_run'><a href='#n1019'>1019</a></p> -<p id='n1020' class='stm run hide_run'><a href='#n1020'>1020</a></p> -<p id='n1021' class='pln'><a href='#n1021'>1021</a></p> -<p id='n1022' class='pln'><a href='#n1022'>1022</a></p> -<p id='n1023' class='stm run hide_run'><a href='#n1023'>1023</a></p> -<p id='n1024' class='pln'><a href='#n1024'>1024</a></p> -<p id='n1025' class='pln'><a href='#n1025'>1025</a></p> -<p id='n1026' class='stm run hide_run'><a href='#n1026'>1026</a></p> -<p id='n1027' class='stm run hide_run'><a href='#n1027'>1027</a></p> -<p id='n1028' class='stm mis'><a href='#n1028'>1028</a></p> -<p id='n1029' class='pln'><a href='#n1029'>1029</a></p> -<p id='n1030' class='pln'><a href='#n1030'>1030</a></p> -<p id='n1031' class='stm run hide_run'><a href='#n1031'>1031</a></p> -<p id='n1032' class='stm run hide_run'><a href='#n1032'>1032</a></p> -<p id='n1033' class='stm run hide_run'><a href='#n1033'>1033</a></p> -<p id='n1034' class='stm run hide_run'><a href='#n1034'>1034</a></p> -<p id='n1035' class='pln'><a href='#n1035'>1035</a></p> -<p id='n1036' class='pln'><a href='#n1036'>1036</a></p> -<p id='n1037' class='stm run hide_run'><a href='#n1037'>1037</a></p> -<p id='n1038' class='stm run hide_run'><a href='#n1038'>1038</a></p> -<p id='n1039' class='pln'><a href='#n1039'>1039</a></p> -<p id='n1040' class='pln'><a href='#n1040'>1040</a></p> -<p id='n1041' class='pln'><a href='#n1041'>1041</a></p> -<p id='n1042' class='pln'><a href='#n1042'>1042</a></p> -<p id='n1043' class='stm run hide_run'><a href='#n1043'>1043</a></p> -<p id='n1044' class='stm run hide_run'><a href='#n1044'>1044</a></p> -<p id='n1045' class='stm run hide_run'><a href='#n1045'>1045</a></p> -<p id='n1046' class='stm run hide_run'><a href='#n1046'>1046</a></p> -<p id='n1047' class='stm run hide_run'><a href='#n1047'>1047</a></p> -<p id='n1048' class='stm run hide_run'><a href='#n1048'>1048</a></p> -<p id='n1049' class='stm mis'><a href='#n1049'>1049</a></p> -<p id='n1050' class='stm mis'><a href='#n1050'>1050</a></p> -<p id='n1051' class='pln'><a href='#n1051'>1051</a></p> -<p id='n1052' class='stm mis'><a href='#n1052'>1052</a></p> -<p id='n1053' class='pln'><a href='#n1053'>1053</a></p> -<p id='n1054' class='stm run hide_run'><a href='#n1054'>1054</a></p> -<p id='n1055' class='stm run hide_run'><a href='#n1055'>1055</a></p> -<p id='n1056' class='stm run hide_run'><a href='#n1056'>1056</a></p> -<p id='n1057' class='stm run hide_run'><a href='#n1057'>1057</a></p> -<p id='n1058' class='stm run hide_run'><a href='#n1058'>1058</a></p> -<p id='n1059' class='stm run hide_run'><a href='#n1059'>1059</a></p> -<p id='n1060' class='stm run hide_run'><a href='#n1060'>1060</a></p> -<p id='n1061' class='pln'><a href='#n1061'>1061</a></p> -<p id='n1062' class='stm mis'><a href='#n1062'>1062</a></p> -<p id='n1063' class='stm mis'><a href='#n1063'>1063</a></p> -<p id='n1064' class='pln'><a href='#n1064'>1064</a></p> -<p id='n1065' class='stm run hide_run'><a href='#n1065'>1065</a></p> -<p id='n1066' class='pln'><a href='#n1066'>1066</a></p> -<p id='n1067' class='pln'><a href='#n1067'>1067</a></p> -<p id='n1068' class='stm run hide_run'><a href='#n1068'>1068</a></p> -<p id='n1069' class='pln'><a href='#n1069'>1069</a></p> -<p id='n1070' class='pln'><a href='#n1070'>1070</a></p> -<p id='n1071' class='pln'><a href='#n1071'>1071</a></p> -<p id='n1072' class='pln'><a href='#n1072'>1072</a></p> -<p id='n1073' class='pln'><a href='#n1073'>1073</a></p> -<p id='n1074' class='pln'><a href='#n1074'>1074</a></p> -<p id='n1075' class='pln'><a href='#n1075'>1075</a></p> -<p id='n1076' class='pln'><a href='#n1076'>1076</a></p> -<p id='n1077' class='pln'><a href='#n1077'>1077</a></p> -<p id='n1078' class='pln'><a href='#n1078'>1078</a></p> -<p id='n1079' class='pln'><a href='#n1079'>1079</a></p> -<p id='n1080' class='pln'><a href='#n1080'>1080</a></p> -<p id='n1081' class='stm run hide_run'><a href='#n1081'>1081</a></p> -<p id='n1082' class='pln'><a href='#n1082'>1082</a></p> -<p id='n1083' class='pln'><a href='#n1083'>1083</a></p> -<p id='n1084' class='stm run hide_run'><a href='#n1084'>1084</a></p> -<p id='n1085' class='stm run hide_run'><a href='#n1085'>1085</a></p> -<p id='n1086' class='pln'><a href='#n1086'>1086</a></p> -<p id='n1087' class='stm run hide_run'><a href='#n1087'>1087</a></p> -<p id='n1088' class='pln'><a href='#n1088'>1088</a></p> -<p id='n1089' class='stm run hide_run'><a href='#n1089'>1089</a></p> -<p id='n1090' class='stm mis'><a href='#n1090'>1090</a></p> -<p id='n1091' class='pln'><a href='#n1091'>1091</a></p> -<p id='n1092' class='stm run hide_run'><a href='#n1092'>1092</a></p> -<p id='n1093' class='pln'><a href='#n1093'>1093</a></p> -<p id='n1094' class='stm mis'><a href='#n1094'>1094</a></p> -<p id='n1095' class='pln'><a href='#n1095'>1095</a></p> -<p id='n1096' class='stm run hide_run'><a href='#n1096'>1096</a></p> -<p id='n1097' class='pln'><a href='#n1097'>1097</a></p> -<p id='n1098' class='stm mis'><a href='#n1098'>1098</a></p> -<p id='n1099' class='pln'><a href='#n1099'>1099</a></p> -<p id='n1100' class='stm run hide_run'><a href='#n1100'>1100</a></p> -<p id='n1101' class='stm mis'><a href='#n1101'>1101</a></p> -<p id='n1102' class='stm mis'><a href='#n1102'>1102</a></p> -<p id='n1103' class='stm mis'><a href='#n1103'>1103</a></p> -<p id='n1104' class='stm mis'><a href='#n1104'>1104</a></p> -<p id='n1105' class='stm mis'><a href='#n1105'>1105</a></p> -<p id='n1106' class='stm mis'><a href='#n1106'>1106</a></p> -<p id='n1107' class='stm mis'><a href='#n1107'>1107</a></p> -<p id='n1108' class='stm mis'><a href='#n1108'>1108</a></p> -<p id='n1109' class='stm mis'><a href='#n1109'>1109</a></p> -<p id='n1110' class='stm mis'><a href='#n1110'>1110</a></p> -<p id='n1111' class='stm mis'><a href='#n1111'>1111</a></p> -<p id='n1112' class='pln'><a href='#n1112'>1112</a></p> -<p id='n1113' class='stm run hide_run'><a href='#n1113'>1113</a></p> -<p id='n1114' class='stm mis'><a href='#n1114'>1114</a></p> -<p id='n1115' class='stm mis'><a href='#n1115'>1115</a></p> -<p id='n1116' class='stm mis'><a href='#n1116'>1116</a></p> -<p id='n1117' class='pln'><a href='#n1117'>1117</a></p> -<p id='n1118' class='stm mis'><a href='#n1118'>1118</a></p> -<p id='n1119' class='stm mis'><a href='#n1119'>1119</a></p> -<p id='n1120' class='stm mis'><a href='#n1120'>1120</a></p> -<p id='n1121' class='pln'><a href='#n1121'>1121</a></p> -<p id='n1122' class='stm mis'><a href='#n1122'>1122</a></p> -<p id='n1123' class='stm mis'><a href='#n1123'>1123</a></p> -<p id='n1124' class='stm mis'><a href='#n1124'>1124</a></p> -<p id='n1125' class='stm mis'><a href='#n1125'>1125</a></p> -<p id='n1126' class='pln'><a href='#n1126'>1126</a></p> -<p id='n1127' class='stm mis'><a href='#n1127'>1127</a></p> -<p id='n1128' class='pln'><a href='#n1128'>1128</a></p> -<p id='n1129' class='stm mis'><a href='#n1129'>1129</a></p> -<p id='n1130' class='pln'><a href='#n1130'>1130</a></p> -<p id='n1131' class='stm run hide_run'><a href='#n1131'>1131</a></p> -<p id='n1132' class='stm mis'><a href='#n1132'>1132</a></p> -<p id='n1133' class='stm mis'><a href='#n1133'>1133</a></p> -<p id='n1134' class='pln'><a href='#n1134'>1134</a></p> -<p id='n1135' class='pln'><a href='#n1135'>1135</a></p> -<p id='n1136' class='pln'><a href='#n1136'>1136</a></p> -<p id='n1137' class='pln'><a href='#n1137'>1137</a></p> -<p id='n1138' class='pln'><a href='#n1138'>1138</a></p> -<p id='n1139' class='pln'><a href='#n1139'>1139</a></p> -<p id='n1140' class='pln'><a href='#n1140'>1140</a></p> -<p id='n1141' class='stm mis'><a href='#n1141'>1141</a></p> -<p id='n1142' class='stm mis'><a href='#n1142'>1142</a></p> -<p id='n1143' class='stm mis'><a href='#n1143'>1143</a></p> -<p id='n1144' class='pln'><a href='#n1144'>1144</a></p> -<p id='n1145' class='pln'><a href='#n1145'>1145</a></p> -<p id='n1146' class='pln'><a href='#n1146'>1146</a></p> -<p id='n1147' class='pln'><a href='#n1147'>1147</a></p> -<p id='n1148' class='pln'><a href='#n1148'>1148</a></p> -<p id='n1149' class='pln'><a href='#n1149'>1149</a></p> -<p id='n1150' class='pln'><a href='#n1150'>1150</a></p> -<p id='n1151' class='pln'><a href='#n1151'>1151</a></p> -<p id='n1152' class='pln'><a href='#n1152'>1152</a></p> -<p id='n1153' class='pln'><a href='#n1153'>1153</a></p> -<p id='n1154' class='pln'><a href='#n1154'>1154</a></p> -<p id='n1155' class='stm mis'><a href='#n1155'>1155</a></p> -<p id='n1156' class='pln'><a href='#n1156'>1156</a></p> -<p id='n1157' class='stm run hide_run'><a href='#n1157'>1157</a></p> -<p id='n1158' class='stm mis'><a href='#n1158'>1158</a></p> -<p id='n1159' class='stm mis'><a href='#n1159'>1159</a></p> -<p id='n1160' class='pln'><a href='#n1160'>1160</a></p> -<p id='n1161' class='pln'><a href='#n1161'>1161</a></p> -<p id='n1162' class='pln'><a href='#n1162'>1162</a></p> -<p id='n1163' class='pln'><a href='#n1163'>1163</a></p> -<p id='n1164' class='pln'><a href='#n1164'>1164</a></p> -<p id='n1165' class='pln'><a href='#n1165'>1165</a></p> -<p id='n1166' class='pln'><a href='#n1166'>1166</a></p> -<p id='n1167' class='stm mis'><a href='#n1167'>1167</a></p> -<p id='n1168' class='stm mis'><a href='#n1168'>1168</a></p> -<p id='n1169' class='pln'><a href='#n1169'>1169</a></p> -<p id='n1170' class='pln'><a href='#n1170'>1170</a></p> -<p id='n1171' class='pln'><a href='#n1171'>1171</a></p> -<p id='n1172' class='pln'><a href='#n1172'>1172</a></p> -<p id='n1173' class='pln'><a href='#n1173'>1173</a></p> -<p id='n1174' class='pln'><a href='#n1174'>1174</a></p> -<p id='n1175' class='pln'><a href='#n1175'>1175</a></p> -<p id='n1176' class='stm mis'><a href='#n1176'>1176</a></p> -<p id='n1177' class='pln'><a href='#n1177'>1177</a></p> -<p id='n1178' class='stm mis'><a href='#n1178'>1178</a></p> -<p id='n1179' class='pln'><a href='#n1179'>1179</a></p> -<p id='n1180' class='pln'><a href='#n1180'>1180</a></p> -<p id='n1181' class='pln'><a href='#n1181'>1181</a></p> -<p id='n1182' class='pln'><a href='#n1182'>1182</a></p> -<p id='n1183' class='pln'><a href='#n1183'>1183</a></p> -<p id='n1184' class='pln'><a href='#n1184'>1184</a></p> -<p id='n1185' class='pln'><a href='#n1185'>1185</a></p> -<p id='n1186' class='pln'><a href='#n1186'>1186</a></p> -<p id='n1187' class='pln'><a href='#n1187'>1187</a></p> -<p id='n1188' class='pln'><a href='#n1188'>1188</a></p> -<p id='n1189' class='pln'><a href='#n1189'>1189</a></p> -<p id='n1190' class='pln'><a href='#n1190'>1190</a></p> -<p id='n1191' class='pln'><a href='#n1191'>1191</a></p> -<p id='n1192' class='pln'><a href='#n1192'>1192</a></p> -<p id='n1193' class='stm mis'><a href='#n1193'>1193</a></p> -<p id='n1194' class='pln'><a href='#n1194'>1194</a></p> -<p id='n1195' class='pln'><a href='#n1195'>1195</a></p> -<p id='n1196' class='pln'><a href='#n1196'>1196</a></p> -<p id='n1197' class='pln'><a href='#n1197'>1197</a></p> -<p id='n1198' class='pln'><a href='#n1198'>1198</a></p> -<p id='n1199' class='pln'><a href='#n1199'>1199</a></p> -<p id='n1200' class='pln'><a href='#n1200'>1200</a></p> -<p id='n1201' class='pln'><a href='#n1201'>1201</a></p> -<p id='n1202' class='pln'><a href='#n1202'>1202</a></p> -<p id='n1203' class='pln'><a href='#n1203'>1203</a></p> -<p id='n1204' class='stm run hide_run'><a href='#n1204'>1204</a></p> -<p id='n1205' class='stm mis'><a href='#n1205'>1205</a></p> -<p id='n1206' class='stm mis'><a href='#n1206'>1206</a></p> -<p id='n1207' class='pln'><a href='#n1207'>1207</a></p> -<p id='n1208' class='stm mis'><a href='#n1208'>1208</a></p> -<p id='n1209' class='stm mis'><a href='#n1209'>1209</a></p> -<p id='n1210' class='stm mis'><a href='#n1210'>1210</a></p> -<p id='n1211' class='pln'><a href='#n1211'>1211</a></p> -<p id='n1212' class='stm mis'><a href='#n1212'>1212</a></p> -<p id='n1213' class='pln'><a href='#n1213'>1213</a></p> -<p id='n1214' class='stm mis'><a href='#n1214'>1214</a></p> -<p id='n1215' class='pln'><a href='#n1215'>1215</a></p> -<p id='n1216' class='pln'><a href='#n1216'>1216</a></p> -<p id='n1217' class='stm run hide_run'><a href='#n1217'>1217</a></p> -<p id='n1218' class='pln'><a href='#n1218'>1218</a></p> -<p id='n1219' class='pln'><a href='#n1219'>1219</a></p> -<p id='n1220' class='stm run hide_run'><a href='#n1220'>1220</a></p> -<p id='n1221' class='stm run hide_run'><a href='#n1221'>1221</a></p> -<p id='n1222' class='pln'><a href='#n1222'>1222</a></p> -<p id='n1223' class='stm run hide_run'><a href='#n1223'>1223</a></p> -<p id='n1224' class='stm mis'><a href='#n1224'>1224</a></p> -<p id='n1225' class='pln'><a href='#n1225'>1225</a></p> -<p id='n1226' class='stm run hide_run'><a href='#n1226'>1226</a></p> -<p id='n1227' class='pln'><a href='#n1227'>1227</a></p> -<p id='n1228' class='stm mis'><a href='#n1228'>1228</a></p> -<p id='n1229' class='stm mis'><a href='#n1229'>1229</a></p> -<p id='n1230' class='pln'><a href='#n1230'>1230</a></p> -<p id='n1231' class='stm run hide_run'><a href='#n1231'>1231</a></p> -<p id='n1232' class='pln'><a href='#n1232'>1232</a></p> -<p id='n1233' class='stm mis'><a href='#n1233'>1233</a></p> -<p id='n1234' class='pln'><a href='#n1234'>1234</a></p> -<p id='n1235' class='stm run hide_run'><a href='#n1235'>1235</a></p> -<p id='n1236' class='pln'><a href='#n1236'>1236</a></p> -<p id='n1237' class='stm mis'><a href='#n1237'>1237</a></p> -<p id='n1238' class='pln'><a href='#n1238'>1238</a></p> -<p id='n1239' class='stm run hide_run'><a href='#n1239'>1239</a></p> -<p id='n1240' class='pln'><a href='#n1240'>1240</a></p> -<p id='n1241' class='stm mis'><a href='#n1241'>1241</a></p> -<p id='n1242' class='stm mis'><a href='#n1242'>1242</a></p> -<p id='n1243' class='stm mis'><a href='#n1243'>1243</a></p> -<p id='n1244' class='pln'><a href='#n1244'>1244</a></p> -<p id='n1245' class='stm mis'><a href='#n1245'>1245</a></p> -<p id='n1246' class='pln'><a href='#n1246'>1246</a></p> -<p id='n1247' class='pln'><a href='#n1247'>1247</a></p> -<p id='n1248' class='pln'><a href='#n1248'>1248</a></p> -<p id='n1249' class='pln'><a href='#n1249'>1249</a></p> -<p id='n1250' class='stm mis'><a href='#n1250'>1250</a></p> -<p id='n1251' class='stm mis'><a href='#n1251'>1251</a></p> -<p id='n1252' class='stm mis'><a href='#n1252'>1252</a></p> -<p id='n1253' class='stm mis'><a href='#n1253'>1253</a></p> -<p id='n1254' class='pln'><a href='#n1254'>1254</a></p> -<p id='n1255' class='stm mis'><a href='#n1255'>1255</a></p> -<p id='n1256' class='pln'><a href='#n1256'>1256</a></p> -<p id='n1257' class='pln'><a href='#n1257'>1257</a></p> -<p id='n1258' class='pln'><a href='#n1258'>1258</a></p> -<p id='n1259' class='pln'><a href='#n1259'>1259</a></p> -<p id='n1260' class='stm mis'><a href='#n1260'>1260</a></p> -<p id='n1261' class='pln'><a href='#n1261'>1261</a></p> -<p id='n1262' class='stm mis'><a href='#n1262'>1262</a></p> -<p id='n1263' class='pln'><a href='#n1263'>1263</a></p> -<p id='n1264' class='pln'><a href='#n1264'>1264</a></p> -<p id='n1265' class='pln'><a href='#n1265'>1265</a></p> -<p id='n1266' class='stm mis'><a href='#n1266'>1266</a></p> -<p id='n1267' class='stm mis'><a href='#n1267'>1267</a></p> -<p id='n1268' class='stm mis'><a href='#n1268'>1268</a></p> -<p id='n1269' class='pln'><a href='#n1269'>1269</a></p> -<p id='n1270' class='stm mis'><a href='#n1270'>1270</a></p> -<p id='n1271' class='pln'><a href='#n1271'>1271</a></p> -<p id='n1272' class='stm mis'><a href='#n1272'>1272</a></p> -<p id='n1273' class='pln'><a href='#n1273'>1273</a></p> -<p id='n1274' class='pln'><a href='#n1274'>1274</a></p> -<p id='n1275' class='pln'><a href='#n1275'>1275</a></p> -<p id='n1276' class='pln'><a href='#n1276'>1276</a></p> -<p id='n1277' class='pln'><a href='#n1277'>1277</a></p> -<p id='n1278' class='stm mis'><a href='#n1278'>1278</a></p> -<p id='n1279' class='stm mis'><a href='#n1279'>1279</a></p> -<p id='n1280' class='pln'><a href='#n1280'>1280</a></p> -<p id='n1281' class='pln'><a href='#n1281'>1281</a></p> -<p id='n1282' class='stm mis'><a href='#n1282'>1282</a></p> -<p id='n1283' class='pln'><a href='#n1283'>1283</a></p> -<p id='n1284' class='stm mis'><a href='#n1284'>1284</a></p> -<p id='n1285' class='stm mis'><a href='#n1285'>1285</a></p> -<p id='n1286' class='pln'><a href='#n1286'>1286</a></p> -<p id='n1287' class='stm mis'><a href='#n1287'>1287</a></p> -<p id='n1288' class='stm mis'><a href='#n1288'>1288</a></p> -<p id='n1289' class='pln'><a href='#n1289'>1289</a></p> -<p id='n1290' class='stm mis'><a href='#n1290'>1290</a></p> -<p id='n1291' class='stm mis'><a href='#n1291'>1291</a></p> -<p id='n1292' class='stm mis'><a href='#n1292'>1292</a></p> -<p id='n1293' class='pln'><a href='#n1293'>1293</a></p> -<p id='n1294' class='stm run hide_run'><a href='#n1294'>1294</a></p> -<p id='n1295' class='stm mis'><a href='#n1295'>1295</a></p> -<p id='n1296' class='pln'><a href='#n1296'>1296</a></p> -<p id='n1297' class='stm mis'><a href='#n1297'>1297</a></p> -<p id='n1298' class='stm mis'><a href='#n1298'>1298</a></p> -<p id='n1299' class='stm mis'><a href='#n1299'>1299</a></p> -<p id='n1300' class='stm mis'><a href='#n1300'>1300</a></p> -<p id='n1301' class='stm mis'><a href='#n1301'>1301</a></p> -<p id='n1302' class='stm mis'><a href='#n1302'>1302</a></p> -<p id='n1303' class='stm mis'><a href='#n1303'>1303</a></p> -<p id='n1304' class='stm mis'><a href='#n1304'>1304</a></p> -<p id='n1305' class='stm mis'><a href='#n1305'>1305</a></p> -<p id='n1306' class='pln'><a href='#n1306'>1306</a></p> -<p id='n1307' class='pln'><a href='#n1307'>1307</a></p> -<p id='n1308' class='stm mis'><a href='#n1308'>1308</a></p> -<p id='n1309' class='stm mis'><a href='#n1309'>1309</a></p> -<p id='n1310' class='pln'><a href='#n1310'>1310</a></p> -<p id='n1311' class='stm mis'><a href='#n1311'>1311</a></p> -<p id='n1312' class='pln'><a href='#n1312'>1312</a></p> -<p id='n1313' class='stm mis'><a href='#n1313'>1313</a></p> -<p id='n1314' class='stm mis'><a href='#n1314'>1314</a></p> -<p id='n1315' class='pln'><a href='#n1315'>1315</a></p> -<p id='n1316' class='stm mis'><a href='#n1316'>1316</a></p> -<p id='n1317' class='stm mis'><a href='#n1317'>1317</a></p> -<p id='n1318' class='stm mis'><a href='#n1318'>1318</a></p> -<p id='n1319' class='stm mis'><a href='#n1319'>1319</a></p> -<p id='n1320' class='pln'><a href='#n1320'>1320</a></p> -<p id='n1321' class='pln'><a href='#n1321'>1321</a></p> -<p id='n1322' class='pln'><a href='#n1322'>1322</a></p> -<p id='n1323' class='stm mis'><a href='#n1323'>1323</a></p> -<p id='n1324' class='stm mis'><a href='#n1324'>1324</a></p> -<p id='n1325' class='stm mis'><a href='#n1325'>1325</a></p> -<p id='n1326' class='pln'><a href='#n1326'>1326</a></p> -<p id='n1327' class='stm mis'><a href='#n1327'>1327</a></p> -<p id='n1328' class='stm mis'><a href='#n1328'>1328</a></p> -<p id='n1329' class='pln'><a href='#n1329'>1329</a></p> -<p id='n1330' class='pln'><a href='#n1330'>1330</a></p> -<p id='n1331' class='stm mis'><a href='#n1331'>1331</a></p> -<p id='n1332' class='stm mis'><a href='#n1332'>1332</a></p> -<p id='n1333' class='pln'><a href='#n1333'>1333</a></p> -<p id='n1334' class='pln'><a href='#n1334'>1334</a></p> -<p id='n1335' class='pln'><a href='#n1335'>1335</a></p> -<p id='n1336' class='pln'><a href='#n1336'>1336</a></p> -<p id='n1337' class='pln'><a href='#n1337'>1337</a></p> -<p id='n1338' class='pln'><a href='#n1338'>1338</a></p> -<p id='n1339' class='pln'><a href='#n1339'>1339</a></p> -<p id='n1340' class='stm mis'><a href='#n1340'>1340</a></p> -<p id='n1341' class='stm mis'><a href='#n1341'>1341</a></p> -<p id='n1342' class='stm mis'><a href='#n1342'>1342</a></p> -<p id='n1343' class='stm mis'><a href='#n1343'>1343</a></p> -<p id='n1344' class='stm mis'><a href='#n1344'>1344</a></p> -<p id='n1345' class='pln'><a href='#n1345'>1345</a></p> -<p id='n1346' class='pln'><a href='#n1346'>1346</a></p> -<p id='n1347' class='stm mis'><a href='#n1347'>1347</a></p> -<p id='n1348' class='stm mis'><a href='#n1348'>1348</a></p> -<p id='n1349' class='stm mis'><a href='#n1349'>1349</a></p> -<p id='n1350' class='stm mis'><a href='#n1350'>1350</a></p> -<p id='n1351' class='stm mis'><a href='#n1351'>1351</a></p> -<p id='n1352' class='pln'><a href='#n1352'>1352</a></p> -<p id='n1353' class='stm mis'><a href='#n1353'>1353</a></p> -<p id='n1354' class='pln'><a href='#n1354'>1354</a></p> -<p id='n1355' class='pln'><a href='#n1355'>1355</a></p> -<p id='n1356' class='pln'><a href='#n1356'>1356</a></p> -<p id='n1357' class='pln'><a href='#n1357'>1357</a></p> -<p id='n1358' class='pln'><a href='#n1358'>1358</a></p> -<p id='n1359' class='pln'><a href='#n1359'>1359</a></p> -<p id='n1360' class='pln'><a href='#n1360'>1360</a></p> -<p id='n1361' class='pln'><a href='#n1361'>1361</a></p> -<p id='n1362' class='pln'><a href='#n1362'>1362</a></p> -<p id='n1363' class='stm run hide_run'><a href='#n1363'>1363</a></p> -<p id='n1364' class='pln'><a href='#n1364'>1364</a></p> -<p id='n1365' class='stm run hide_run'><a href='#n1365'>1365</a></p> -<p id='n1366' class='stm run hide_run'><a href='#n1366'>1366</a></p> -<p id='n1367' class='stm run hide_run'><a href='#n1367'>1367</a></p> -<p id='n1368' class='stm run hide_run'><a href='#n1368'>1368</a></p> -<p id='n1369' class='pln'><a href='#n1369'>1369</a></p> -<p id='n1370' class='stm run hide_run'><a href='#n1370'>1370</a></p> -<p id='n1371' class='stm mis'><a href='#n1371'>1371</a></p> -<p id='n1372' class='pln'><a href='#n1372'>1372</a></p> -<p id='n1373' class='stm run hide_run'><a href='#n1373'>1373</a></p> -<p id='n1374' class='pln'><a href='#n1374'>1374</a></p> -<p id='n1375' class='stm mis'><a href='#n1375'>1375</a></p> -<p id='n1376' class='stm mis'><a href='#n1376'>1376</a></p> -<p id='n1377' class='pln'><a href='#n1377'>1377</a></p> -<p id='n1378' class='stm run hide_run'><a href='#n1378'>1378</a></p> -<p id='n1379' class='stm mis'><a href='#n1379'>1379</a></p> -<p id='n1380' class='stm mis'><a href='#n1380'>1380</a></p> -<p id='n1381' class='stm mis'><a href='#n1381'>1381</a></p> -<p id='n1382' class='stm mis'><a href='#n1382'>1382</a></p> -<p id='n1383' class='pln'><a href='#n1383'>1383</a></p> -<p id='n1384' class='stm mis'><a href='#n1384'>1384</a></p> -<p id='n1385' class='stm mis'><a href='#n1385'>1385</a></p> -<p id='n1386' class='stm mis'><a href='#n1386'>1386</a></p> -<p id='n1387' class='stm mis'><a href='#n1387'>1387</a></p> -<p id='n1388' class='stm mis'><a href='#n1388'>1388</a></p> -<p id='n1389' class='stm mis'><a href='#n1389'>1389</a></p> -<p id='n1390' class='stm mis'><a href='#n1390'>1390</a></p> -<p id='n1391' class='stm mis'><a href='#n1391'>1391</a></p> -<p id='n1392' class='stm mis'><a href='#n1392'>1392</a></p> -<p id='n1393' class='pln'><a href='#n1393'>1393</a></p> -<p id='n1394' class='stm mis'><a href='#n1394'>1394</a></p> -<p id='n1395' class='stm mis'><a href='#n1395'>1395</a></p> -<p id='n1396' class='stm mis'><a href='#n1396'>1396</a></p> -<p id='n1397' class='stm mis'><a href='#n1397'>1397</a></p> -<p id='n1398' class='stm mis'><a href='#n1398'>1398</a></p> -<p id='n1399' class='stm mis'><a href='#n1399'>1399</a></p> -<p id='n1400' class='stm mis'><a href='#n1400'>1400</a></p> -<p id='n1401' class='stm mis'><a href='#n1401'>1401</a></p> -<p id='n1402' class='stm mis'><a href='#n1402'>1402</a></p> -<p id='n1403' class='stm mis'><a href='#n1403'>1403</a></p> -<p id='n1404' class='stm mis'><a href='#n1404'>1404</a></p> -<p id='n1405' class='stm mis'><a href='#n1405'>1405</a></p> -<p id='n1406' class='stm mis'><a href='#n1406'>1406</a></p> -<p id='n1407' class='pln'><a href='#n1407'>1407</a></p> -<p id='n1408' class='stm run hide_run'><a href='#n1408'>1408</a></p> -<p id='n1409' class='pln'><a href='#n1409'>1409</a></p> -<p id='n1410' class='pln'><a href='#n1410'>1410</a></p> -<p id='n1411' class='stm mis'><a href='#n1411'>1411</a></p> -<p id='n1412' class='stm mis'><a href='#n1412'>1412</a></p> -<p id='n1413' class='stm mis'><a href='#n1413'>1413</a></p> -<p id='n1414' class='pln'><a href='#n1414'>1414</a></p> -<p id='n1415' class='stm mis'><a href='#n1415'>1415</a></p> -<p id='n1416' class='stm mis'><a href='#n1416'>1416</a></p> -<p id='n1417' class='stm mis'><a href='#n1417'>1417</a></p> -<p id='n1418' class='stm mis'><a href='#n1418'>1418</a></p> -<p id='n1419' class='stm mis'><a href='#n1419'>1419</a></p> -<p id='n1420' class='stm mis'><a href='#n1420'>1420</a></p> -<p id='n1421' class='stm mis'><a href='#n1421'>1421</a></p> -<p id='n1422' class='stm mis'><a href='#n1422'>1422</a></p> -<p id='n1423' class='stm mis'><a href='#n1423'>1423</a></p> -<p id='n1424' class='stm mis'><a href='#n1424'>1424</a></p> -<p id='n1425' class='pln'><a href='#n1425'>1425</a></p> -<p id='n1426' class='stm mis'><a href='#n1426'>1426</a></p> -<p id='n1427' class='stm mis'><a href='#n1427'>1427</a></p> -<p id='n1428' class='pln'><a href='#n1428'>1428</a></p> -<p id='n1429' class='stm mis'><a href='#n1429'>1429</a></p> -<p id='n1430' class='stm mis'><a href='#n1430'>1430</a></p> -<p id='n1431' class='pln'><a href='#n1431'>1431</a></p> -<p id='n1432' class='stm mis'><a href='#n1432'>1432</a></p> -<p id='n1433' class='stm mis'><a href='#n1433'>1433</a></p> -<p id='n1434' class='stm mis'><a href='#n1434'>1434</a></p> -<p id='n1435' class='stm mis'><a href='#n1435'>1435</a></p> -<p id='n1436' class='stm mis'><a href='#n1436'>1436</a></p> -<p id='n1437' class='pln'><a href='#n1437'>1437</a></p> -<p id='n1438' class='pln'><a href='#n1438'>1438</a></p> -<p id='n1439' class='stm run hide_run'><a href='#n1439'>1439</a></p> -<p id='n1440' class='pln'><a href='#n1440'>1440</a></p> -<p id='n1441' class='stm run hide_run'><a href='#n1441'>1441</a></p> -<p id='n1442' class='stm run hide_run'><a href='#n1442'>1442</a></p> -<p id='n1443' class='stm run hide_run'><a href='#n1443'>1443</a></p> -<p id='n1444' class='stm run hide_run'><a href='#n1444'>1444</a></p> -<p id='n1445' class='stm run hide_run'><a href='#n1445'>1445</a></p> -<p id='n1446' class='stm run hide_run'><a href='#n1446'>1446</a></p> -<p id='n1447' class='pln'><a href='#n1447'>1447</a></p> -<p id='n1448' class='stm run hide_run'><a href='#n1448'>1448</a></p> -<p id='n1449' class='stm mis'><a href='#n1449'>1449</a></p> -<p id='n1450' class='pln'><a href='#n1450'>1450</a></p> -<p id='n1451' class='stm run hide_run'><a href='#n1451'>1451</a></p> -<p id='n1452' class='pln'><a href='#n1452'>1452</a></p> -<p id='n1453' class='stm mis'><a href='#n1453'>1453</a></p> -<p id='n1454' class='stm mis'><a href='#n1454'>1454</a></p> -<p id='n1455' class='pln'><a href='#n1455'>1455</a></p> -<p id='n1456' class='stm run hide_run'><a href='#n1456'>1456</a></p> -<p id='n1457' class='stm mis'><a href='#n1457'>1457</a></p> -<p id='n1458' class='stm mis'><a href='#n1458'>1458</a></p> -<p id='n1459' class='stm mis'><a href='#n1459'>1459</a></p> -<p id='n1460' class='stm mis'><a href='#n1460'>1460</a></p> -<p id='n1461' class='pln'><a href='#n1461'>1461</a></p> -<p id='n1462' class='stm mis'><a href='#n1462'>1462</a></p> -<p id='n1463' class='stm mis'><a href='#n1463'>1463</a></p> -<p id='n1464' class='stm mis'><a href='#n1464'>1464</a></p> -<p id='n1465' class='stm mis'><a href='#n1465'>1465</a></p> -<p id='n1466' class='stm mis'><a href='#n1466'>1466</a></p> -<p id='n1467' class='stm mis'><a href='#n1467'>1467</a></p> -<p id='n1468' class='stm mis'><a href='#n1468'>1468</a></p> -<p id='n1469' class='stm mis'><a href='#n1469'>1469</a></p> -<p id='n1470' class='stm mis'><a href='#n1470'>1470</a></p> -<p id='n1471' class='pln'><a href='#n1471'>1471</a></p> -<p id='n1472' class='stm mis'><a href='#n1472'>1472</a></p> -<p id='n1473' class='stm mis'><a href='#n1473'>1473</a></p> -<p id='n1474' class='stm mis'><a href='#n1474'>1474</a></p> -<p id='n1475' class='stm mis'><a href='#n1475'>1475</a></p> -<p id='n1476' class='stm mis'><a href='#n1476'>1476</a></p> -<p id='n1477' class='stm mis'><a href='#n1477'>1477</a></p> -<p id='n1478' class='stm mis'><a href='#n1478'>1478</a></p> -<p id='n1479' class='stm mis'><a href='#n1479'>1479</a></p> -<p id='n1480' class='stm mis'><a href='#n1480'>1480</a></p> -<p id='n1481' class='stm mis'><a href='#n1481'>1481</a></p> -<p id='n1482' class='stm mis'><a href='#n1482'>1482</a></p> -<p id='n1483' class='stm mis'><a href='#n1483'>1483</a></p> -<p id='n1484' class='stm mis'><a href='#n1484'>1484</a></p> -<p id='n1485' class='pln'><a href='#n1485'>1485</a></p> -<p id='n1486' class='stm run hide_run'><a href='#n1486'>1486</a></p> -<p id='n1487' class='pln'><a href='#n1487'>1487</a></p> -<p id='n1488' class='pln'><a href='#n1488'>1488</a></p> -<p id='n1489' class='stm mis'><a href='#n1489'>1489</a></p> -<p id='n1490' class='stm mis'><a href='#n1490'>1490</a></p> -<p id='n1491' class='pln'><a href='#n1491'>1491</a></p> -<p id='n1492' class='stm mis'><a href='#n1492'>1492</a></p> -<p id='n1493' class='stm mis'><a href='#n1493'>1493</a></p> -<p id='n1494' class='stm mis'><a href='#n1494'>1494</a></p> -<p id='n1495' class='stm mis'><a href='#n1495'>1495</a></p> -<p id='n1496' class='stm mis'><a href='#n1496'>1496</a></p> -<p id='n1497' class='stm mis'><a href='#n1497'>1497</a></p> -<p id='n1498' class='stm mis'><a href='#n1498'>1498</a></p> -<p id='n1499' class='stm mis'><a href='#n1499'>1499</a></p> -<p id='n1500' class='stm mis'><a href='#n1500'>1500</a></p> -<p id='n1501' class='pln'><a href='#n1501'>1501</a></p> -<p id='n1502' class='pln'><a href='#n1502'>1502</a></p> -<p id='n1503' class='stm mis'><a href='#n1503'>1503</a></p> -<p id='n1504' class='stm mis'><a href='#n1504'>1504</a></p> -<p id='n1505' class='stm mis'><a href='#n1505'>1505</a></p> -<p id='n1506' class='stm mis'><a href='#n1506'>1506</a></p> -<p id='n1507' class='stm mis'><a href='#n1507'>1507</a></p> -<p id='n1508' class='pln'><a href='#n1508'>1508</a></p> -<p id='n1509' class='stm mis'><a href='#n1509'>1509</a></p> -<p id='n1510' class='stm mis'><a href='#n1510'>1510</a></p> -<p id='n1511' class='stm mis'><a href='#n1511'>1511</a></p> -<p id='n1512' class='pln'><a href='#n1512'>1512</a></p> -<p id='n1513' class='stm mis'><a href='#n1513'>1513</a></p> -<p id='n1514' class='stm mis'><a href='#n1514'>1514</a></p> -<p id='n1515' class='stm mis'><a href='#n1515'>1515</a></p> -<p id='n1516' class='stm mis'><a href='#n1516'>1516</a></p> -<p id='n1517' class='pln'><a href='#n1517'>1517</a></p> -<p id='n1518' class='stm mis'><a href='#n1518'>1518</a></p> -<p id='n1519' class='pln'><a href='#n1519'>1519</a></p> -<p id='n1520' class='pln'><a href='#n1520'>1520</a></p> -<p id='n1521' class='stm run hide_run'><a href='#n1521'>1521</a></p> -<p id='n1522' class='pln'><a href='#n1522'>1522</a></p> -<p id='n1523' class='pln'><a href='#n1523'>1523</a></p> -<p id='n1524' class='stm run hide_run'><a href='#n1524'>1524</a></p> -<p id='n1525' class='stm run hide_run'><a href='#n1525'>1525</a></p> -<p id='n1526' class='stm run hide_run'><a href='#n1526'>1526</a></p> -<p id='n1527' class='stm run hide_run'><a href='#n1527'>1527</a></p> -<p id='n1528' class='stm run hide_run'><a href='#n1528'>1528</a></p> -<p id='n1529' class='stm run hide_run'><a href='#n1529'>1529</a></p> -<p id='n1530' class='stm run hide_run'><a href='#n1530'>1530</a></p> -<p id='n1531' class='pln'><a href='#n1531'>1531</a></p> -<p id='n1532' class='stm run hide_run'><a href='#n1532'>1532</a></p> -<p id='n1533' class='stm mis'><a href='#n1533'>1533</a></p> -<p id='n1534' class='pln'><a href='#n1534'>1534</a></p> -<p id='n1535' class='stm run hide_run'><a href='#n1535'>1535</a></p> -<p id='n1536' class='pln'><a href='#n1536'>1536</a></p> -<p id='n1537' class='stm mis'><a href='#n1537'>1537</a></p> -<p id='n1538' class='stm mis'><a href='#n1538'>1538</a></p> -<p id='n1539' class='pln'><a href='#n1539'>1539</a></p> -<p id='n1540' class='stm run hide_run'><a href='#n1540'>1540</a></p> -<p id='n1541' class='stm mis'><a href='#n1541'>1541</a></p> -<p id='n1542' class='stm mis'><a href='#n1542'>1542</a></p> -<p id='n1543' class='stm mis'><a href='#n1543'>1543</a></p> -<p id='n1544' class='stm mis'><a href='#n1544'>1544</a></p> -<p id='n1545' class='pln'><a href='#n1545'>1545</a></p> -<p id='n1546' class='stm mis'><a href='#n1546'>1546</a></p> -<p id='n1547' class='stm mis'><a href='#n1547'>1547</a></p> -<p id='n1548' class='stm mis'><a href='#n1548'>1548</a></p> -<p id='n1549' class='stm mis'><a href='#n1549'>1549</a></p> -<p id='n1550' class='stm mis'><a href='#n1550'>1550</a></p> -<p id='n1551' class='stm mis'><a href='#n1551'>1551</a></p> -<p id='n1552' class='stm mis'><a href='#n1552'>1552</a></p> -<p id='n1553' class='stm mis'><a href='#n1553'>1553</a></p> -<p id='n1554' class='stm mis'><a href='#n1554'>1554</a></p> -<p id='n1555' class='pln'><a href='#n1555'>1555</a></p> -<p id='n1556' class='stm mis'><a href='#n1556'>1556</a></p> -<p id='n1557' class='stm mis'><a href='#n1557'>1557</a></p> -<p id='n1558' class='stm mis'><a href='#n1558'>1558</a></p> -<p id='n1559' class='stm mis'><a href='#n1559'>1559</a></p> -<p id='n1560' class='stm mis'><a href='#n1560'>1560</a></p> -<p id='n1561' class='stm mis'><a href='#n1561'>1561</a></p> -<p id='n1562' class='stm mis'><a href='#n1562'>1562</a></p> -<p id='n1563' class='stm mis'><a href='#n1563'>1563</a></p> -<p id='n1564' class='stm mis'><a href='#n1564'>1564</a></p> -<p id='n1565' class='stm mis'><a href='#n1565'>1565</a></p> -<p id='n1566' class='stm mis'><a href='#n1566'>1566</a></p> -<p id='n1567' class='stm mis'><a href='#n1567'>1567</a></p> -<p id='n1568' class='stm mis'><a href='#n1568'>1568</a></p> -<p id='n1569' class='pln'><a href='#n1569'>1569</a></p> -<p id='n1570' class='stm run hide_run'><a href='#n1570'>1570</a></p> -<p id='n1571' class='pln'><a href='#n1571'>1571</a></p> -<p id='n1572' class='pln'><a href='#n1572'>1572</a></p> -<p id='n1573' class='stm mis'><a href='#n1573'>1573</a></p> -<p id='n1574' class='stm mis'><a href='#n1574'>1574</a></p> -<p id='n1575' class='stm mis'><a href='#n1575'>1575</a></p> -<p id='n1576' class='pln'><a href='#n1576'>1576</a></p> -<p id='n1577' class='stm mis'><a href='#n1577'>1577</a></p> -<p id='n1578' class='stm mis'><a href='#n1578'>1578</a></p> -<p id='n1579' class='stm mis'><a href='#n1579'>1579</a></p> -<p id='n1580' class='stm mis'><a href='#n1580'>1580</a></p> -<p id='n1581' class='stm mis'><a href='#n1581'>1581</a></p> -<p id='n1582' class='stm mis'><a href='#n1582'>1582</a></p> -<p id='n1583' class='stm mis'><a href='#n1583'>1583</a></p> -<p id='n1584' class='stm mis'><a href='#n1584'>1584</a></p> -<p id='n1585' class='stm mis'><a href='#n1585'>1585</a></p> -<p id='n1586' class='pln'><a href='#n1586'>1586</a></p> -<p id='n1587' class='pln'><a href='#n1587'>1587</a></p> -<p id='n1588' class='stm mis'><a href='#n1588'>1588</a></p> -<p id='n1589' class='stm mis'><a href='#n1589'>1589</a></p> -<p id='n1590' class='stm mis'><a href='#n1590'>1590</a></p> -<p id='n1591' class='stm mis'><a href='#n1591'>1591</a></p> -<p id='n1592' class='stm mis'><a href='#n1592'>1592</a></p> -<p id='n1593' class='stm mis'><a href='#n1593'>1593</a></p> -<p id='n1594' class='pln'><a href='#n1594'>1594</a></p> -<p id='n1595' class='stm mis'><a href='#n1595'>1595</a></p> -<p id='n1596' class='stm mis'><a href='#n1596'>1596</a></p> -<p id='n1597' class='stm mis'><a href='#n1597'>1597</a></p> -<p id='n1598' class='pln'><a href='#n1598'>1598</a></p> -<p id='n1599' class='stm mis'><a href='#n1599'>1599</a></p> -<p id='n1600' class='stm mis'><a href='#n1600'>1600</a></p> -<p id='n1601' class='stm mis'><a href='#n1601'>1601</a></p> -<p id='n1602' class='stm mis'><a href='#n1602'>1602</a></p> -<p id='n1603' class='pln'><a href='#n1603'>1603</a></p> -<p id='n1604' class='stm mis'><a href='#n1604'>1604</a></p> -<p id='n1605' class='pln'><a href='#n1605'>1605</a></p> -<p id='n1606' class='pln'><a href='#n1606'>1606</a></p> -<p id='n1607' class='stm run hide_run'><a href='#n1607'>1607</a></p> -<p id='n1608' class='pln'><a href='#n1608'>1608</a></p> -<p id='n1609' class='pln'><a href='#n1609'>1609</a></p> -<p id='n1610' class='stm run hide_run'><a href='#n1610'>1610</a></p> -<p id='n1611' class='stm run hide_run'><a href='#n1611'>1611</a></p> -<p id='n1612' class='stm run hide_run'><a href='#n1612'>1612</a></p> -<p id='n1613' class='stm run hide_run'><a href='#n1613'>1613</a></p> -<p id='n1614' class='stm run hide_run'><a href='#n1614'>1614</a></p> -<p id='n1615' class='pln'><a href='#n1615'>1615</a></p> -<p id='n1616' class='stm run hide_run'><a href='#n1616'>1616</a></p> -<p id='n1617' class='stm run hide_run'><a href='#n1617'>1617</a></p> -<p id='n1618' class='pln'><a href='#n1618'>1618</a></p> -<p id='n1619' class='stm run hide_run'><a href='#n1619'>1619</a></p> -<p id='n1620' class='pln'><a href='#n1620'>1620</a></p> -<p id='n1621' class='stm run hide_run'><a href='#n1621'>1621</a></p> -<p id='n1622' class='pln'><a href='#n1622'>1622</a></p> -<p id='n1623' class='stm run hide_run'><a href='#n1623'>1623</a></p> -<p id='n1624' class='pln'><a href='#n1624'>1624</a></p> -<p id='n1625' class='stm run hide_run'><a href='#n1625'>1625</a></p> -<p id='n1626' class='stm run hide_run'><a href='#n1626'>1626</a></p> -<p id='n1627' class='stm mis'><a href='#n1627'>1627</a></p> -<p id='n1628' class='stm mis'><a href='#n1628'>1628</a></p> -<p id='n1629' class='pln'><a href='#n1629'>1629</a></p> -<p id='n1630' class='pln'><a href='#n1630'>1630</a></p> -<p id='n1631' class='stm run hide_run'><a href='#n1631'>1631</a></p> -<p id='n1632' class='stm mis'><a href='#n1632'>1632</a></p> -<p id='n1633' class='stm mis'><a href='#n1633'>1633</a></p> -<p id='n1634' class='pln'><a href='#n1634'>1634</a></p> -<p id='n1635' class='pln'><a href='#n1635'>1635</a></p> -<p id='n1636' class='pln'><a href='#n1636'>1636</a></p> -<p id='n1637' class='stm run hide_run'><a href='#n1637'>1637</a></p> -<p id='n1638' class='stm run hide_run'><a href='#n1638'>1638</a></p> -<p id='n1639' class='stm mis'><a href='#n1639'>1639</a></p> -<p id='n1640' class='pln'><a href='#n1640'>1640</a></p> -<p id='n1641' class='stm run hide_run'><a href='#n1641'>1641</a></p> -<p id='n1642' class='stm run hide_run'><a href='#n1642'>1642</a></p> -<p id='n1643' class='stm run hide_run'><a href='#n1643'>1643</a></p> -<p id='n1644' class='stm run hide_run'><a href='#n1644'>1644</a></p> -<p id='n1645' class='stm run hide_run'><a href='#n1645'>1645</a></p> -<p id='n1646' class='pln'><a href='#n1646'>1646</a></p> -<p id='n1647' class='stm run hide_run'><a href='#n1647'>1647</a></p> -<p id='n1648' class='stm run hide_run'><a href='#n1648'>1648</a></p> -<p id='n1649' class='stm run hide_run'><a href='#n1649'>1649</a></p> -<p id='n1650' class='stm run hide_run'><a href='#n1650'>1650</a></p> -<p id='n1651' class='stm run hide_run'><a href='#n1651'>1651</a></p> -<p id='n1652' class='stm run hide_run'><a href='#n1652'>1652</a></p> -<p id='n1653' class='stm mis'><a href='#n1653'>1653</a></p> -<p id='n1654' class='stm mis'><a href='#n1654'>1654</a></p> -<p id='n1655' class='stm mis'><a href='#n1655'>1655</a></p> -<p id='n1656' class='pln'><a href='#n1656'>1656</a></p> -<p id='n1657' class='pln'><a href='#n1657'>1657</a></p> -<p id='n1658' class='stm run hide_run'><a href='#n1658'>1658</a></p> -<p id='n1659' class='stm run hide_run'><a href='#n1659'>1659</a></p> -<p id='n1660' class='stm run hide_run'><a href='#n1660'>1660</a></p> -<p id='n1661' class='stm run hide_run'><a href='#n1661'>1661</a></p> -<p id='n1662' class='stm run hide_run'><a href='#n1662'>1662</a></p> -<p id='n1663' class='pln'><a href='#n1663'>1663</a></p> -<p id='n1664' class='stm run hide_run'><a href='#n1664'>1664</a></p> -<p id='n1665' class='stm run hide_run'><a href='#n1665'>1665</a></p> -<p id='n1666' class='stm run hide_run'><a href='#n1666'>1666</a></p> -<p id='n1667' class='pln'><a href='#n1667'>1667</a></p> -<p id='n1668' class='stm run hide_run'><a href='#n1668'>1668</a></p> -<p id='n1669' class='pln'><a href='#n1669'>1669</a></p> -<p id='n1670' class='stm run hide_run'><a href='#n1670'>1670</a></p> -<p id='n1671' class='stm run hide_run'><a href='#n1671'>1671</a></p> -<p id='n1672' class='stm run hide_run'><a href='#n1672'>1672</a></p> -<p id='n1673' class='stm run hide_run'><a href='#n1673'>1673</a></p> -<p id='n1674' class='pln'><a href='#n1674'>1674</a></p> -<p id='n1675' class='stm mis'><a href='#n1675'>1675</a></p> -<p id='n1676' class='pln'><a href='#n1676'>1676</a></p> -<p id='n1677' class='stm run hide_run'><a href='#n1677'>1677</a></p> -<p id='n1678' class='stm run hide_run'><a href='#n1678'>1678</a></p> -<p id='n1679' class='pln'><a href='#n1679'>1679</a></p> -<p id='n1680' class='stm mis'><a href='#n1680'>1680</a></p> -<p id='n1681' class='pln'><a href='#n1681'>1681</a></p> -<p id='n1682' class='stm run hide_run'><a href='#n1682'>1682</a></p> -<p id='n1683' class='stm run hide_run'><a href='#n1683'>1683</a></p> -<p id='n1684' class='stm run hide_run'><a href='#n1684'>1684</a></p> -<p id='n1685' class='pln'><a href='#n1685'>1685</a></p> -<p id='n1686' class='pln'><a href='#n1686'>1686</a></p> -<p id='n1687' class='stm run hide_run'><a href='#n1687'>1687</a></p> -<p id='n1688' class='pln'><a href='#n1688'>1688</a></p> -<p id='n1689' class='pln'><a href='#n1689'>1689</a></p> -<p id='n1690' class='stm run hide_run'><a href='#n1690'>1690</a></p> -<p id='n1691' class='stm run hide_run'><a href='#n1691'>1691</a></p> -<p id='n1692' class='stm run hide_run'><a href='#n1692'>1692</a></p> -<p id='n1693' class='stm run hide_run'><a href='#n1693'>1693</a></p> -<p id='n1694' class='pln'><a href='#n1694'>1694</a></p> -<p id='n1695' class='stm run hide_run'><a href='#n1695'>1695</a></p> -<p id='n1696' class='pln'><a href='#n1696'>1696</a></p> -<p id='n1697' class='stm mis'><a href='#n1697'>1697</a></p> -<p id='n1698' class='pln'><a href='#n1698'>1698</a></p> -<p id='n1699' class='stm run hide_run'><a href='#n1699'>1699</a></p> -<p id='n1700' class='pln'><a href='#n1700'>1700</a></p> -<p id='n1701' class='stm mis'><a href='#n1701'>1701</a></p> -<p id='n1702' class='stm mis'><a href='#n1702'>1702</a></p> -<p id='n1703' class='stm mis'><a href='#n1703'>1703</a></p> -<p id='n1704' class='stm mis'><a href='#n1704'>1704</a></p> -<p id='n1705' class='pln'><a href='#n1705'>1705</a></p> -<p id='n1706' class='pln'><a href='#n1706'>1706</a></p> -<p id='n1707' class='stm mis'><a href='#n1707'>1707</a></p> -<p id='n1708' class='stm mis'><a href='#n1708'>1708</a></p> -<p id='n1709' class='stm mis'><a href='#n1709'>1709</a></p> -<p id='n1710' class='pln'><a href='#n1710'>1710</a></p> -<p id='n1711' class='stm mis'><a href='#n1711'>1711</a></p> -<p id='n1712' class='stm mis'><a href='#n1712'>1712</a></p> -<p id='n1713' class='stm mis'><a href='#n1713'>1713</a></p> -<p id='n1714' class='stm mis'><a href='#n1714'>1714</a></p> -<p id='n1715' class='stm mis'><a href='#n1715'>1715</a></p> -<p id='n1716' class='stm mis'><a href='#n1716'>1716</a></p> -<p id='n1717' class='stm mis'><a href='#n1717'>1717</a></p> -<p id='n1718' class='stm mis'><a href='#n1718'>1718</a></p> -<p id='n1719' class='stm mis'><a href='#n1719'>1719</a></p> -<p id='n1720' class='pln'><a href='#n1720'>1720</a></p> -<p id='n1721' class='pln'><a href='#n1721'>1721</a></p> -<p id='n1722' class='stm mis'><a href='#n1722'>1722</a></p> -<p id='n1723' class='stm mis'><a href='#n1723'>1723</a></p> -<p id='n1724' class='stm mis'><a href='#n1724'>1724</a></p> -<p id='n1725' class='stm mis'><a href='#n1725'>1725</a></p> -<p id='n1726' class='stm mis'><a href='#n1726'>1726</a></p> -<p id='n1727' class='pln'><a href='#n1727'>1727</a></p> -<p id='n1728' class='stm mis'><a href='#n1728'>1728</a></p> -<p id='n1729' class='stm mis'><a href='#n1729'>1729</a></p> -<p id='n1730' class='stm mis'><a href='#n1730'>1730</a></p> -<p id='n1731' class='pln'><a href='#n1731'>1731</a></p> -<p id='n1732' class='stm mis'><a href='#n1732'>1732</a></p> -<p id='n1733' class='pln'><a href='#n1733'>1733</a></p> -<p id='n1734' class='stm mis'><a href='#n1734'>1734</a></p> -<p id='n1735' class='stm mis'><a href='#n1735'>1735</a></p> -<p id='n1736' class='stm mis'><a href='#n1736'>1736</a></p> -<p id='n1737' class='pln'><a href='#n1737'>1737</a></p> -<p id='n1738' class='pln'><a href='#n1738'>1738</a></p> -<p id='n1739' class='stm run hide_run'><a href='#n1739'>1739</a></p> -<p id='n1740' class='pln'><a href='#n1740'>1740</a></p> -<p id='n1741' class='pln'><a href='#n1741'>1741</a></p> -<p id='n1742' class='stm run hide_run'><a href='#n1742'>1742</a></p> -<p id='n1743' class='stm run hide_run'><a href='#n1743'>1743</a></p> -<p id='n1744' class='stm run hide_run'><a href='#n1744'>1744</a></p> -<p id='n1745' class='stm run hide_run'><a href='#n1745'>1745</a></p> -<p id='n1746' class='stm run hide_run'><a href='#n1746'>1746</a></p> -<p id='n1747' class='stm run hide_run'><a href='#n1747'>1747</a></p> -<p id='n1748' class='pln'><a href='#n1748'>1748</a></p> -<p id='n1749' class='stm run hide_run'><a href='#n1749'>1749</a></p> -<p id='n1750' class='stm run hide_run'><a href='#n1750'>1750</a></p> -<p id='n1751' class='pln'><a href='#n1751'>1751</a></p> -<p id='n1752' class='stm run hide_run'><a href='#n1752'>1752</a></p> -<p id='n1753' class='pln'><a href='#n1753'>1753</a></p> -<p id='n1754' class='stm run hide_run'><a href='#n1754'>1754</a></p> -<p id='n1755' class='pln'><a href='#n1755'>1755</a></p> -<p id='n1756' class='pln'><a href='#n1756'>1756</a></p> -<p id='n1757' class='stm run hide_run'><a href='#n1757'>1757</a></p> -<p id='n1758' class='pln'><a href='#n1758'>1758</a></p> -<p id='n1759' class='stm run hide_run'><a href='#n1759'>1759</a></p> -<p id='n1760' class='stm run hide_run'><a href='#n1760'>1760</a></p> -<p id='n1761' class='stm mis'><a href='#n1761'>1761</a></p> -<p id='n1762' class='stm mis'><a href='#n1762'>1762</a></p> -<p id='n1763' class='pln'><a href='#n1763'>1763</a></p> -<p id='n1764' class='stm run hide_run'><a href='#n1764'>1764</a></p> -<p id='n1765' class='pln'><a href='#n1765'>1765</a></p> -<p id='n1766' class='pln'><a href='#n1766'>1766</a></p> -<p id='n1767' class='pln'><a href='#n1767'>1767</a></p> -<p id='n1768' class='pln'><a href='#n1768'>1768</a></p> -<p id='n1769' class='pln'><a href='#n1769'>1769</a></p> -<p id='n1770' class='pln'><a href='#n1770'>1770</a></p> -<p id='n1771' class='stm run hide_run'><a href='#n1771'>1771</a></p> -<p id='n1772' class='stm run hide_run'><a href='#n1772'>1772</a></p> -<p id='n1773' class='pln'><a href='#n1773'>1773</a></p> -<p id='n1774' class='stm run hide_run'><a href='#n1774'>1774</a></p> -<p id='n1775' class='stm run hide_run'><a href='#n1775'>1775</a></p> -<p id='n1776' class='stm run hide_run'><a href='#n1776'>1776</a></p> -<p id='n1777' class='pln'><a href='#n1777'>1777</a></p> -<p id='n1778' class='stm run hide_run'><a href='#n1778'>1778</a></p> -<p id='n1779' class='pln'><a href='#n1779'>1779</a></p> -<p id='n1780' class='stm run hide_run'><a href='#n1780'>1780</a></p> -<p id='n1781' class='stm run hide_run'><a href='#n1781'>1781</a></p> -<p id='n1782' class='stm mis'><a href='#n1782'>1782</a></p> -<p id='n1783' class='stm mis'><a href='#n1783'>1783</a></p> -<p id='n1784' class='stm mis'><a href='#n1784'>1784</a></p> -<p id='n1785' class='pln'><a href='#n1785'>1785</a></p> -<p id='n1786' class='pln'><a href='#n1786'>1786</a></p> -<p id='n1787' class='stm run hide_run'><a href='#n1787'>1787</a></p> -<p id='n1788' class='pln'><a href='#n1788'>1788</a></p> -<p id='n1789' class='stm run hide_run'><a href='#n1789'>1789</a></p> -<p id='n1790' class='stm run hide_run'><a href='#n1790'>1790</a></p> -<p id='n1791' class='stm run hide_run'><a href='#n1791'>1791</a></p> -<p id='n1792' class='pln'><a href='#n1792'>1792</a></p> -<p id='n1793' class='stm run hide_run'><a href='#n1793'>1793</a></p> -<p id='n1794' class='pln'><a href='#n1794'>1794</a></p> -<p id='n1795' class='pln'><a href='#n1795'>1795</a></p> -<p id='n1796' class='pln'><a href='#n1796'>1796</a></p> -<p id='n1797' class='pln'><a href='#n1797'>1797</a></p> -<p id='n1798' class='pln'><a href='#n1798'>1798</a></p> -<p id='n1799' class='pln'><a href='#n1799'>1799</a></p> -<p id='n1800' class='pln'><a href='#n1800'>1800</a></p> -<p id='n1801' class='stm run hide_run'><a href='#n1801'>1801</a></p> -<p id='n1802' class='stm run hide_run'><a href='#n1802'>1802</a></p> -<p id='n1803' class='pln'><a href='#n1803'>1803</a></p> -<p id='n1804' class='stm run hide_run'><a href='#n1804'>1804</a></p> -<p id='n1805' class='pln'><a href='#n1805'>1805</a></p> -<p id='n1806' class='stm run hide_run'><a href='#n1806'>1806</a></p> -<p id='n1807' class='stm run hide_run'><a href='#n1807'>1807</a></p> -<p id='n1808' class='stm run hide_run'><a href='#n1808'>1808</a></p> -<p id='n1809' class='pln'><a href='#n1809'>1809</a></p> -<p id='n1810' class='stm run hide_run'><a href='#n1810'>1810</a></p> -<p id='n1811' class='stm run hide_run'><a href='#n1811'>1811</a></p> -<p id='n1812' class='pln'><a href='#n1812'>1812</a></p> -<p id='n1813' class='stm mis'><a href='#n1813'>1813</a></p> -<p id='n1814' class='pln'><a href='#n1814'>1814</a></p> -<p id='n1815' class='stm run hide_run'><a href='#n1815'>1815</a></p> -<p id='n1816' class='pln'><a href='#n1816'>1816</a></p> -<p id='n1817' class='pln'><a href='#n1817'>1817</a></p> -<p id='n1818' class='stm run hide_run'><a href='#n1818'>1818</a></p> -<p id='n1819' class='stm run hide_run'><a href='#n1819'>1819</a></p> -<p id='n1820' class='pln'><a href='#n1820'>1820</a></p> -<p id='n1821' class='pln'><a href='#n1821'>1821</a></p> -<p id='n1822' class='stm run hide_run'><a href='#n1822'>1822</a></p> -<p id='n1823' class='pln'><a href='#n1823'>1823</a></p> -<p id='n1824' class='pln'><a href='#n1824'>1824</a></p> -<p id='n1825' class='stm run hide_run'><a href='#n1825'>1825</a></p> -<p id='n1826' class='stm run hide_run'><a href='#n1826'>1826</a></p> -<p id='n1827' class='stm run hide_run'><a href='#n1827'>1827</a></p> -<p id='n1828' class='pln'><a href='#n1828'>1828</a></p> -<p id='n1829' class='stm run hide_run'><a href='#n1829'>1829</a></p> -<p id='n1830' class='stm mis'><a href='#n1830'>1830</a></p> -<p id='n1831' class='pln'><a href='#n1831'>1831</a></p> -<p id='n1832' class='stm run hide_run'><a href='#n1832'>1832</a></p> -<p id='n1833' class='pln'><a href='#n1833'>1833</a></p> -<p id='n1834' class='stm mis'><a href='#n1834'>1834</a></p> -<p id='n1835' class='pln'><a href='#n1835'>1835</a></p> -<p id='n1836' class='pln'><a href='#n1836'>1836</a></p> -<p id='n1837' class='stm run hide_run'><a href='#n1837'>1837</a></p> -<p id='n1838' class='pln'><a href='#n1838'>1838</a></p> -<p id='n1839' class='stm mis'><a href='#n1839'>1839</a></p> -<p id='n1840' class='stm mis'><a href='#n1840'>1840</a></p> -<p id='n1841' class='stm mis'><a href='#n1841'>1841</a></p> -<p id='n1842' class='stm mis'><a href='#n1842'>1842</a></p> -<p id='n1843' class='pln'><a href='#n1843'>1843</a></p> -<p id='n1844' class='stm mis'><a href='#n1844'>1844</a></p> -<p id='n1845' class='pln'><a href='#n1845'>1845</a></p> -<p id='n1846' class='stm mis'><a href='#n1846'>1846</a></p> -<p id='n1847' class='pln'><a href='#n1847'>1847</a></p> -<p id='n1848' class='stm mis'><a href='#n1848'>1848</a></p> -<p id='n1849' class='pln'><a href='#n1849'>1849</a></p> -<p id='n1850' class='stm mis'><a href='#n1850'>1850</a></p> -<p id='n1851' class='stm mis'><a href='#n1851'>1851</a></p> -<p id='n1852' class='stm mis'><a href='#n1852'>1852</a></p> -<p id='n1853' class='stm mis'><a href='#n1853'>1853</a></p> -<p id='n1854' class='stm mis'><a href='#n1854'>1854</a></p> -<p id='n1855' class='stm mis'><a href='#n1855'>1855</a></p> -<p id='n1856' class='stm mis'><a href='#n1856'>1856</a></p> -<p id='n1857' class='pln'><a href='#n1857'>1857</a></p> -<p id='n1858' class='pln'><a href='#n1858'>1858</a></p> -<p id='n1859' class='pln'><a href='#n1859'>1859</a></p> -<p id='n1860' class='pln'><a href='#n1860'>1860</a></p> -<p id='n1861' class='pln'><a href='#n1861'>1861</a></p> -<p id='n1862' class='pln'><a href='#n1862'>1862</a></p> -<p id='n1863' class='pln'><a href='#n1863'>1863</a></p> -<p id='n1864' class='stm mis'><a href='#n1864'>1864</a></p> -<p id='n1865' class='stm mis'><a href='#n1865'>1865</a></p> -<p id='n1866' class='pln'><a href='#n1866'>1866</a></p> -<p id='n1867' class='stm mis'><a href='#n1867'>1867</a></p> -<p id='n1868' class='stm mis'><a href='#n1868'>1868</a></p> -<p id='n1869' class='pln'><a href='#n1869'>1869</a></p> -<p id='n1870' class='stm mis'><a href='#n1870'>1870</a></p> -<p id='n1871' class='pln'><a href='#n1871'>1871</a></p> -<p id='n1872' class='stm mis'><a href='#n1872'>1872</a></p> -<p id='n1873' class='stm mis'><a href='#n1873'>1873</a></p> -<p id='n1874' class='stm mis'><a href='#n1874'>1874</a></p> -<p id='n1875' class='stm mis'><a href='#n1875'>1875</a></p> -<p id='n1876' class='stm mis'><a href='#n1876'>1876</a></p> -<p id='n1877' class='pln'><a href='#n1877'>1877</a></p> -<p id='n1878' class='pln'><a href='#n1878'>1878</a></p> -<p id='n1879' class='stm mis'><a href='#n1879'>1879</a></p> -<p id='n1880' class='pln'><a href='#n1880'>1880</a></p> -<p id='n1881' class='stm mis'><a href='#n1881'>1881</a></p> -<p id='n1882' class='stm mis'><a href='#n1882'>1882</a></p> -<p id='n1883' class='stm mis'><a href='#n1883'>1883</a></p> -<p id='n1884' class='pln'><a href='#n1884'>1884</a></p> -<p id='n1885' class='stm mis'><a href='#n1885'>1885</a></p> -<p id='n1886' class='pln'><a href='#n1886'>1886</a></p> -<p id='n1887' class='pln'><a href='#n1887'>1887</a></p> -<p id='n1888' class='pln'><a href='#n1888'>1888</a></p> -<p id='n1889' class='pln'><a href='#n1889'>1889</a></p> -<p id='n1890' class='pln'><a href='#n1890'>1890</a></p> -<p id='n1891' class='pln'><a href='#n1891'>1891</a></p> -<p id='n1892' class='pln'><a href='#n1892'>1892</a></p> -<p id='n1893' class='stm mis'><a href='#n1893'>1893</a></p> -<p id='n1894' class='stm mis'><a href='#n1894'>1894</a></p> -<p id='n1895' class='pln'><a href='#n1895'>1895</a></p> -<p id='n1896' class='stm mis'><a href='#n1896'>1896</a></p> -<p id='n1897' class='pln'><a href='#n1897'>1897</a></p> -<p id='n1898' class='stm mis'><a href='#n1898'>1898</a></p> -<p id='n1899' class='stm mis'><a href='#n1899'>1899</a></p> -<p id='n1900' class='stm mis'><a href='#n1900'>1900</a></p> -<p id='n1901' class='pln'><a href='#n1901'>1901</a></p> -<p id='n1902' class='stm mis'><a href='#n1902'>1902</a></p> -<p id='n1903' class='stm mis'><a href='#n1903'>1903</a></p> -<p id='n1904' class='pln'><a href='#n1904'>1904</a></p> -<p id='n1905' class='stm mis'><a href='#n1905'>1905</a></p> -<p id='n1906' class='pln'><a href='#n1906'>1906</a></p> -<p id='n1907' class='stm mis'><a href='#n1907'>1907</a></p> -<p id='n1908' class='pln'><a href='#n1908'>1908</a></p> -<p id='n1909' class='pln'><a href='#n1909'>1909</a></p> -<p id='n1910' class='stm mis'><a href='#n1910'>1910</a></p> -<p id='n1911' class='stm mis'><a href='#n1911'>1911</a></p> -<p id='n1912' class='pln'><a href='#n1912'>1912</a></p> -<p id='n1913' class='pln'><a href='#n1913'>1913</a></p> -<p id='n1914' class='stm run hide_run'><a href='#n1914'>1914</a></p> -<p id='n1915' class='pln'><a href='#n1915'>1915</a></p> -<p id='n1916' class='pln'><a href='#n1916'>1916</a></p> -<p id='n1917' class='stm run hide_run'><a href='#n1917'>1917</a></p> -<p id='n1918' class='pln'><a href='#n1918'>1918</a></p> -<p id='n1919' class='stm run hide_run'><a href='#n1919'>1919</a></p> -<p id='n1920' class='pln'><a href='#n1920'>1920</a></p> -<p id='n1921' class='stm mis'><a href='#n1921'>1921</a></p> -<p id='n1922' class='pln'><a href='#n1922'>1922</a></p> -<p id='n1923' class='stm run hide_run'><a href='#n1923'>1923</a></p> -<p id='n1924' class='pln'><a href='#n1924'>1924</a></p> -<p id='n1925' class='stm mis'><a href='#n1925'>1925</a></p> -<p id='n1926' class='pln'><a href='#n1926'>1926</a></p> -<p id='n1927' class='stm run hide_run'><a href='#n1927'>1927</a></p> -<p id='n1928' class='stm mis'><a href='#n1928'>1928</a></p> -<p id='n1929' class='pln'><a href='#n1929'>1929</a></p> -<p id='n1930' class='stm mis'><a href='#n1930'>1930</a></p> -<p id='n1931' class='pln'><a href='#n1931'>1931</a></p> -<p id='n1932' class='pln'><a href='#n1932'>1932</a></p> -<p id='n1933' class='stm mis'><a href='#n1933'>1933</a></p> -<p id='n1934' class='stm mis'><a href='#n1934'>1934</a></p> -<p id='n1935' class='stm mis'><a href='#n1935'>1935</a></p> -<p id='n1936' class='stm mis'><a href='#n1936'>1936</a></p> -<p id='n1937' class='stm mis'><a href='#n1937'>1937</a></p> -<p id='n1938' class='stm mis'><a href='#n1938'>1938</a></p> -<p id='n1939' class='stm mis'><a href='#n1939'>1939</a></p> -<p id='n1940' class='stm mis'><a href='#n1940'>1940</a></p> -<p id='n1941' class='pln'><a href='#n1941'>1941</a></p> -<p id='n1942' class='pln'><a href='#n1942'>1942</a></p> -<p id='n1943' class='stm mis'><a href='#n1943'>1943</a></p> -<p id='n1944' class='stm mis'><a href='#n1944'>1944</a></p> -<p id='n1945' class='pln'><a href='#n1945'>1945</a></p> -<p id='n1946' class='stm mis'><a href='#n1946'>1946</a></p> -<p id='n1947' class='stm mis'><a href='#n1947'>1947</a></p> -<p id='n1948' class='stm mis'><a href='#n1948'>1948</a></p> -<p id='n1949' class='stm mis'><a href='#n1949'>1949</a></p> -<p id='n1950' class='pln'><a href='#n1950'>1950</a></p> -<p id='n1951' class='stm mis'><a href='#n1951'>1951</a></p> -<p id='n1952' class='stm mis'><a href='#n1952'>1952</a></p> -<p id='n1953' class='pln'><a href='#n1953'>1953</a></p> -<p id='n1954' class='stm mis'><a href='#n1954'>1954</a></p> -<p id='n1955' class='stm mis'><a href='#n1955'>1955</a></p> -<p id='n1956' class='pln'><a href='#n1956'>1956</a></p> -<p id='n1957' class='pln'><a href='#n1957'>1957</a></p> -<p id='n1958' class='stm mis'><a href='#n1958'>1958</a></p> -<p id='n1959' class='stm mis'><a href='#n1959'>1959</a></p> -<p id='n1960' class='stm mis'><a href='#n1960'>1960</a></p> -<p id='n1961' class='stm mis'><a href='#n1961'>1961</a></p> -<p id='n1962' class='stm mis'><a href='#n1962'>1962</a></p> -<p id='n1963' class='pln'><a href='#n1963'>1963</a></p> -<p id='n1964' class='stm mis'><a href='#n1964'>1964</a></p> -<p id='n1965' class='pln'><a href='#n1965'>1965</a></p> -<p id='n1966' class='pln'><a href='#n1966'>1966</a></p> -<p id='n1967' class='pln'><a href='#n1967'>1967</a></p> -<p id='n1968' class='pln'><a href='#n1968'>1968</a></p> -<p id='n1969' class='pln'><a href='#n1969'>1969</a></p> -<p id='n1970' class='pln'><a href='#n1970'>1970</a></p> -<p id='n1971' class='pln'><a href='#n1971'>1971</a></p> -<p id='n1972' class='pln'><a href='#n1972'>1972</a></p> -<p id='n1973' class='pln'><a href='#n1973'>1973</a></p> -<p id='n1974' class='stm run hide_run'><a href='#n1974'>1974</a></p> -<p id='n1975' class='pln'><a href='#n1975'>1975</a></p> -<p id='n1976' class='pln'><a href='#n1976'>1976</a></p> -<p id='n1977' class='stm run hide_run'><a href='#n1977'>1977</a></p> -<p id='n1978' class='stm run hide_run'><a href='#n1978'>1978</a></p> -<p id='n1979' class='stm run hide_run'><a href='#n1979'>1979</a></p> -<p id='n1980' class='stm run hide_run'><a href='#n1980'>1980</a></p> -<p id='n1981' class='stm run hide_run'><a href='#n1981'>1981</a></p> -<p id='n1982' class='stm run hide_run'><a href='#n1982'>1982</a></p> -<p id='n1983' class='pln'><a href='#n1983'>1983</a></p> -<p id='n1984' class='pln'><a href='#n1984'>1984</a></p> -<p id='n1985' class='pln'><a href='#n1985'>1985</a></p> -<p id='n1986' class='pln'><a href='#n1986'>1986</a></p> -<p id='n1987' class='stm run hide_run'><a href='#n1987'>1987</a></p> -<p id='n1988' class='pln'><a href='#n1988'>1988</a></p> -<p id='n1989' class='stm run hide_run'><a href='#n1989'>1989</a></p> -<p id='n1990' class='stm mis'><a href='#n1990'>1990</a></p> -<p id='n1991' class='pln'><a href='#n1991'>1991</a></p> -<p id='n1992' class='stm run hide_run'><a href='#n1992'>1992</a></p> -<p id='n1993' class='pln'><a href='#n1993'>1993</a></p> -<p id='n1994' class='stm mis'><a href='#n1994'>1994</a></p> -<p id='n1995' class='pln'><a href='#n1995'>1995</a></p> -<p id='n1996' class='stm run hide_run'><a href='#n1996'>1996</a></p> -<p id='n1997' class='pln'><a href='#n1997'>1997</a></p> -<p id='n1998' class='stm mis'><a href='#n1998'>1998</a></p> -<p id='n1999' class='pln'><a href='#n1999'>1999</a></p> -<p id='n2000' class='stm run hide_run'><a href='#n2000'>2000</a></p> -<p id='n2001' class='pln'><a href='#n2001'>2001</a></p> -<p id='n2002' class='stm mis'><a href='#n2002'>2002</a></p> -<p id='n2003' class='pln'><a href='#n2003'>2003</a></p> -<p id='n2004' class='stm run hide_run'><a href='#n2004'>2004</a></p> -<p id='n2005' class='pln'><a href='#n2005'>2005</a></p> -<p id='n2006' class='stm mis'><a href='#n2006'>2006</a></p> -<p id='n2007' class='pln'><a href='#n2007'>2007</a></p> -<p id='n2008' class='stm run hide_run'><a href='#n2008'>2008</a></p> -<p id='n2009' class='pln'><a href='#n2009'>2009</a></p> -<p id='n2010' class='pln'><a href='#n2010'>2010</a></p> -<p id='n2011' class='stm mis'><a href='#n2011'>2011</a></p> -<p id='n2012' class='pln'><a href='#n2012'>2012</a></p> -<p id='n2013' class='pln'><a href='#n2013'>2013</a></p> -<p id='n2014' class='pln'><a href='#n2014'>2014</a></p> -<p id='n2015' class='pln'><a href='#n2015'>2015</a></p> -<p id='n2016' class='stm mis'><a href='#n2016'>2016</a></p> -<p id='n2017' class='stm mis'><a href='#n2017'>2017</a></p> -<p id='n2018' class='stm mis'><a href='#n2018'>2018</a></p> -<p id='n2019' class='stm mis'><a href='#n2019'>2019</a></p> -<p id='n2020' class='stm mis'><a href='#n2020'>2020</a></p> -<p id='n2021' class='pln'><a href='#n2021'>2021</a></p> -<p id='n2022' class='pln'><a href='#n2022'>2022</a></p> -<p id='n2023' class='stm mis'><a href='#n2023'>2023</a></p> -<p id='n2024' class='stm mis'><a href='#n2024'>2024</a></p> -<p id='n2025' class='stm mis'><a href='#n2025'>2025</a></p> -<p id='n2026' class='stm mis'><a href='#n2026'>2026</a></p> -<p id='n2027' class='pln'><a href='#n2027'>2027</a></p> -<p id='n2028' class='pln'><a href='#n2028'>2028</a></p> -<p id='n2029' class='stm mis'><a href='#n2029'>2029</a></p> -<p id='n2030' class='stm mis'><a href='#n2030'>2030</a></p> -<p id='n2031' class='pln'><a href='#n2031'>2031</a></p> -<p id='n2032' class='stm mis'><a href='#n2032'>2032</a></p> -<p id='n2033' class='pln'><a href='#n2033'>2033</a></p> -<p id='n2034' class='stm run hide_run'><a href='#n2034'>2034</a></p> -<p id='n2035' class='stm mis'><a href='#n2035'>2035</a></p> -<p id='n2036' class='stm mis'><a href='#n2036'>2036</a></p> -<p id='n2037' class='pln'><a href='#n2037'>2037</a></p> -<p id='n2038' class='stm mis'><a href='#n2038'>2038</a></p> -<p id='n2039' class='stm mis'><a href='#n2039'>2039</a></p> -<p id='n2040' class='stm mis'><a href='#n2040'>2040</a></p> -<p id='n2041' class='pln'><a href='#n2041'>2041</a></p> -<p id='n2042' class='pln'><a href='#n2042'>2042</a></p> -<p id='n2043' class='stm mis'><a href='#n2043'>2043</a></p> -<p id='n2044' class='stm mis'><a href='#n2044'>2044</a></p> -<p id='n2045' class='stm mis'><a href='#n2045'>2045</a></p> -<p id='n2046' class='stm mis'><a href='#n2046'>2046</a></p> -<p id='n2047' class='stm mis'><a href='#n2047'>2047</a></p> -<p id='n2048' class='stm mis'><a href='#n2048'>2048</a></p> -<p id='n2049' class='stm mis'><a href='#n2049'>2049</a></p> -<p id='n2050' class='stm mis'><a href='#n2050'>2050</a></p> -<p id='n2051' class='stm mis'><a href='#n2051'>2051</a></p> -<p id='n2052' class='pln'><a href='#n2052'>2052</a></p> -<p id='n2053' class='stm mis'><a href='#n2053'>2053</a></p> -<p id='n2054' class='stm mis'><a href='#n2054'>2054</a></p> -<p id='n2055' class='stm mis'><a href='#n2055'>2055</a></p> -<p id='n2056' class='stm mis'><a href='#n2056'>2056</a></p> -<p id='n2057' class='pln'><a href='#n2057'>2057</a></p> -<p id='n2058' class='stm mis'><a href='#n2058'>2058</a></p> -<p id='n2059' class='stm mis'><a href='#n2059'>2059</a></p> -<p id='n2060' class='pln'><a href='#n2060'>2060</a></p> -<p id='n2061' class='pln'><a href='#n2061'>2061</a></p> -<p id='n2062' class='stm mis'><a href='#n2062'>2062</a></p> -<p id='n2063' class='pln'><a href='#n2063'>2063</a></p> -<p id='n2064' class='pln'><a href='#n2064'>2064</a></p> -<p id='n2065' class='pln'><a href='#n2065'>2065</a></p> -<p id='n2066' class='pln'><a href='#n2066'>2066</a></p> -<p id='n2067' class='stm mis'><a href='#n2067'>2067</a></p> -<p id='n2068' class='stm mis'><a href='#n2068'>2068</a></p> -<p id='n2069' class='stm mis'><a href='#n2069'>2069</a></p> -<p id='n2070' class='stm mis'><a href='#n2070'>2070</a></p> -<p id='n2071' class='stm mis'><a href='#n2071'>2071</a></p> -<p id='n2072' class='stm mis'><a href='#n2072'>2072</a></p> -<p id='n2073' class='stm mis'><a href='#n2073'>2073</a></p> -<p id='n2074' class='stm mis'><a href='#n2074'>2074</a></p> -<p id='n2075' class='stm mis'><a href='#n2075'>2075</a></p> -<p id='n2076' class='stm mis'><a href='#n2076'>2076</a></p> -<p id='n2077' class='pln'><a href='#n2077'>2077</a></p> -<p id='n2078' class='stm run hide_run'><a href='#n2078'>2078</a></p> -<p id='n2079' class='stm mis'><a href='#n2079'>2079</a></p> -<p id='n2080' class='stm mis'><a href='#n2080'>2080</a></p> -<p id='n2081' class='stm mis'><a href='#n2081'>2081</a></p> -<p id='n2082' class='stm mis'><a href='#n2082'>2082</a></p> -<p id='n2083' class='stm mis'><a href='#n2083'>2083</a></p> -<p id='n2084' class='pln'><a href='#n2084'>2084</a></p> -<p id='n2085' class='pln'><a href='#n2085'>2085</a></p> -<p id='n2086' class='stm mis'><a href='#n2086'>2086</a></p> -<p id='n2087' class='stm mis'><a href='#n2087'>2087</a></p> -<p id='n2088' class='stm mis'><a href='#n2088'>2088</a></p> -<p id='n2089' class='stm mis'><a href='#n2089'>2089</a></p> -<p id='n2090' class='stm mis'><a href='#n2090'>2090</a></p> -<p id='n2091' class='stm mis'><a href='#n2091'>2091</a></p> -<p id='n2092' class='stm mis'><a href='#n2092'>2092</a></p> -<p id='n2093' class='stm mis'><a href='#n2093'>2093</a></p> -<p id='n2094' class='pln'><a href='#n2094'>2094</a></p> -<p id='n2095' class='pln'><a href='#n2095'>2095</a></p> -<p id='n2096' class='stm mis'><a href='#n2096'>2096</a></p> -<p id='n2097' class='pln'><a href='#n2097'>2097</a></p> -<p id='n2098' class='pln'><a href='#n2098'>2098</a></p> -<p id='n2099' class='stm mis'><a href='#n2099'>2099</a></p> -<p id='n2100' class='pln'><a href='#n2100'>2100</a></p> -<p id='n2101' class='pln'><a href='#n2101'>2101</a></p> -<p id='n2102' class='stm mis'><a href='#n2102'>2102</a></p> -<p id='n2103' class='stm mis'><a href='#n2103'>2103</a></p> -<p id='n2104' class='stm mis'><a href='#n2104'>2104</a></p> -<p id='n2105' class='stm mis'><a href='#n2105'>2105</a></p> -<p id='n2106' class='pln'><a href='#n2106'>2106</a></p> -<p id='n2107' class='pln'><a href='#n2107'>2107</a></p> -<p id='n2108' class='stm mis'><a href='#n2108'>2108</a></p> -<p id='n2109' class='stm mis'><a href='#n2109'>2109</a></p> -<p id='n2110' class='stm mis'><a href='#n2110'>2110</a></p> -<p id='n2111' class='stm mis'><a href='#n2111'>2111</a></p> -<p id='n2112' class='stm mis'><a href='#n2112'>2112</a></p> -<p id='n2113' class='pln'><a href='#n2113'>2113</a></p> -<p id='n2114' class='pln'><a href='#n2114'>2114</a></p> -<p id='n2115' class='stm mis'><a href='#n2115'>2115</a></p> -<p id='n2116' class='stm mis'><a href='#n2116'>2116</a></p> -<p id='n2117' class='stm mis'><a href='#n2117'>2117</a></p> -<p id='n2118' class='pln'><a href='#n2118'>2118</a></p> -<p id='n2119' class='stm mis'><a href='#n2119'>2119</a></p> -<p id='n2120' class='pln'><a href='#n2120'>2120</a></p> -<p id='n2121' class='pln'><a href='#n2121'>2121</a></p> -<p id='n2122' class='stm mis'><a href='#n2122'>2122</a></p> -<p id='n2123' class='stm mis'><a href='#n2123'>2123</a></p> -<p id='n2124' class='stm mis'><a href='#n2124'>2124</a></p> -<p id='n2125' class='stm mis'><a href='#n2125'>2125</a></p> -<p id='n2126' class='stm mis'><a href='#n2126'>2126</a></p> -<p id='n2127' class='stm mis'><a href='#n2127'>2127</a></p> -<p id='n2128' class='stm mis'><a href='#n2128'>2128</a></p> -<p id='n2129' class='stm mis'><a href='#n2129'>2129</a></p> -<p id='n2130' class='stm mis'><a href='#n2130'>2130</a></p> -<p id='n2131' class='pln'><a href='#n2131'>2131</a></p> -<p id='n2132' class='pln'><a href='#n2132'>2132</a></p> -<p id='n2133' class='stm mis'><a href='#n2133'>2133</a></p> -<p id='n2134' class='pln'><a href='#n2134'>2134</a></p> -<p id='n2135' class='stm mis'><a href='#n2135'>2135</a></p> -<p id='n2136' class='stm mis'><a href='#n2136'>2136</a></p> -<p id='n2137' class='pln'><a href='#n2137'>2137</a></p> -<p id='n2138' class='stm mis'><a href='#n2138'>2138</a></p> -<p id='n2139' class='stm mis'><a href='#n2139'>2139</a></p> -<p id='n2140' class='pln'><a href='#n2140'>2140</a></p> -<p id='n2141' class='stm mis'><a href='#n2141'>2141</a></p> -<p id='n2142' class='stm mis'><a href='#n2142'>2142</a></p> -<p id='n2143' class='pln'><a href='#n2143'>2143</a></p> -<p id='n2144' class='stm mis'><a href='#n2144'>2144</a></p> -<p id='n2145' class='stm mis'><a href='#n2145'>2145</a></p> -<p id='n2146' class='stm mis'><a href='#n2146'>2146</a></p> -<p id='n2147' class='stm mis'><a href='#n2147'>2147</a></p> -<p id='n2148' class='stm mis'><a href='#n2148'>2148</a></p> -<p id='n2149' class='stm mis'><a href='#n2149'>2149</a></p> -<p id='n2150' class='stm mis'><a href='#n2150'>2150</a></p> -<p id='n2151' class='stm mis'><a href='#n2151'>2151</a></p> -<p id='n2152' class='stm mis'><a href='#n2152'>2152</a></p> -<p id='n2153' class='stm mis'><a href='#n2153'>2153</a></p> -<p id='n2154' class='stm mis'><a href='#n2154'>2154</a></p> -<p id='n2155' class='pln'><a href='#n2155'>2155</a></p> -<p id='n2156' class='pln'><a href='#n2156'>2156</a></p> -<p id='n2157' class='stm mis'><a href='#n2157'>2157</a></p> -<p id='n2158' class='stm mis'><a href='#n2158'>2158</a></p> -<p id='n2159' class='stm mis'><a href='#n2159'>2159</a></p> -<p id='n2160' class='stm mis'><a href='#n2160'>2160</a></p> -<p id='n2161' class='pln'><a href='#n2161'>2161</a></p> -<p id='n2162' class='stm mis'><a href='#n2162'>2162</a></p> -<p id='n2163' class='stm mis'><a href='#n2163'>2163</a></p> -<p id='n2164' class='pln'><a href='#n2164'>2164</a></p> -<p id='n2165' class='stm mis'><a href='#n2165'>2165</a></p> -<p id='n2166' class='pln'><a href='#n2166'>2166</a></p> -<p id='n2167' class='stm mis'><a href='#n2167'>2167</a></p> -<p id='n2168' class='pln'><a href='#n2168'>2168</a></p> -<p id='n2169' class='pln'><a href='#n2169'>2169</a></p> -<p id='n2170' class='pln'><a href='#n2170'>2170</a></p> -<p id='n2171' class='pln'><a href='#n2171'>2171</a></p> -<p id='n2172' class='pln'><a href='#n2172'>2172</a></p> -<p id='n2173' class='pln'><a href='#n2173'>2173</a></p> -<p id='n2174' class='pln'><a href='#n2174'>2174</a></p> -<p id='n2175' class='pln'><a href='#n2175'>2175</a></p> -<p id='n2176' class='pln'><a href='#n2176'>2176</a></p> -<p id='n2177' class='pln'><a href='#n2177'>2177</a></p> -<p id='n2178' class='stm mis'><a href='#n2178'>2178</a></p> -<p id='n2179' class='pln'><a href='#n2179'>2179</a></p> -<p id='n2180' class='stm run hide_run'><a href='#n2180'>2180</a></p> -<p id='n2181' class='pln'><a href='#n2181'>2181</a></p> -<p id='n2182' class='pln'><a href='#n2182'>2182</a></p> -<p id='n2183' class='stm run hide_run'><a href='#n2183'>2183</a></p> -<p id='n2184' class='stm run hide_run'><a href='#n2184'>2184</a></p> -<p id='n2185' class='stm run hide_run'><a href='#n2185'>2185</a></p> -<p id='n2186' class='pln'><a href='#n2186'>2186</a></p> -<p id='n2187' class='stm run hide_run'><a href='#n2187'>2187</a></p> -<p id='n2188' class='pln'><a href='#n2188'>2188</a></p> -<p id='n2189' class='stm run hide_run'><a href='#n2189'>2189</a></p> -<p id='n2190' class='pln'><a href='#n2190'>2190</a></p> -<p id='n2191' class='stm run hide_run'><a href='#n2191'>2191</a></p> -<p id='n2192' class='pln'><a href='#n2192'>2192</a></p> -<p id='n2193' class='stm mis'><a href='#n2193'>2193</a></p> -<p id='n2194' class='pln'><a href='#n2194'>2194</a></p> -<p id='n2195' class='stm run hide_run'><a href='#n2195'>2195</a></p> -<p id='n2196' class='stm run hide_run'><a href='#n2196'>2196</a></p> -<p id='n2197' class='stm run hide_run'><a href='#n2197'>2197</a></p> -<p id='n2198' class='stm mis'><a href='#n2198'>2198</a></p> -<p id='n2199' class='stm mis'><a href='#n2199'>2199</a></p> -<p id='n2200' class='pln'><a href='#n2200'>2200</a></p> -<p id='n2201' class='stm run hide_run'><a href='#n2201'>2201</a></p> -<p id='n2202' class='stm mis'><a href='#n2202'>2202</a></p> -<p id='n2203' class='pln'><a href='#n2203'>2203</a></p> -<p id='n2204' class='stm run hide_run'><a href='#n2204'>2204</a></p> -<p id='n2205' class='stm run hide_run'><a href='#n2205'>2205</a></p> -<p id='n2206' class='stm run hide_run'><a href='#n2206'>2206</a></p> -<p id='n2207' class='stm run hide_run'><a href='#n2207'>2207</a></p> -<p id='n2208' class='stm run hide_run'><a href='#n2208'>2208</a></p> -<p id='n2209' class='stm run hide_run'><a href='#n2209'>2209</a></p> -<p id='n2210' class='stm run hide_run'><a href='#n2210'>2210</a></p> -<p id='n2211' class='stm run hide_run'><a href='#n2211'>2211</a></p> -<p id='n2212' class='stm mis'><a href='#n2212'>2212</a></p> -<p id='n2213' class='stm mis'><a href='#n2213'>2213</a></p> -<p id='n2214' class='stm mis'><a href='#n2214'>2214</a></p> -<p id='n2215' class='stm mis'><a href='#n2215'>2215</a></p> -<p id='n2216' class='stm mis'><a href='#n2216'>2216</a></p> -<p id='n2217' class='stm mis'><a href='#n2217'>2217</a></p> -<p id='n2218' class='pln'><a href='#n2218'>2218</a></p> -<p id='n2219' class='pln'><a href='#n2219'>2219</a></p> -<p id='n2220' class='pln'><a href='#n2220'>2220</a></p> -<p id='n2221' class='pln'><a href='#n2221'>2221</a></p> -<p id='n2222' class='pln'><a href='#n2222'>2222</a></p> -<p id='n2223' class='pln'><a href='#n2223'>2223</a></p> -<p id='n2224' class='pln'><a href='#n2224'>2224</a></p> -<p id='n2225' class='pln'><a href='#n2225'>2225</a></p> -<p id='n2226' class='stm mis'><a href='#n2226'>2226</a></p> -<p id='n2227' class='stm mis'><a href='#n2227'>2227</a></p> -<p id='n2228' class='stm mis'><a href='#n2228'>2228</a></p> -<p id='n2229' class='stm run hide_run'><a href='#n2229'>2229</a></p> -<p id='n2230' class='stm run hide_run'><a href='#n2230'>2230</a></p> -<p id='n2231' class='stm run hide_run'><a href='#n2231'>2231</a></p> -<p id='n2232' class='stm run hide_run'><a href='#n2232'>2232</a></p> -<p id='n2233' class='stm mis'><a href='#n2233'>2233</a></p> -<p id='n2234' class='stm mis'><a href='#n2234'>2234</a></p> -<p id='n2235' class='stm mis'><a href='#n2235'>2235</a></p> -<p id='n2236' class='pln'><a href='#n2236'>2236</a></p> -<p id='n2237' class='stm run hide_run'><a href='#n2237'>2237</a></p> -<p id='n2238' class='stm run hide_run'><a href='#n2238'>2238</a></p> -<p id='n2239' class='stm run hide_run'><a href='#n2239'>2239</a></p> -<p id='n2240' class='stm run hide_run'><a href='#n2240'>2240</a></p> -<p id='n2241' class='pln'><a href='#n2241'>2241</a></p> -<p id='n2242' class='stm mis'><a href='#n2242'>2242</a></p> -<p id='n2243' class='pln'><a href='#n2243'>2243</a></p> -<p id='n2244' class='stm run hide_run'><a href='#n2244'>2244</a></p> -<p id='n2245' class='stm run hide_run'><a href='#n2245'>2245</a></p> -<p id='n2246' class='stm run hide_run'><a href='#n2246'>2246</a></p> -<p id='n2247' class='stm run hide_run'><a href='#n2247'>2247</a></p> -<p id='n2248' class='stm mis'><a href='#n2248'>2248</a></p> -<p id='n2249' class='stm run hide_run'><a href='#n2249'>2249</a></p> -<p id='n2250' class='pln'><a href='#n2250'>2250</a></p> -<p id='n2251' class='stm run hide_run'><a href='#n2251'>2251</a></p> -<p id='n2252' class='pln'><a href='#n2252'>2252</a></p> -<p id='n2253' class='pln'><a href='#n2253'>2253</a></p> -<p id='n2254' class='pln'><a href='#n2254'>2254</a></p> -<p id='n2255' class='pln'><a href='#n2255'>2255</a></p> -<p id='n2256' class='pln'><a href='#n2256'>2256</a></p> -<p id='n2257' class='pln'><a href='#n2257'>2257</a></p> -<p id='n2258' class='pln'><a href='#n2258'>2258</a></p> -<p id='n2259' class='pln'><a href='#n2259'>2259</a></p> -<p id='n2260' class='pln'><a href='#n2260'>2260</a></p> -<p id='n2261' class='pln'><a href='#n2261'>2261</a></p> -<p id='n2262' class='pln'><a href='#n2262'>2262</a></p> -<p id='n2263' class='stm mis'><a href='#n2263'>2263</a></p> -<p id='n2264' class='stm mis'><a href='#n2264'>2264</a></p> -<p id='n2265' class='stm mis'><a href='#n2265'>2265</a></p> -<p id='n2266' class='pln'><a href='#n2266'>2266</a></p> -<p id='n2267' class='stm run hide_run'><a href='#n2267'>2267</a></p> -<p id='n2268' class='stm run hide_run'><a href='#n2268'>2268</a></p> -<p id='n2269' class='pln'><a href='#n2269'>2269</a></p> -<p id='n2270' class='pln'><a href='#n2270'>2270</a></p> -<p id='n2271' class='stm run hide_run'><a href='#n2271'>2271</a></p> -<p id='n2272' class='pln'><a href='#n2272'>2272</a></p> -<p id='n2273' class='pln'><a href='#n2273'>2273</a></p> -<p id='n2274' class='stm run hide_run'><a href='#n2274'>2274</a></p> -<p id='n2275' class='stm run hide_run'><a href='#n2275'>2275</a></p> -<p id='n2276' class='pln'><a href='#n2276'>2276</a></p> -<p id='n2277' class='stm run hide_run'><a href='#n2277'>2277</a></p> -<p id='n2278' class='stm run hide_run'><a href='#n2278'>2278</a></p> -<p id='n2279' class='pln'><a href='#n2279'>2279</a></p> -<p id='n2280' class='stm run hide_run'><a href='#n2280'>2280</a></p> -<p id='n2281' class='pln'><a href='#n2281'>2281</a></p> -<p id='n2282' class='stm run hide_run'><a href='#n2282'>2282</a></p> -<p id='n2283' class='pln'><a href='#n2283'>2283</a></p> -<p id='n2284' class='stm run hide_run'><a href='#n2284'>2284</a></p> -<p id='n2285' class='stm run hide_run'><a href='#n2285'>2285</a></p> -<p id='n2286' class='stm run hide_run'><a href='#n2286'>2286</a></p> -<p id='n2287' class='stm mis'><a href='#n2287'>2287</a></p> -<p id='n2288' class='stm mis'><a href='#n2288'>2288</a></p> -<p id='n2289' class='pln'><a href='#n2289'>2289</a></p> -<p id='n2290' class='stm run hide_run'><a href='#n2290'>2290</a></p> -<p id='n2291' class='pln'><a href='#n2291'>2291</a></p> -<p id='n2292' class='pln'><a href='#n2292'>2292</a></p> -<p id='n2293' class='stm run hide_run'><a href='#n2293'>2293</a></p> -<p id='n2294' class='stm run hide_run'><a href='#n2294'>2294</a></p> -<p id='n2295' class='pln'><a href='#n2295'>2295</a></p> -<p id='n2296' class='stm run hide_run'><a href='#n2296'>2296</a></p> -<p id='n2297' class='stm run hide_run'><a href='#n2297'>2297</a></p> -<p id='n2298' class='pln'><a href='#n2298'>2298</a></p> -<p id='n2299' class='stm run hide_run'><a href='#n2299'>2299</a></p> -<p id='n2300' class='stm mis'><a href='#n2300'>2300</a></p> -<p id='n2301' class='stm mis'><a href='#n2301'>2301</a></p> -<p id='n2302' class='stm run hide_run'><a href='#n2302'>2302</a></p> -<p id='n2303' class='pln'><a href='#n2303'>2303</a></p> -<p id='n2304' class='stm run hide_run'><a href='#n2304'>2304</a></p> -<p id='n2305' class='stm run hide_run'><a href='#n2305'>2305</a></p> -<p id='n2306' class='stm mis'><a href='#n2306'>2306</a></p> -<p id='n2307' class='stm mis'><a href='#n2307'>2307</a></p> -<p id='n2308' class='pln'><a href='#n2308'>2308</a></p> -<p id='n2309' class='stm run hide_run'><a href='#n2309'>2309</a></p> -<p id='n2310' class='pln'><a href='#n2310'>2310</a></p> -<p id='n2311' class='stm run hide_run'><a href='#n2311'>2311</a></p> -<p id='n2312' class='pln'><a href='#n2312'>2312</a></p> -<p id='n2313' class='pln'><a href='#n2313'>2313</a></p> -<p id='n2314' class='pln'><a href='#n2314'>2314</a></p> -<p id='n2315' class='pln'><a href='#n2315'>2315</a></p> -<p id='n2316' class='pln'><a href='#n2316'>2316</a></p> -<p id='n2317' class='pln'><a href='#n2317'>2317</a></p> -<p id='n2318' class='pln'><a href='#n2318'>2318</a></p> -<p id='n2319' class='pln'><a href='#n2319'>2319</a></p> -<p id='n2320' class='stm run hide_run'><a href='#n2320'>2320</a></p> -<p id='n2321' class='pln'><a href='#n2321'>2321</a></p> -<p id='n2322' class='pln'><a href='#n2322'>2322</a></p> -<p id='n2323' class='pln'><a href='#n2323'>2323</a></p> -<p id='n2324' class='pln'><a href='#n2324'>2324</a></p> -<p id='n2325' class='pln'><a href='#n2325'>2325</a></p> -<p id='n2326' class='pln'><a href='#n2326'>2326</a></p> -<p id='n2327' class='pln'><a href='#n2327'>2327</a></p> -<p id='n2328' class='stm run hide_run'><a href='#n2328'>2328</a></p> -<p id='n2329' class='pln'><a href='#n2329'>2329</a></p> -<p id='n2330' class='pln'><a href='#n2330'>2330</a></p> -<p id='n2331' class='pln'><a href='#n2331'>2331</a></p> -<p id='n2332' class='pln'><a href='#n2332'>2332</a></p> -<p id='n2333' class='pln'><a href='#n2333'>2333</a></p> -<p id='n2334' class='pln'><a href='#n2334'>2334</a></p> -<p id='n2335' class='pln'><a href='#n2335'>2335</a></p> -<p id='n2336' class='stm run hide_run'><a href='#n2336'>2336</a></p> -<p id='n2337' class='pln'><a href='#n2337'>2337</a></p> -<p id='n2338' class='stm run hide_run'><a href='#n2338'>2338</a></p> -<p id='n2339' class='pln'><a href='#n2339'>2339</a></p> -<p id='n2340' class='stm run hide_run'><a href='#n2340'>2340</a></p> -<p id='n2341' class='pln'><a href='#n2341'>2341</a></p> -<p id='n2342' class='pln'><a href='#n2342'>2342</a></p> -<p id='n2343' class='pln'><a href='#n2343'>2343</a></p> -<p id='n2344' class='pln'><a href='#n2344'>2344</a></p> -<p id='n2345' class='pln'><a href='#n2345'>2345</a></p> -<p id='n2346' class='pln'><a href='#n2346'>2346</a></p> -<p id='n2347' class='pln'><a href='#n2347'>2347</a></p> -<p id='n2348' class='stm run hide_run'><a href='#n2348'>2348</a></p> -<p id='n2349' class='pln'><a href='#n2349'>2349</a></p> -<p id='n2350' class='pln'><a href='#n2350'>2350</a></p> -<p id='n2351' class='pln'><a href='#n2351'>2351</a></p> -<p id='n2352' class='pln'><a href='#n2352'>2352</a></p> -<p id='n2353' class='pln'><a href='#n2353'>2353</a></p> -<p id='n2354' class='pln'><a href='#n2354'>2354</a></p> -<p id='n2355' class='pln'><a href='#n2355'>2355</a></p> -<p id='n2356' class='pln'><a href='#n2356'>2356</a></p> -<p id='n2357' class='stm run hide_run'><a href='#n2357'>2357</a></p> -<p id='n2358' class='pln'><a href='#n2358'>2358</a></p> -<p id='n2359' class='stm mis'><a href='#n2359'>2359</a></p> -<p id='n2360' class='pln'><a href='#n2360'>2360</a></p> -<p id='n2361' class='stm run hide_run'><a href='#n2361'>2361</a></p> -<p id='n2362' class='stm mis'><a href='#n2362'>2362</a></p> -<p id='n2363' class='pln'><a href='#n2363'>2363</a></p> -<p id='n2364' class='stm run hide_run'><a href='#n2364'>2364</a></p> -<p id='n2365' class='stm mis'><a href='#n2365'>2365</a></p> -<p id='n2366' class='pln'><a href='#n2366'>2366</a></p> -<p id='n2367' class='stm run hide_run'><a href='#n2367'>2367</a></p> -<p id='n2368' class='stm mis'><a href='#n2368'>2368</a></p> -<p id='n2369' class='pln'><a href='#n2369'>2369</a></p> -<p id='n2370' class='stm run hide_run'><a href='#n2370'>2370</a></p> -<p id='n2371' class='stm mis'><a href='#n2371'>2371</a></p> -<p id='n2372' class='pln'><a href='#n2372'>2372</a></p> -<p id='n2373' class='pln'><a href='#n2373'>2373</a></p> -<p id='n2374' class='stm run hide_run'><a href='#n2374'>2374</a></p> -<p id='n2375' class='stm mis'><a href='#n2375'>2375</a></p> -<p id='n2376' class='stm mis'><a href='#n2376'>2376</a></p> -<p id='n2377' class='stm mis'><a href='#n2377'>2377</a></p> -<p id='n2378' class='pln'><a href='#n2378'>2378</a></p> -<p id='n2379' class='pln'><a href='#n2379'>2379</a></p> -<p id='n2380' class='stm run hide_run'><a href='#n2380'>2380</a></p> -<p id='n2381' class='stm mis'><a href='#n2381'>2381</a></p> -<p id='n2382' class='stm mis'><a href='#n2382'>2382</a></p> -<p id='n2383' class='stm mis'><a href='#n2383'>2383</a></p> -<p id='n2384' class='stm mis'><a href='#n2384'>2384</a></p> -<p id='n2385' class='pln'><a href='#n2385'>2385</a></p> -<p id='n2386' class='stm mis'><a href='#n2386'>2386</a></p> -<p id='n2387' class='stm mis'><a href='#n2387'>2387</a></p> -<p id='n2388' class='stm mis'><a href='#n2388'>2388</a></p> -<p id='n2389' class='pln'><a href='#n2389'>2389</a></p> -<p id='n2390' class='stm mis'><a href='#n2390'>2390</a></p> -<p id='n2391' class='stm mis'><a href='#n2391'>2391</a></p> -<p id='n2392' class='stm mis'><a href='#n2392'>2392</a></p> -<p id='n2393' class='pln'><a href='#n2393'>2393</a></p> -<p id='n2394' class='stm mis'><a href='#n2394'>2394</a></p> -<p id='n2395' class='stm mis'><a href='#n2395'>2395</a></p> -<p id='n2396' class='stm mis'><a href='#n2396'>2396</a></p> -<p id='n2397' class='pln'><a href='#n2397'>2397</a></p> -<p id='n2398' class='stm mis'><a href='#n2398'>2398</a></p> -<p id='n2399' class='stm mis'><a href='#n2399'>2399</a></p> -<p id='n2400' class='pln'><a href='#n2400'>2400</a></p> -<p id='n2401' class='stm mis'><a href='#n2401'>2401</a></p> -<p id='n2402' class='stm mis'><a href='#n2402'>2402</a></p> -<p id='n2403' class='stm mis'><a href='#n2403'>2403</a></p> -<p id='n2404' class='pln'><a href='#n2404'>2404</a></p> -<p id='n2405' class='stm mis'><a href='#n2405'>2405</a></p> -<p id='n2406' class='pln'><a href='#n2406'>2406</a></p> -<p id='n2407' class='stm mis'><a href='#n2407'>2407</a></p> -<p id='n2408' class='stm mis'><a href='#n2408'>2408</a></p> -<p id='n2409' class='stm mis'><a href='#n2409'>2409</a></p> -<p id='n2410' class='stm mis'><a href='#n2410'>2410</a></p> -<p id='n2411' class='stm mis'><a href='#n2411'>2411</a></p> -<p id='n2412' class='stm mis'><a href='#n2412'>2412</a></p> -<p id='n2413' class='stm mis'><a href='#n2413'>2413</a></p> -<p id='n2414' class='stm mis'><a href='#n2414'>2414</a></p> -<p id='n2415' class='stm mis'><a href='#n2415'>2415</a></p> -<p id='n2416' class='stm mis'><a href='#n2416'>2416</a></p> -<p id='n2417' class='stm mis'><a href='#n2417'>2417</a></p> -<p id='n2418' class='stm mis'><a href='#n2418'>2418</a></p> -<p id='n2419' class='stm mis'><a href='#n2419'>2419</a></p> -<p id='n2420' class='stm mis'><a href='#n2420'>2420</a></p> -<p id='n2421' class='stm mis'><a href='#n2421'>2421</a></p> -<p id='n2422' class='stm mis'><a href='#n2422'>2422</a></p> -<p id='n2423' class='stm mis'><a href='#n2423'>2423</a></p> -<p id='n2424' class='stm mis'><a href='#n2424'>2424</a></p> -<p id='n2425' class='pln'><a href='#n2425'>2425</a></p> -<p id='n2426' class='stm mis'><a href='#n2426'>2426</a></p> -<p id='n2427' class='pln'><a href='#n2427'>2427</a></p> -<p id='n2428' class='stm mis'><a href='#n2428'>2428</a></p> -<p id='n2429' class='pln'><a href='#n2429'>2429</a></p> -<p id='n2430' class='pln'><a href='#n2430'>2430</a></p> -<p id='n2431' class='pln'><a href='#n2431'>2431</a></p> -<p id='n2432' class='pln'><a href='#n2432'>2432</a></p> -<p id='n2433' class='stm mis'><a href='#n2433'>2433</a></p> -<p id='n2434' class='stm mis'><a href='#n2434'>2434</a></p> -<p id='n2435' class='stm mis'><a href='#n2435'>2435</a></p> -<p id='n2436' class='stm mis'><a href='#n2436'>2436</a></p> -<p id='n2437' class='pln'><a href='#n2437'>2437</a></p> -<p id='n2438' class='stm mis'><a href='#n2438'>2438</a></p> -<p id='n2439' class='pln'><a href='#n2439'>2439</a></p> -<p id='n2440' class='stm mis'><a href='#n2440'>2440</a></p> -<p id='n2441' class='stm mis'><a href='#n2441'>2441</a></p> -<p id='n2442' class='stm mis'><a href='#n2442'>2442</a></p> -<p id='n2443' class='stm mis'><a href='#n2443'>2443</a></p> -<p id='n2444' class='stm mis'><a href='#n2444'>2444</a></p> -<p id='n2445' class='stm mis'><a href='#n2445'>2445</a></p> -<p id='n2446' class='stm mis'><a href='#n2446'>2446</a></p> -<p id='n2447' class='stm mis'><a href='#n2447'>2447</a></p> -<p id='n2448' class='pln'><a href='#n2448'>2448</a></p> -<p id='n2449' class='stm mis'><a href='#n2449'>2449</a></p> -<p id='n2450' class='stm mis'><a href='#n2450'>2450</a></p> -<p id='n2451' class='stm mis'><a href='#n2451'>2451</a></p> -<p id='n2452' class='stm mis'><a href='#n2452'>2452</a></p> -<p id='n2453' class='stm mis'><a href='#n2453'>2453</a></p> -<p id='n2454' class='stm mis'><a href='#n2454'>2454</a></p> -<p id='n2455' class='stm mis'><a href='#n2455'>2455</a></p> -<p id='n2456' class='stm mis'><a href='#n2456'>2456</a></p> -<p id='n2457' class='pln'><a href='#n2457'>2457</a></p> -<p id='n2458' class='stm mis'><a href='#n2458'>2458</a></p> -<p id='n2459' class='pln'><a href='#n2459'>2459</a></p> -<p id='n2460' class='stm mis'><a href='#n2460'>2460</a></p> -<p id='n2461' class='stm mis'><a href='#n2461'>2461</a></p> -<p id='n2462' class='stm mis'><a href='#n2462'>2462</a></p> -<p id='n2463' class='stm mis'><a href='#n2463'>2463</a></p> -<p id='n2464' class='stm mis'><a href='#n2464'>2464</a></p> -<p id='n2465' class='stm mis'><a href='#n2465'>2465</a></p> -<p id='n2466' class='stm mis'><a href='#n2466'>2466</a></p> -<p id='n2467' class='stm mis'><a href='#n2467'>2467</a></p> -<p id='n2468' class='pln'><a href='#n2468'>2468</a></p> -<p id='n2469' class='stm mis'><a href='#n2469'>2469</a></p> -<p id='n2470' class='pln'><a href='#n2470'>2470</a></p> -<p id='n2471' class='stm mis'><a href='#n2471'>2471</a></p> -<p id='n2472' class='stm mis'><a href='#n2472'>2472</a></p> -<p id='n2473' class='stm mis'><a href='#n2473'>2473</a></p> -<p id='n2474' class='stm mis'><a href='#n2474'>2474</a></p> -<p id='n2475' class='stm mis'><a href='#n2475'>2475</a></p> -<p id='n2476' class='stm mis'><a href='#n2476'>2476</a></p> -<p id='n2477' class='stm mis'><a href='#n2477'>2477</a></p> -<p id='n2478' class='pln'><a href='#n2478'>2478</a></p> -<p id='n2479' class='stm mis'><a href='#n2479'>2479</a></p> -<p id='n2480' class='stm mis'><a href='#n2480'>2480</a></p> -<p id='n2481' class='stm mis'><a href='#n2481'>2481</a></p> -<p id='n2482' class='stm mis'><a href='#n2482'>2482</a></p> -<p id='n2483' class='stm mis'><a href='#n2483'>2483</a></p> -<p id='n2484' class='pln'><a href='#n2484'>2484</a></p> -<p id='n2485' class='stm mis'><a href='#n2485'>2485</a></p> -<p id='n2486' class='stm mis'><a href='#n2486'>2486</a></p> -<p id='n2487' class='stm mis'><a href='#n2487'>2487</a></p> -<p id='n2488' class='pln'><a href='#n2488'>2488</a></p> -<p id='n2489' class='stm mis'><a href='#n2489'>2489</a></p> -<p id='n2490' class='stm mis'><a href='#n2490'>2490</a></p> -<p id='n2491' class='stm mis'><a href='#n2491'>2491</a></p> -<p id='n2492' class='pln'><a href='#n2492'>2492</a></p> -<p id='n2493' class='pln'><a href='#n2493'>2493</a></p> -<p id='n2494' class='stm mis'><a href='#n2494'>2494</a></p> -<p id='n2495' class='pln'><a href='#n2495'>2495</a></p> -<p id='n2496' class='pln'><a href='#n2496'>2496</a></p> -<p id='n2497' class='stm mis'><a href='#n2497'>2497</a></p> -<p id='n2498' class='pln'><a href='#n2498'>2498</a></p> -<p id='n2499' class='pln'><a href='#n2499'>2499</a></p> -<p id='n2500' class='stm mis'><a href='#n2500'>2500</a></p> -<p id='n2501' class='stm mis'><a href='#n2501'>2501</a></p> -<p id='n2502' class='stm mis'><a href='#n2502'>2502</a></p> -<p id='n2503' class='stm mis'><a href='#n2503'>2503</a></p> -<p id='n2504' class='pln'><a href='#n2504'>2504</a></p> -<p id='n2505' class='pln'><a href='#n2505'>2505</a></p> -<p id='n2506' class='pln'><a href='#n2506'>2506</a></p> -<p id='n2507' class='stm mis'><a href='#n2507'>2507</a></p> -<p id='n2508' class='stm mis'><a href='#n2508'>2508</a></p> -<p id='n2509' class='pln'><a href='#n2509'>2509</a></p> -<p id='n2510' class='stm mis'><a href='#n2510'>2510</a></p> -<p id='n2511' class='stm mis'><a href='#n2511'>2511</a></p> -<p id='n2512' class='pln'><a href='#n2512'>2512</a></p> -<p id='n2513' class='stm mis'><a href='#n2513'>2513</a></p> -<p id='n2514' class='stm mis'><a href='#n2514'>2514</a></p> -<p id='n2515' class='pln'><a href='#n2515'>2515</a></p> -<p id='n2516' class='pln'><a href='#n2516'>2516</a></p> -<p id='n2517' class='pln'><a href='#n2517'>2517</a></p> -<p id='n2518' class='pln'><a href='#n2518'>2518</a></p> -<p id='n2519' class='pln'><a href='#n2519'>2519</a></p> -<p id='n2520' class='pln'><a href='#n2520'>2520</a></p> -<p id='n2521' class='pln'><a href='#n2521'>2521</a></p> -<p id='n2522' class='pln'><a href='#n2522'>2522</a></p> -<p id='n2523' class='pln'><a href='#n2523'>2523</a></p> -<p id='n2524' class='pln'><a href='#n2524'>2524</a></p> -<p id='n2525' class='pln'><a href='#n2525'>2525</a></p> -<p id='n2526' class='pln'><a href='#n2526'>2526</a></p> -<p id='n2527' class='stm mis'><a href='#n2527'>2527</a></p> -<p id='n2528' class='pln'><a href='#n2528'>2528</a></p> -<p id='n2529' class='stm mis'><a href='#n2529'>2529</a></p> -<p id='n2530' class='pln'><a href='#n2530'>2530</a></p> -<p id='n2531' class='pln'><a href='#n2531'>2531</a></p> -<p id='n2532' class='stm run hide_run'><a href='#n2532'>2532</a></p> -<p id='n2533' class='pln'><a href='#n2533'>2533</a></p> -<p id='n2534' class='pln'><a href='#n2534'>2534</a></p> -<p id='n2535' class='stm run hide_run'><a href='#n2535'>2535</a></p> -<p id='n2536' class='stm run hide_run'><a href='#n2536'>2536</a></p> -<p id='n2537' class='pln'><a href='#n2537'>2537</a></p> -<p id='n2538' class='stm run hide_run'><a href='#n2538'>2538</a></p> -<p id='n2539' class='stm mis'><a href='#n2539'>2539</a></p> -<p id='n2540' class='pln'><a href='#n2540'>2540</a></p> -<p id='n2541' class='stm run hide_run'><a href='#n2541'>2541</a></p> -<p id='n2542' class='stm mis'><a href='#n2542'>2542</a></p> -<p id='n2543' class='pln'><a href='#n2543'>2543</a></p> -<p id='n2544' class='stm run hide_run'><a href='#n2544'>2544</a></p> -<p id='n2545' class='stm mis'><a href='#n2545'>2545</a></p> -<p id='n2546' class='stm mis'><a href='#n2546'>2546</a></p> -<p id='n2547' class='stm mis'><a href='#n2547'>2547</a></p> -<p id='n2548' class='stm mis'><a href='#n2548'>2548</a></p> -<p id='n2549' class='stm mis'><a href='#n2549'>2549</a></p> -<p id='n2550' class='stm mis'><a href='#n2550'>2550</a></p> -<p id='n2551' class='pln'><a href='#n2551'>2551</a></p> -<p id='n2552' class='stm mis'><a href='#n2552'>2552</a></p> -<p id='n2553' class='stm mis'><a href='#n2553'>2553</a></p> -<p id='n2554' class='stm mis'><a href='#n2554'>2554</a></p> -<p id='n2555' class='stm mis'><a href='#n2555'>2555</a></p> -<p id='n2556' class='stm mis'><a href='#n2556'>2556</a></p> -<p id='n2557' class='stm mis'><a href='#n2557'>2557</a></p> -<p id='n2558' class='stm mis'><a href='#n2558'>2558</a></p> -<p id='n2559' class='stm mis'><a href='#n2559'>2559</a></p> -<p id='n2560' class='stm mis'><a href='#n2560'>2560</a></p> -<p id='n2561' class='pln'><a href='#n2561'>2561</a></p> -<p id='n2562' class='stm mis'><a href='#n2562'>2562</a></p> -<p id='n2563' class='stm mis'><a href='#n2563'>2563</a></p> -<p id='n2564' class='stm mis'><a href='#n2564'>2564</a></p> -<p id='n2565' class='stm mis'><a href='#n2565'>2565</a></p> -<p id='n2566' class='stm mis'><a href='#n2566'>2566</a></p> -<p id='n2567' class='stm mis'><a href='#n2567'>2567</a></p> -<p id='n2568' class='stm mis'><a href='#n2568'>2568</a></p> -<p id='n2569' class='stm mis'><a href='#n2569'>2569</a></p> -<p id='n2570' class='pln'><a href='#n2570'>2570</a></p> -<p id='n2571' class='stm mis'><a href='#n2571'>2571</a></p> -<p id='n2572' class='stm mis'><a href='#n2572'>2572</a></p> -<p id='n2573' class='stm mis'><a href='#n2573'>2573</a></p> -<p id='n2574' class='stm mis'><a href='#n2574'>2574</a></p> -<p id='n2575' class='stm mis'><a href='#n2575'>2575</a></p> -<p id='n2576' class='stm mis'><a href='#n2576'>2576</a></p> -<p id='n2577' class='stm mis'><a href='#n2577'>2577</a></p> -<p id='n2578' class='stm mis'><a href='#n2578'>2578</a></p> -<p id='n2579' class='pln'><a href='#n2579'>2579</a></p> -<p id='n2580' class='pln'><a href='#n2580'>2580</a></p> -<p id='n2581' class='stm mis'><a href='#n2581'>2581</a></p> -<p id='n2582' class='pln'><a href='#n2582'>2582</a></p> -<p id='n2583' class='stm mis'><a href='#n2583'>2583</a></p> -<p id='n2584' class='stm mis'><a href='#n2584'>2584</a></p> -<p id='n2585' class='stm mis'><a href='#n2585'>2585</a></p> -<p id='n2586' class='stm mis'><a href='#n2586'>2586</a></p> -<p id='n2587' class='stm mis'><a href='#n2587'>2587</a></p> -<p id='n2588' class='pln'><a href='#n2588'>2588</a></p> -<p id='n2589' class='stm mis'><a href='#n2589'>2589</a></p> -<p id='n2590' class='stm mis'><a href='#n2590'>2590</a></p> -<p id='n2591' class='pln'><a href='#n2591'>2591</a></p> -<p id='n2592' class='stm mis'><a href='#n2592'>2592</a></p> -<p id='n2593' class='pln'><a href='#n2593'>2593</a></p> -<p id='n2594' class='pln'><a href='#n2594'>2594</a></p> -<p id='n2595' class='pln'><a href='#n2595'>2595</a></p> -<p id='n2596' class='pln'><a href='#n2596'>2596</a></p> -<p id='n2597' class='pln'><a href='#n2597'>2597</a></p> -<p id='n2598' class='pln'><a href='#n2598'>2598</a></p> -<p id='n2599' class='pln'><a href='#n2599'>2599</a></p> -<p id='n2600' class='pln'><a href='#n2600'>2600</a></p> -<p id='n2601' class='pln'><a href='#n2601'>2601</a></p> -<p id='n2602' class='pln'><a href='#n2602'>2602</a></p> -<p id='n2603' class='pln'><a href='#n2603'>2603</a></p> -<p id='n2604' class='stm mis'><a href='#n2604'>2604</a></p> -<p id='n2605' class='pln'><a href='#n2605'>2605</a></p> -<p id='n2606' class='pln'><a href='#n2606'>2606</a></p> -<p id='n2607' class='stm run hide_run'><a href='#n2607'>2607</a></p> -<p id='n2608' class='pln'><a href='#n2608'>2608</a></p> -<p id='n2609' class='pln'><a href='#n2609'>2609</a></p> -<p id='n2610' class='stm run hide_run'><a href='#n2610'>2610</a></p> -<p id='n2611' class='stm run hide_run'><a href='#n2611'>2611</a></p> -<p id='n2612' class='stm run hide_run'><a href='#n2612'>2612</a></p> -<p id='n2613' class='pln'><a href='#n2613'>2613</a></p> -<p id='n2614' class='stm run hide_run'><a href='#n2614'>2614</a></p> -<p id='n2615' class='pln'><a href='#n2615'>2615</a></p> -<p id='n2616' class='stm mis'><a href='#n2616'>2616</a></p> -<p id='n2617' class='pln'><a href='#n2617'>2617</a></p> -<p id='n2618' class='stm run hide_run'><a href='#n2618'>2618</a></p> -<p id='n2619' class='pln'><a href='#n2619'>2619</a></p> -<p id='n2620' class='stm mis'><a href='#n2620'>2620</a></p> -<p id='n2621' class='pln'><a href='#n2621'>2621</a></p> -<p id='n2622' class='stm run hide_run'><a href='#n2622'>2622</a></p> -<p id='n2623' class='stm mis'><a href='#n2623'>2623</a></p> -<p id='n2624' class='stm mis'><a href='#n2624'>2624</a></p> -<p id='n2625' class='stm mis'><a href='#n2625'>2625</a></p> -<p id='n2626' class='stm mis'><a href='#n2626'>2626</a></p> -<p id='n2627' class='stm mis'><a href='#n2627'>2627</a></p> -<p id='n2628' class='pln'><a href='#n2628'>2628</a></p> -<p id='n2629' class='stm mis'><a href='#n2629'>2629</a></p> -<p id='n2630' class='pln'><a href='#n2630'>2630</a></p> -<p id='n2631' class='pln'><a href='#n2631'>2631</a></p> -<p id='n2632' class='pln'><a href='#n2632'>2632</a></p> -<p id='n2633' class='pln'><a href='#n2633'>2633</a></p> -<p id='n2634' class='pln'><a href='#n2634'>2634</a></p> -<p id='n2635' class='stm mis'><a href='#n2635'>2635</a></p> -<p id='n2636' class='stm mis'><a href='#n2636'>2636</a></p> -<p id='n2637' class='stm mis'><a href='#n2637'>2637</a></p> -<p id='n2638' class='stm mis'><a href='#n2638'>2638</a></p> -<p id='n2639' class='stm mis'><a href='#n2639'>2639</a></p> -<p id='n2640' class='stm mis'><a href='#n2640'>2640</a></p> -<p id='n2641' class='stm mis'><a href='#n2641'>2641</a></p> -<p id='n2642' class='pln'><a href='#n2642'>2642</a></p> -<p id='n2643' class='stm mis'><a href='#n2643'>2643</a></p> -<p id='n2644' class='stm mis'><a href='#n2644'>2644</a></p> -<p id='n2645' class='stm mis'><a href='#n2645'>2645</a></p> -<p id='n2646' class='stm mis'><a href='#n2646'>2646</a></p> -<p id='n2647' class='stm mis'><a href='#n2647'>2647</a></p> -<p id='n2648' class='stm mis'><a href='#n2648'>2648</a></p> -<p id='n2649' class='stm mis'><a href='#n2649'>2649</a></p> -<p id='n2650' class='stm mis'><a href='#n2650'>2650</a></p> -<p id='n2651' class='stm mis'><a href='#n2651'>2651</a></p> -<p id='n2652' class='stm mis'><a href='#n2652'>2652</a></p> -<p id='n2653' class='pln'><a href='#n2653'>2653</a></p> -<p id='n2654' class='stm mis'><a href='#n2654'>2654</a></p> -<p id='n2655' class='stm mis'><a href='#n2655'>2655</a></p> -<p id='n2656' class='stm mis'><a href='#n2656'>2656</a></p> -<p id='n2657' class='stm mis'><a href='#n2657'>2657</a></p> -<p id='n2658' class='stm mis'><a href='#n2658'>2658</a></p> -<p id='n2659' class='stm mis'><a href='#n2659'>2659</a></p> -<p id='n2660' class='stm mis'><a href='#n2660'>2660</a></p> -<p id='n2661' class='pln'><a href='#n2661'>2661</a></p> -<p id='n2662' class='stm mis'><a href='#n2662'>2662</a></p> -<p id='n2663' class='stm mis'><a href='#n2663'>2663</a></p> -<p id='n2664' class='stm mis'><a href='#n2664'>2664</a></p> -<p id='n2665' class='stm mis'><a href='#n2665'>2665</a></p> -<p id='n2666' class='stm mis'><a href='#n2666'>2666</a></p> -<p id='n2667' class='stm mis'><a href='#n2667'>2667</a></p> -<p id='n2668' class='stm mis'><a href='#n2668'>2668</a></p> -<p id='n2669' class='stm mis'><a href='#n2669'>2669</a></p> -<p id='n2670' class='pln'><a href='#n2670'>2670</a></p> -<p id='n2671' class='stm mis'><a href='#n2671'>2671</a></p> -<p id='n2672' class='stm mis'><a href='#n2672'>2672</a></p> -<p id='n2673' class='pln'><a href='#n2673'>2673</a></p> -<p id='n2674' class='stm mis'><a href='#n2674'>2674</a></p> -<p id='n2675' class='stm mis'><a href='#n2675'>2675</a></p> -<p id='n2676' class='stm mis'><a href='#n2676'>2676</a></p> -<p id='n2677' class='pln'><a href='#n2677'>2677</a></p> -<p id='n2678' class='pln'><a href='#n2678'>2678</a></p> -<p id='n2679' class='stm run hide_run'><a href='#n2679'>2679</a></p> -<p id='n2680' class='pln'><a href='#n2680'>2680</a></p> -<p id='n2681' class='pln'><a href='#n2681'>2681</a></p> -<p id='n2682' class='stm run hide_run'><a href='#n2682'>2682</a></p> -<p id='n2683' class='stm run hide_run'><a href='#n2683'>2683</a></p> -<p id='n2684' class='pln'><a href='#n2684'>2684</a></p> -<p id='n2685' class='stm run hide_run'><a href='#n2685'>2685</a></p> -<p id='n2686' class='pln'><a href='#n2686'>2686</a></p> -<p id='n2687' class='stm run hide_run'><a href='#n2687'>2687</a></p> -<p id='n2688' class='pln'><a href='#n2688'>2688</a></p> -<p id='n2689' class='stm run hide_run'><a href='#n2689'>2689</a></p> -<p id='n2690' class='stm run hide_run'><a href='#n2690'>2690</a></p> -<p id='n2691' class='stm run hide_run'><a href='#n2691'>2691</a></p> -<p id='n2692' class='stm mis'><a href='#n2692'>2692</a></p> -<p id='n2693' class='stm mis'><a href='#n2693'>2693</a></p> -<p id='n2694' class='stm run hide_run'><a href='#n2694'>2694</a></p> -<p id='n2695' class='pln'><a href='#n2695'>2695</a></p> -<p id='n2696' class='stm run hide_run'><a href='#n2696'>2696</a></p> -<p id='n2697' class='pln'><a href='#n2697'>2697</a></p> -<p id='n2698' class='stm run hide_run'><a href='#n2698'>2698</a></p> -<p id='n2699' class='pln'><a href='#n2699'>2699</a></p> -<p id='n2700' class='pln'><a href='#n2700'>2700</a></p> -<p id='n2701' class='pln'><a href='#n2701'>2701</a></p> -<p id='n2702' class='stm run hide_run'><a href='#n2702'>2702</a></p> -<p id='n2703' class='stm run hide_run'><a href='#n2703'>2703</a></p> -<p id='n2704' class='stm mis'><a href='#n2704'>2704</a></p> -<p id='n2705' class='stm mis'><a href='#n2705'>2705</a></p> -<p id='n2706' class='stm run hide_run'><a href='#n2706'>2706</a></p> -<p id='n2707' class='pln'><a href='#n2707'>2707</a></p> -<p id='n2708' class='pln'><a href='#n2708'>2708</a></p> -<p id='n2709' class='pln'><a href='#n2709'>2709</a></p> -<p id='n2710' class='stm run hide_run'><a href='#n2710'>2710</a></p> -<p id='n2711' class='stm run hide_run'><a href='#n2711'>2711</a></p> -<p id='n2712' class='stm mis'><a href='#n2712'>2712</a></p> -<p id='n2713' class='stm mis'><a href='#n2713'>2713</a></p> -<p id='n2714' class='stm run hide_run'><a href='#n2714'>2714</a></p> -<p id='n2715' class='pln'><a href='#n2715'>2715</a></p> -<p id='n2716' class='pln'><a href='#n2716'>2716</a></p> -<p id='n2717' class='pln'><a href='#n2717'>2717</a></p> -<p id='n2718' class='stm run hide_run'><a href='#n2718'>2718</a></p> -<p id='n2719' class='stm run hide_run'><a href='#n2719'>2719</a></p> -<p id='n2720' class='stm mis'><a href='#n2720'>2720</a></p> -<p id='n2721' class='stm mis'><a href='#n2721'>2721</a></p> -<p id='n2722' class='stm run hide_run'><a href='#n2722'>2722</a></p> -<p id='n2723' class='pln'><a href='#n2723'>2723</a></p> -<p id='n2724' class='stm run hide_run'><a href='#n2724'>2724</a></p> -<p id='n2725' class='pln'><a href='#n2725'>2725</a></p> -<p id='n2726' class='pln'><a href='#n2726'>2726</a></p> -<p id='n2727' class='pln'><a href='#n2727'>2727</a></p> -<p id='n2728' class='pln'><a href='#n2728'>2728</a></p> -<p id='n2729' class='pln'><a href='#n2729'>2729</a></p> -<p id='n2730' class='pln'><a href='#n2730'>2730</a></p> -<p id='n2731' class='pln'><a href='#n2731'>2731</a></p> -<p id='n2732' class='pln'><a href='#n2732'>2732</a></p> -<p id='n2733' class='pln'><a href='#n2733'>2733</a></p> -<p id='n2734' class='pln'><a href='#n2734'>2734</a></p> -<p id='n2735' class='stm run hide_run'><a href='#n2735'>2735</a></p> -<p id='n2736' class='pln'><a href='#n2736'>2736</a></p> -<p id='n2737' class='pln'><a href='#n2737'>2737</a></p> -<p id='n2738' class='stm run hide_run'><a href='#n2738'>2738</a></p> -<p id='n2739' class='pln'><a href='#n2739'>2739</a></p> -<p id='n2740' class='pln'><a href='#n2740'>2740</a></p> -<p id='n2741' class='pln'><a href='#n2741'>2741</a></p> -<p id='n2742' class='pln'><a href='#n2742'>2742</a></p> -<p id='n2743' class='pln'><a href='#n2743'>2743</a></p> -<p id='n2744' class='pln'><a href='#n2744'>2744</a></p> -<p id='n2745' class='pln'><a href='#n2745'>2745</a></p> -<p id='n2746' class='pln'><a href='#n2746'>2746</a></p> -<p id='n2747' class='stm run hide_run'><a href='#n2747'>2747</a></p> -<p id='n2748' class='stm run hide_run'><a href='#n2748'>2748</a></p> -<p id='n2749' class='pln'><a href='#n2749'>2749</a></p> -<p id='n2750' class='stm run hide_run'><a href='#n2750'>2750</a></p> -<p id='n2751' class='stm run hide_run'><a href='#n2751'>2751</a></p> -<p id='n2752' class='pln'><a href='#n2752'>2752</a></p> -<p id='n2753' class='stm run hide_run'><a href='#n2753'>2753</a></p> -<p id='n2754' class='pln'><a href='#n2754'>2754</a></p> -<p id='n2755' class='stm run hide_run'><a href='#n2755'>2755</a></p> -<p id='n2756' class='pln'><a href='#n2756'>2756</a></p> -<p id='n2757' class='stm run hide_run'><a href='#n2757'>2757</a></p> -<p id='n2758' class='pln'><a href='#n2758'>2758</a></p> -<p id='n2759' class='stm run hide_run'><a href='#n2759'>2759</a></p> -<p id='n2760' class='pln'><a href='#n2760'>2760</a></p> -<p id='n2761' class='stm run hide_run'><a href='#n2761'>2761</a></p> -<p id='n2762' class='stm run hide_run'><a href='#n2762'>2762</a></p> -<p id='n2763' class='stm run hide_run'><a href='#n2763'>2763</a></p> -<p id='n2764' class='stm mis'><a href='#n2764'>2764</a></p> -<p id='n2765' class='stm mis'><a href='#n2765'>2765</a></p> -<p id='n2766' class='pln'><a href='#n2766'>2766</a></p> -<p id='n2767' class='pln'><a href='#n2767'>2767</a></p> -<p id='n2768' class='stm run hide_run'><a href='#n2768'>2768</a></p> -<p id='n2769' class='pln'><a href='#n2769'>2769</a></p> -<p id='n2770' class='stm run hide_run'><a href='#n2770'>2770</a></p> -<p id='n2771' class='stm run hide_run'><a href='#n2771'>2771</a></p> -<p id='n2772' class='pln'><a href='#n2772'>2772</a></p> -<p id='n2773' class='stm run hide_run'><a href='#n2773'>2773</a></p> -<p id='n2774' class='pln'><a href='#n2774'>2774</a></p> -<p id='n2775' class='stm run hide_run'><a href='#n2775'>2775</a></p> -<p id='n2776' class='stm run hide_run'><a href='#n2776'>2776</a></p> -<p id='n2777' class='stm run hide_run'><a href='#n2777'>2777</a></p> -<p id='n2778' class='stm run hide_run'><a href='#n2778'>2778</a></p> -<p id='n2779' class='stm run hide_run'><a href='#n2779'>2779</a></p> -<p id='n2780' class='stm run hide_run'><a href='#n2780'>2780</a></p> -<p id='n2781' class='stm mis'><a href='#n2781'>2781</a></p> -<p id='n2782' class='stm mis'><a href='#n2782'>2782</a></p> -<p id='n2783' class='stm mis'><a href='#n2783'>2783</a></p> -<p id='n2784' class='pln'><a href='#n2784'>2784</a></p> -<p id='n2785' class='stm run hide_run'><a href='#n2785'>2785</a></p> -<p id='n2786' class='stm run hide_run'><a href='#n2786'>2786</a></p> -<p id='n2787' class='stm run hide_run'><a href='#n2787'>2787</a></p> -<p id='n2788' class='pln'><a href='#n2788'>2788</a></p> -<p id='n2789' class='stm run hide_run'><a href='#n2789'>2789</a></p> -<p id='n2790' class='stm run hide_run'><a href='#n2790'>2790</a></p> -<p id='n2791' class='stm run hide_run'><a href='#n2791'>2791</a></p> -<p id='n2792' class='stm run hide_run'><a href='#n2792'>2792</a></p> -<p id='n2793' class='stm run hide_run'><a href='#n2793'>2793</a></p> -<p id='n2794' class='stm mis'><a href='#n2794'>2794</a></p> -<p id='n2795' class='stm mis'><a href='#n2795'>2795</a></p> -<p id='n2796' class='stm mis'><a href='#n2796'>2796</a></p> -<p id='n2797' class='pln'><a href='#n2797'>2797</a></p> -<p id='n2798' class='stm run hide_run'><a href='#n2798'>2798</a></p> -<p id='n2799' class='stm run hide_run'><a href='#n2799'>2799</a></p> -<p id='n2800' class='pln'><a href='#n2800'>2800</a></p> -<p id='n2801' class='stm run hide_run'><a href='#n2801'>2801</a></p> -<p id='n2802' class='pln'><a href='#n2802'>2802</a></p> -<p id='n2803' class='pln'><a href='#n2803'>2803</a></p> -<p id='n2804' class='pln'><a href='#n2804'>2804</a></p> -<p id='n2805' class='pln'><a href='#n2805'>2805</a></p> -<p id='n2806' class='pln'><a href='#n2806'>2806</a></p> -<p id='n2807' class='pln'><a href='#n2807'>2807</a></p> -<p id='n2808' class='pln'><a href='#n2808'>2808</a></p> -<p id='n2809' class='pln'><a href='#n2809'>2809</a></p> -<p id='n2810' class='pln'><a href='#n2810'>2810</a></p> -<p id='n2811' class='pln'><a href='#n2811'>2811</a></p> -<p id='n2812' class='stm run hide_run'><a href='#n2812'>2812</a></p> -<p id='n2813' class='pln'><a href='#n2813'>2813</a></p> -<p id='n2814' class='stm run hide_run'><a href='#n2814'>2814</a></p> -<p id='n2815' class='pln'><a href='#n2815'>2815</a></p> -<p id='n2816' class='stm run hide_run'><a href='#n2816'>2816</a></p> -<p id='n2817' class='pln'><a href='#n2817'>2817</a></p> -<p id='n2818' class='stm run hide_run'><a href='#n2818'>2818</a></p> -<p id='n2819' class='pln'><a href='#n2819'>2819</a></p> -<p id='n2820' class='stm run hide_run'><a href='#n2820'>2820</a></p> -<p id='n2821' class='stm run hide_run'><a href='#n2821'>2821</a></p> -<p id='n2822' class='stm run hide_run'><a href='#n2822'>2822</a></p> -<p id='n2823' class='stm mis'><a href='#n2823'>2823</a></p> -<p id='n2824' class='stm mis'><a href='#n2824'>2824</a></p> -<p id='n2825' class='pln'><a href='#n2825'>2825</a></p> -<p id='n2826' class='stm run hide_run'><a href='#n2826'>2826</a></p> -<p id='n2827' class='stm run hide_run'><a href='#n2827'>2827</a></p> -<p id='n2828' class='pln'><a href='#n2828'>2828</a></p> -<p id='n2829' class='pln'><a href='#n2829'>2829</a></p> -<p id='n2830' class='stm run hide_run'><a href='#n2830'>2830</a></p> -<p id='n2831' class='stm run hide_run'><a href='#n2831'>2831</a></p> -<p id='n2832' class='stm mis'><a href='#n2832'>2832</a></p> -<p id='n2833' class='stm mis'><a href='#n2833'>2833</a></p> -<p id='n2834' class='stm run hide_run'><a href='#n2834'>2834</a></p> -<p id='n2835' class='stm run hide_run'><a href='#n2835'>2835</a></p> -<p id='n2836' class='pln'><a href='#n2836'>2836</a></p> -<p id='n2837' class='pln'><a href='#n2837'>2837</a></p> -<p id='n2838' class='stm run hide_run'><a href='#n2838'>2838</a></p> -<p id='n2839' class='stm run hide_run'><a href='#n2839'>2839</a></p> -<p id='n2840' class='stm mis'><a href='#n2840'>2840</a></p> -<p id='n2841' class='stm mis'><a href='#n2841'>2841</a></p> -<p id='n2842' class='stm run hide_run'><a href='#n2842'>2842</a></p> -<p id='n2843' class='pln'><a href='#n2843'>2843</a></p> -<p id='n2844' class='pln'><a href='#n2844'>2844</a></p> -<p id='n2845' class='stm run hide_run'><a href='#n2845'>2845</a></p> -<p id='n2846' class='stm run hide_run'><a href='#n2846'>2846</a></p> -<p id='n2847' class='stm run hide_run'><a href='#n2847'>2847</a></p> -<p id='n2848' class='stm run hide_run'><a href='#n2848'>2848</a></p> -<p id='n2849' class='pln'><a href='#n2849'>2849</a></p> -<p id='n2850' class='stm run hide_run'><a href='#n2850'>2850</a></p> -<p id='n2851' class='stm run hide_run'><a href='#n2851'>2851</a></p> -<p id='n2852' class='pln'><a href='#n2852'>2852</a></p> -<p id='n2853' class='stm run hide_run'><a href='#n2853'>2853</a></p> -<p id='n2854' class='pln'><a href='#n2854'>2854</a></p> -<p id='n2855' class='pln'><a href='#n2855'>2855</a></p> -<p id='n2856' class='pln'><a href='#n2856'>2856</a></p> -<p id='n2857' class='pln'><a href='#n2857'>2857</a></p> -<p id='n2858' class='pln'><a href='#n2858'>2858</a></p> -<p id='n2859' class='pln'><a href='#n2859'>2859</a></p> -<p id='n2860' class='pln'><a href='#n2860'>2860</a></p> -<p id='n2861' class='pln'><a href='#n2861'>2861</a></p> -<p id='n2862' class='pln'><a href='#n2862'>2862</a></p> -<p id='n2863' class='pln'><a href='#n2863'>2863</a></p> -<p id='n2864' class='stm run hide_run'><a href='#n2864'>2864</a></p> -<p id='n2865' class='pln'><a href='#n2865'>2865</a></p> -<p id='n2866' class='stm run hide_run'><a href='#n2866'>2866</a></p> -<p id='n2867' class='pln'><a href='#n2867'>2867</a></p> -<p id='n2868' class='pln'><a href='#n2868'>2868</a></p> -<p id='n2869' class='stm run hide_run'><a href='#n2869'>2869</a></p> -<p id='n2870' class='stm run hide_run'><a href='#n2870'>2870</a></p> -<p id='n2871' class='stm run hide_run'><a href='#n2871'>2871</a></p> -<p id='n2872' class='pln'><a href='#n2872'>2872</a></p> -<p id='n2873' class='stm run hide_run'><a href='#n2873'>2873</a></p> -<p id='n2874' class='stm mis'><a href='#n2874'>2874</a></p> -<p id='n2875' class='pln'><a href='#n2875'>2875</a></p> -<p id='n2876' class='stm run hide_run'><a href='#n2876'>2876</a></p> -<p id='n2877' class='pln'><a href='#n2877'>2877</a></p> -<p id='n2878' class='stm mis'><a href='#n2878'>2878</a></p> -<p id='n2879' class='pln'><a href='#n2879'>2879</a></p> -<p id='n2880' class='stm run hide_run'><a href='#n2880'>2880</a></p> -<p id='n2881' class='pln'><a href='#n2881'>2881</a></p> -<p id='n2882' class='stm mis'><a href='#n2882'>2882</a></p> -<p id='n2883' class='pln'><a href='#n2883'>2883</a></p> -<p id='n2884' class='stm run hide_run'><a href='#n2884'>2884</a></p> -<p id='n2885' class='pln'><a href='#n2885'>2885</a></p> -<p id='n2886' class='stm mis'><a href='#n2886'>2886</a></p> -<p id='n2887' class='stm mis'><a href='#n2887'>2887</a></p> -<p id='n2888' class='stm mis'><a href='#n2888'>2888</a></p> -<p id='n2889' class='stm mis'><a href='#n2889'>2889</a></p> -<p id='n2890' class='stm mis'><a href='#n2890'>2890</a></p> -<p id='n2891' class='pln'><a href='#n2891'>2891</a></p> -<p id='n2892' class='stm mis'><a href='#n2892'>2892</a></p> -<p id='n2893' class='stm mis'><a href='#n2893'>2893</a></p> -<p id='n2894' class='stm mis'><a href='#n2894'>2894</a></p> -<p id='n2895' class='stm mis'><a href='#n2895'>2895</a></p> -<p id='n2896' class='pln'><a href='#n2896'>2896</a></p> -<p id='n2897' class='stm run hide_run'><a href='#n2897'>2897</a></p> -<p id='n2898' class='pln'><a href='#n2898'>2898</a></p> -<p id='n2899' class='stm mis'><a href='#n2899'>2899</a></p> -<p id='n2900' class='stm mis'><a href='#n2900'>2900</a></p> -<p id='n2901' class='stm mis'><a href='#n2901'>2901</a></p> -<p id='n2902' class='stm mis'><a href='#n2902'>2902</a></p> -<p id='n2903' class='stm mis'><a href='#n2903'>2903</a></p> -<p id='n2904' class='stm mis'><a href='#n2904'>2904</a></p> -<p id='n2905' class='pln'><a href='#n2905'>2905</a></p> -<p id='n2906' class='stm mis'><a href='#n2906'>2906</a></p> -<p id='n2907' class='pln'><a href='#n2907'>2907</a></p> -<p id='n2908' class='stm run hide_run'><a href='#n2908'>2908</a></p> -<p id='n2909' class='stm mis'><a href='#n2909'>2909</a></p> -<p id='n2910' class='stm mis'><a href='#n2910'>2910</a></p> -<p id='n2911' class='stm mis'><a href='#n2911'>2911</a></p> -<p id='n2912' class='stm mis'><a href='#n2912'>2912</a></p> -<p id='n2913' class='stm mis'><a href='#n2913'>2913</a></p> -<p id='n2914' class='stm mis'><a href='#n2914'>2914</a></p> -<p id='n2915' class='stm mis'><a href='#n2915'>2915</a></p> -<p id='n2916' class='stm mis'><a href='#n2916'>2916</a></p> -<p id='n2917' class='stm mis'><a href='#n2917'>2917</a></p> -<p id='n2918' class='stm mis'><a href='#n2918'>2918</a></p> -<p id='n2919' class='pln'><a href='#n2919'>2919</a></p> -<p id='n2920' class='stm run hide_run'><a href='#n2920'>2920</a></p> -<p id='n2921' class='stm mis'><a href='#n2921'>2921</a></p> -<p id='n2922' class='stm mis'><a href='#n2922'>2922</a></p> -<p id='n2923' class='stm mis'><a href='#n2923'>2923</a></p> -<p id='n2924' class='stm mis'><a href='#n2924'>2924</a></p> -<p id='n2925' class='pln'><a href='#n2925'>2925</a></p> -<p id='n2926' class='stm mis'><a href='#n2926'>2926</a></p> -<p id='n2927' class='stm mis'><a href='#n2927'>2927</a></p> -<p id='n2928' class='pln'><a href='#n2928'>2928</a></p> -<p id='n2929' class='pln'><a href='#n2929'>2929</a></p> -<p id='n2930' class='stm mis'><a href='#n2930'>2930</a></p> -<p id='n2931' class='pln'><a href='#n2931'>2931</a></p> -<p id='n2932' class='stm mis'><a href='#n2932'>2932</a></p> -<p id='n2933' class='stm mis'><a href='#n2933'>2933</a></p> -<p id='n2934' class='stm mis'><a href='#n2934'>2934</a></p> -<p id='n2935' class='stm mis'><a href='#n2935'>2935</a></p> -<p id='n2936' class='stm mis'><a href='#n2936'>2936</a></p> -<p id='n2937' class='stm mis'><a href='#n2937'>2937</a></p> -<p id='n2938' class='stm mis'><a href='#n2938'>2938</a></p> -<p id='n2939' class='pln'><a href='#n2939'>2939</a></p> -<p id='n2940' class='pln'><a href='#n2940'>2940</a></p> -<p id='n2941' class='stm mis'><a href='#n2941'>2941</a></p> -<p id='n2942' class='stm mis'><a href='#n2942'>2942</a></p> -<p id='n2943' class='stm mis'><a href='#n2943'>2943</a></p> -<p id='n2944' class='pln'><a href='#n2944'>2944</a></p> -<p id='n2945' class='stm mis'><a href='#n2945'>2945</a></p> -<p id='n2946' class='stm mis'><a href='#n2946'>2946</a></p> -<p id='n2947' class='pln'><a href='#n2947'>2947</a></p> -<p id='n2948' class='stm mis'><a href='#n2948'>2948</a></p> -<p id='n2949' class='stm mis'><a href='#n2949'>2949</a></p> -<p id='n2950' class='stm mis'><a href='#n2950'>2950</a></p> -<p id='n2951' class='pln'><a href='#n2951'>2951</a></p> -<p id='n2952' class='stm mis'><a href='#n2952'>2952</a></p> -<p id='n2953' class='stm mis'><a href='#n2953'>2953</a></p> -<p id='n2954' class='stm mis'><a href='#n2954'>2954</a></p> -<p id='n2955' class='pln'><a href='#n2955'>2955</a></p> -<p id='n2956' class='stm mis'><a href='#n2956'>2956</a></p> -<p id='n2957' class='stm mis'><a href='#n2957'>2957</a></p> -<p id='n2958' class='stm mis'><a href='#n2958'>2958</a></p> -<p id='n2959' class='pln'><a href='#n2959'>2959</a></p> -<p id='n2960' class='stm mis'><a href='#n2960'>2960</a></p> -<p id='n2961' class='stm mis'><a href='#n2961'>2961</a></p> -<p id='n2962' class='stm mis'><a href='#n2962'>2962</a></p> -<p id='n2963' class='pln'><a href='#n2963'>2963</a></p> -<p id='n2964' class='stm mis'><a href='#n2964'>2964</a></p> -<p id='n2965' class='stm mis'><a href='#n2965'>2965</a></p> -<p id='n2966' class='stm mis'><a href='#n2966'>2966</a></p> -<p id='n2967' class='pln'><a href='#n2967'>2967</a></p> -<p id='n2968' class='stm mis'><a href='#n2968'>2968</a></p> -<p id='n2969' class='pln'><a href='#n2969'>2969</a></p> -<p id='n2970' class='pln'><a href='#n2970'>2970</a></p> -<p id='n2971' class='pln'><a href='#n2971'>2971</a></p> -<p id='n2972' class='pln'><a href='#n2972'>2972</a></p> -<p id='n2973' class='pln'><a href='#n2973'>2973</a></p> -<p id='n2974' class='pln'><a href='#n2974'>2974</a></p> -<p id='n2975' class='pln'><a href='#n2975'>2975</a></p> -<p id='n2976' class='pln'><a href='#n2976'>2976</a></p> -<p id='n2977' class='pln'><a href='#n2977'>2977</a></p> -<p id='n2978' class='pln'><a href='#n2978'>2978</a></p> -<p id='n2979' class='pln'><a href='#n2979'>2979</a></p> -<p id='n2980' class='pln'><a href='#n2980'>2980</a></p> -<p id='n2981' class='stm run hide_run'><a href='#n2981'>2981</a></p> -<p id='n2982' class='pln'><a href='#n2982'>2982</a></p> -<p id='n2983' class='pln'><a href='#n2983'>2983</a></p> -<p id='n2984' class='stm run hide_run'><a href='#n2984'>2984</a></p> -<p id='n2985' class='stm run hide_run'><a href='#n2985'>2985</a></p> -<p id='n2986' class='pln'><a href='#n2986'>2986</a></p> -<p id='n2987' class='stm run hide_run'><a href='#n2987'>2987</a></p> -<p id='n2988' class='pln'><a href='#n2988'>2988</a></p> -<p id='n2989' class='stm mis'><a href='#n2989'>2989</a></p> -<p id='n2990' class='pln'><a href='#n2990'>2990</a></p> -<p id='n2991' class='stm run hide_run'><a href='#n2991'>2991</a></p> -<p id='n2992' class='pln'><a href='#n2992'>2992</a></p> -<p id='n2993' class='stm run hide_run'><a href='#n2993'>2993</a></p> -<p id='n2994' class='pln'><a href='#n2994'>2994</a></p> -<p id='n2995' class='stm run hide_run'><a href='#n2995'>2995</a></p> -<p id='n2996' class='stm run hide_run'><a href='#n2996'>2996</a></p> -<p id='n2997' class='stm run hide_run'><a href='#n2997'>2997</a></p> -<p id='n2998' class='stm mis'><a href='#n2998'>2998</a></p> -<p id='n2999' class='stm mis'><a href='#n2999'>2999</a></p> -<p id='n3000' class='pln'><a href='#n3000'>3000</a></p> -<p id='n3001' class='stm run hide_run'><a href='#n3001'>3001</a></p> -<p id='n3002' class='stm run hide_run'><a href='#n3002'>3002</a></p> -<p id='n3003' class='stm run hide_run'><a href='#n3003'>3003</a></p> -<p id='n3004' class='stm run hide_run'><a href='#n3004'>3004</a></p> -<p id='n3005' class='pln'><a href='#n3005'>3005</a></p> -<p id='n3006' class='pln'><a href='#n3006'>3006</a></p> -<p id='n3007' class='pln'><a href='#n3007'>3007</a></p> -<p id='n3008' class='pln'><a href='#n3008'>3008</a></p> -<p id='n3009' class='pln'><a href='#n3009'>3009</a></p> -<p id='n3010' class='stm run hide_run'><a href='#n3010'>3010</a></p> -<p id='n3011' class='stm run hide_run'><a href='#n3011'>3011</a></p> -<p id='n3012' class='stm run hide_run'><a href='#n3012'>3012</a></p> -<p id='n3013' class='stm run hide_run'><a href='#n3013'>3013</a></p> -<p id='n3014' class='stm run hide_run'><a href='#n3014'>3014</a></p> -<p id='n3015' class='stm mis'><a href='#n3015'>3015</a></p> -<p id='n3016' class='stm mis'><a href='#n3016'>3016</a></p> -<p id='n3017' class='stm mis'><a href='#n3017'>3017</a></p> -<p id='n3018' class='stm run hide_run'><a href='#n3018'>3018</a></p> -<p id='n3019' class='stm run hide_run'><a href='#n3019'>3019</a></p> -<p id='n3020' class='stm run hide_run'><a href='#n3020'>3020</a></p> -<p id='n3021' class='stm run hide_run'><a href='#n3021'>3021</a></p> -<p id='n3022' class='stm mis'><a href='#n3022'>3022</a></p> -<p id='n3023' class='stm mis'><a href='#n3023'>3023</a></p> -<p id='n3024' class='stm mis'><a href='#n3024'>3024</a></p> -<p id='n3025' class='stm run hide_run'><a href='#n3025'>3025</a></p> -<p id='n3026' class='stm run hide_run'><a href='#n3026'>3026</a></p> -<p id='n3027' class='stm mis'><a href='#n3027'>3027</a></p> -<p id='n3028' class='stm mis'><a href='#n3028'>3028</a></p> -<p id='n3029' class='stm mis'><a href='#n3029'>3029</a></p> -<p id='n3030' class='pln'><a href='#n3030'>3030</a></p> -<p id='n3031' class='pln'><a href='#n3031'>3031</a></p> -<p id='n3032' class='pln'><a href='#n3032'>3032</a></p> -<p id='n3033' class='pln'><a href='#n3033'>3033</a></p> -<p id='n3034' class='pln'><a href='#n3034'>3034</a></p> -<p id='n3035' class='pln'><a href='#n3035'>3035</a></p> -<p id='n3036' class='stm mis'><a href='#n3036'>3036</a></p> -<p id='n3037' class='stm mis'><a href='#n3037'>3037</a></p> -<p id='n3038' class='stm mis'><a href='#n3038'>3038</a></p> -<p id='n3039' class='stm mis'><a href='#n3039'>3039</a></p> -<p id='n3040' class='stm mis'><a href='#n3040'>3040</a></p> -<p id='n3041' class='stm mis'><a href='#n3041'>3041</a></p> -<p id='n3042' class='pln'><a href='#n3042'>3042</a></p> -<p id='n3043' class='stm mis'><a href='#n3043'>3043</a></p> -<p id='n3044' class='stm mis'><a href='#n3044'>3044</a></p> -<p id='n3045' class='stm mis'><a href='#n3045'>3045</a></p> -<p id='n3046' class='pln'><a href='#n3046'>3046</a></p> -<p id='n3047' class='stm mis'><a href='#n3047'>3047</a></p> -<p id='n3048' class='pln'><a href='#n3048'>3048</a></p> -<p id='n3049' class='stm mis'><a href='#n3049'>3049</a></p> -<p id='n3050' class='stm mis'><a href='#n3050'>3050</a></p> -<p id='n3051' class='stm mis'><a href='#n3051'>3051</a></p> -<p id='n3052' class='pln'><a href='#n3052'>3052</a></p> -<p id='n3053' class='stm mis'><a href='#n3053'>3053</a></p> -<p id='n3054' class='stm mis'><a href='#n3054'>3054</a></p> -<p id='n3055' class='pln'><a href='#n3055'>3055</a></p> -<p id='n3056' class='pln'><a href='#n3056'>3056</a></p> -<p id='n3057' class='pln'><a href='#n3057'>3057</a></p> -<p id='n3058' class='pln'><a href='#n3058'>3058</a></p> -<p id='n3059' class='pln'><a href='#n3059'>3059</a></p> -<p id='n3060' class='stm mis'><a href='#n3060'>3060</a></p> -<p id='n3061' class='stm mis'><a href='#n3061'>3061</a></p> -<p id='n3062' class='stm mis'><a href='#n3062'>3062</a></p> -<p id='n3063' class='stm mis'><a href='#n3063'>3063</a></p> -<p id='n3064' class='stm mis'><a href='#n3064'>3064</a></p> -<p id='n3065' class='pln'><a href='#n3065'>3065</a></p> -<p id='n3066' class='pln'><a href='#n3066'>3066</a></p> -<p id='n3067' class='stm mis'><a href='#n3067'>3067</a></p> -<p id='n3068' class='pln'><a href='#n3068'>3068</a></p> -<p id='n3069' class='pln'><a href='#n3069'>3069</a></p> -<p id='n3070' class='pln'><a href='#n3070'>3070</a></p> -<p id='n3071' class='pln'><a href='#n3071'>3071</a></p> -<p id='n3072' class='pln'><a href='#n3072'>3072</a></p> -<p id='n3073' class='pln'><a href='#n3073'>3073</a></p> -<p id='n3074' class='stm mis'><a href='#n3074'>3074</a></p> -<p id='n3075' class='stm mis'><a href='#n3075'>3075</a></p> -<p id='n3076' class='stm mis'><a href='#n3076'>3076</a></p> -<p id='n3077' class='stm mis'><a href='#n3077'>3077</a></p> -<p id='n3078' class='stm mis'><a href='#n3078'>3078</a></p> -<p id='n3079' class='stm mis'><a href='#n3079'>3079</a></p> -<p id='n3080' class='stm mis'><a href='#n3080'>3080</a></p> -<p id='n3081' class='pln'><a href='#n3081'>3081</a></p> -<p id='n3082' class='stm mis'><a href='#n3082'>3082</a></p> -<p id='n3083' class='pln'><a href='#n3083'>3083</a></p> -<p id='n3084' class='stm mis'><a href='#n3084'>3084</a></p> -<p id='n3085' class='stm mis'><a href='#n3085'>3085</a></p> -<p id='n3086' class='pln'><a href='#n3086'>3086</a></p> -<p id='n3087' class='pln'><a href='#n3087'>3087</a></p> -<p id='n3088' class='pln'><a href='#n3088'>3088</a></p> -<p id='n3089' class='pln'><a href='#n3089'>3089</a></p> -<p id='n3090' class='pln'><a href='#n3090'>3090</a></p> -<p id='n3091' class='pln'><a href='#n3091'>3091</a></p> -<p id='n3092' class='stm mis'><a href='#n3092'>3092</a></p> -<p id='n3093' class='stm mis'><a href='#n3093'>3093</a></p> -<p id='n3094' class='stm mis'><a href='#n3094'>3094</a></p> -<p id='n3095' class='stm mis'><a href='#n3095'>3095</a></p> -<p id='n3096' class='stm mis'><a href='#n3096'>3096</a></p> -<p id='n3097' class='pln'><a href='#n3097'>3097</a></p> -<p id='n3098' class='stm run hide_run'><a href='#n3098'>3098</a></p> -<p id='n3099' class='pln'><a href='#n3099'>3099</a></p> -<p id='n3100' class='pln'><a href='#n3100'>3100</a></p> -<p id='n3101' class='stm run hide_run'><a href='#n3101'>3101</a></p> -<p id='n3102' class='stm run hide_run'><a href='#n3102'>3102</a></p> -<p id='n3103' class='pln'><a href='#n3103'>3103</a></p> -<p id='n3104' class='stm run hide_run'><a href='#n3104'>3104</a></p> -<p id='n3105' class='pln'><a href='#n3105'>3105</a></p> -<p id='n3106' class='stm mis'><a href='#n3106'>3106</a></p> -<p id='n3107' class='pln'><a href='#n3107'>3107</a></p> -<p id='n3108' class='stm run hide_run'><a href='#n3108'>3108</a></p> -<p id='n3109' class='stm mis'><a href='#n3109'>3109</a></p> -<p id='n3110' class='stm mis'><a href='#n3110'>3110</a></p> -<p id='n3111' class='stm mis'><a href='#n3111'>3111</a></p> -<p id='n3112' class='stm mis'><a href='#n3112'>3112</a></p> -<p id='n3113' class='stm mis'><a href='#n3113'>3113</a></p> -<p id='n3114' class='stm mis'><a href='#n3114'>3114</a></p> -<p id='n3115' class='stm mis'><a href='#n3115'>3115</a></p> -<p id='n3116' class='pln'><a href='#n3116'>3116</a></p> -<p id='n3117' class='stm mis'><a href='#n3117'>3117</a></p> -<p id='n3118' class='pln'><a href='#n3118'>3118</a></p> -<p id='n3119' class='stm mis'><a href='#n3119'>3119</a></p> -<p id='n3120' class='stm mis'><a href='#n3120'>3120</a></p> -<p id='n3121' class='stm mis'><a href='#n3121'>3121</a></p> -<p id='n3122' class='stm mis'><a href='#n3122'>3122</a></p> -<p id='n3123' class='stm mis'><a href='#n3123'>3123</a></p> -<p id='n3124' class='stm mis'><a href='#n3124'>3124</a></p> -<p id='n3125' class='stm mis'><a href='#n3125'>3125</a></p> -<p id='n3126' class='stm mis'><a href='#n3126'>3126</a></p> -<p id='n3127' class='stm mis'><a href='#n3127'>3127</a></p> -<p id='n3128' class='stm mis'><a href='#n3128'>3128</a></p> -<p id='n3129' class='stm mis'><a href='#n3129'>3129</a></p> -<p id='n3130' class='pln'><a href='#n3130'>3130</a></p> -<p id='n3131' class='stm mis'><a href='#n3131'>3131</a></p> -<p id='n3132' class='stm mis'><a href='#n3132'>3132</a></p> -<p id='n3133' class='stm mis'><a href='#n3133'>3133</a></p> -<p id='n3134' class='stm mis'><a href='#n3134'>3134</a></p> -<p id='n3135' class='stm mis'><a href='#n3135'>3135</a></p> -<p id='n3136' class='pln'><a href='#n3136'>3136</a></p> -<p id='n3137' class='stm mis'><a href='#n3137'>3137</a></p> -<p id='n3138' class='stm mis'><a href='#n3138'>3138</a></p> -<p id='n3139' class='stm mis'><a href='#n3139'>3139</a></p> -<p id='n3140' class='stm mis'><a href='#n3140'>3140</a></p> -<p id='n3141' class='stm mis'><a href='#n3141'>3141</a></p> -<p id='n3142' class='pln'><a href='#n3142'>3142</a></p> -<p id='n3143' class='stm mis'><a href='#n3143'>3143</a></p> -<p id='n3144' class='stm mis'><a href='#n3144'>3144</a></p> -<p id='n3145' class='stm mis'><a href='#n3145'>3145</a></p> -<p id='n3146' class='stm mis'><a href='#n3146'>3146</a></p> -<p id='n3147' class='stm mis'><a href='#n3147'>3147</a></p> -<p id='n3148' class='stm mis'><a href='#n3148'>3148</a></p> -<p id='n3149' class='stm mis'><a href='#n3149'>3149</a></p> -<p id='n3150' class='stm mis'><a href='#n3150'>3150</a></p> -<p id='n3151' class='pln'><a href='#n3151'>3151</a></p> -<p id='n3152' class='stm mis'><a href='#n3152'>3152</a></p> -<p id='n3153' class='stm mis'><a href='#n3153'>3153</a></p> -<p id='n3154' class='pln'><a href='#n3154'>3154</a></p> -<p id='n3155' class='pln'><a href='#n3155'>3155</a></p> -<p id='n3156' class='stm mis'><a href='#n3156'>3156</a></p> -<p id='n3157' class='pln'><a href='#n3157'>3157</a></p> -<p id='n3158' class='stm mis'><a href='#n3158'>3158</a></p> -<p id='n3159' class='stm mis'><a href='#n3159'>3159</a></p> -<p id='n3160' class='stm mis'><a href='#n3160'>3160</a></p> -<p id='n3161' class='stm mis'><a href='#n3161'>3161</a></p> -<p id='n3162' class='stm mis'><a href='#n3162'>3162</a></p> -<p id='n3163' class='stm mis'><a href='#n3163'>3163</a></p> -<p id='n3164' class='stm mis'><a href='#n3164'>3164</a></p> -<p id='n3165' class='pln'><a href='#n3165'>3165</a></p> -<p id='n3166' class='stm mis'><a href='#n3166'>3166</a></p> -<p id='n3167' class='pln'><a href='#n3167'>3167</a></p> -<p id='n3168' class='pln'><a href='#n3168'>3168</a></p> -<p id='n3169' class='pln'><a href='#n3169'>3169</a></p> -<p id='n3170' class='pln'><a href='#n3170'>3170</a></p> -<p id='n3171' class='pln'><a href='#n3171'>3171</a></p> -<p id='n3172' class='pln'><a href='#n3172'>3172</a></p> -<p id='n3173' class='pln'><a href='#n3173'>3173</a></p> -<p id='n3174' class='pln'><a href='#n3174'>3174</a></p> -<p id='n3175' class='pln'><a href='#n3175'>3175</a></p> -<p id='n3176' class='stm mis'><a href='#n3176'>3176</a></p> -<p id='n3177' class='pln'><a href='#n3177'>3177</a></p> -<p id='n3178' class='pln'><a href='#n3178'>3178</a></p> -<p id='n3179' class='stm run hide_run'><a href='#n3179'>3179</a></p> -<p id='n3180' class='stm run hide_run'><a href='#n3180'>3180</a></p> -<p id='n3181' class='pln'><a href='#n3181'>3181</a></p> -<p id='n3182' class='stm run hide_run'><a href='#n3182'>3182</a></p> -<p id='n3183' class='pln'><a href='#n3183'>3183</a></p> -<p id='n3184' class='stm run hide_run'><a href='#n3184'>3184</a></p> -<p id='n3185' class='pln'><a href='#n3185'>3185</a></p> -<p id='n3186' class='stm run hide_run'><a href='#n3186'>3186</a></p> -<p id='n3187' class='pln'><a href='#n3187'>3187</a></p> -<p id='n3188' class='stm run hide_run'><a href='#n3188'>3188</a></p> -<p id='n3189' class='pln'><a href='#n3189'>3189</a></p> -<p id='n3190' class='stm run hide_run'><a href='#n3190'>3190</a></p> -<p id='n3191' class='stm run hide_run'><a href='#n3191'>3191</a></p> -<p id='n3192' class='stm run hide_run'><a href='#n3192'>3192</a></p> -<p id='n3193' class='stm run hide_run'><a href='#n3193'>3193</a></p> -<p id='n3194' class='pln'><a href='#n3194'>3194</a></p> -<p id='n3195' class='stm run hide_run'><a href='#n3195'>3195</a></p> -<p id='n3196' class='pln'><a href='#n3196'>3196</a></p> -<p id='n3197' class='stm run hide_run'><a href='#n3197'>3197</a></p> -<p id='n3198' class='stm run hide_run'><a href='#n3198'>3198</a></p> -<p id='n3199' class='stm run hide_run'><a href='#n3199'>3199</a></p> -<p id='n3200' class='stm run hide_run'><a href='#n3200'>3200</a></p> -<p id='n3201' class='stm run hide_run'><a href='#n3201'>3201</a></p> -<p id='n3202' class='stm run hide_run'><a href='#n3202'>3202</a></p> -<p id='n3203' class='stm run hide_run'><a href='#n3203'>3203</a></p> -<p id='n3204' class='stm run hide_run'><a href='#n3204'>3204</a></p> -<p id='n3205' class='stm run hide_run'><a href='#n3205'>3205</a></p> -<p id='n3206' class='pln'><a href='#n3206'>3206</a></p> -<p id='n3207' class='stm run hide_run'><a href='#n3207'>3207</a></p> -<p id='n3208' class='pln'><a href='#n3208'>3208</a></p> -<p id='n3209' class='stm run hide_run'><a href='#n3209'>3209</a></p> -<p id='n3210' class='stm run hide_run'><a href='#n3210'>3210</a></p> -<p id='n3211' class='stm run hide_run'><a href='#n3211'>3211</a></p> -<p id='n3212' class='stm run hide_run'><a href='#n3212'>3212</a></p> -<p id='n3213' class='stm run hide_run'><a href='#n3213'>3213</a></p> -<p id='n3214' class='stm run hide_run'><a href='#n3214'>3214</a></p> -<p id='n3215' class='stm run hide_run'><a href='#n3215'>3215</a></p> -<p id='n3216' class='stm run hide_run'><a href='#n3216'>3216</a></p> -<p id='n3217' class='pln'><a href='#n3217'>3217</a></p> -<p id='n3218' class='stm run hide_run'><a href='#n3218'>3218</a></p> -<p id='n3219' class='stm run hide_run'><a href='#n3219'>3219</a></p> -<p id='n3220' class='stm run hide_run'><a href='#n3220'>3220</a></p> -<p id='n3221' class='stm mis'><a href='#n3221'>3221</a></p> -<p id='n3222' class='stm mis'><a href='#n3222'>3222</a></p> -<p id='n3223' class='stm run hide_run'><a href='#n3223'>3223</a></p> -<p id='n3224' class='pln'><a href='#n3224'>3224</a></p> -<p id='n3225' class='stm run hide_run'><a href='#n3225'>3225</a></p> -<p id='n3226' class='pln'><a href='#n3226'>3226</a></p> -<p id='n3227' class='stm run hide_run'><a href='#n3227'>3227</a></p> -<p id='n3228' class='stm run hide_run'><a href='#n3228'>3228</a></p> -<p id='n3229' class='stm run hide_run'><a href='#n3229'>3229</a></p> -<p id='n3230' class='stm run hide_run'><a href='#n3230'>3230</a></p> -<p id='n3231' class='stm mis'><a href='#n3231'>3231</a></p> -<p id='n3232' class='stm mis'><a href='#n3232'>3232</a></p> -<p id='n3233' class='stm mis'><a href='#n3233'>3233</a></p> -<p id='n3234' class='pln'><a href='#n3234'>3234</a></p> -<p id='n3235' class='stm run hide_run'><a href='#n3235'>3235</a></p> -<p id='n3236' class='stm run hide_run'><a href='#n3236'>3236</a></p> -<p id='n3237' class='stm run hide_run'><a href='#n3237'>3237</a></p> -<p id='n3238' class='stm run hide_run'><a href='#n3238'>3238</a></p> -<p id='n3239' class='pln'><a href='#n3239'>3239</a></p> -<p id='n3240' class='stm run hide_run'><a href='#n3240'>3240</a></p> -<p id='n3241' class='stm run hide_run'><a href='#n3241'>3241</a></p> -<p id='n3242' class='pln'><a href='#n3242'>3242</a></p> -<p id='n3243' class='stm run hide_run'><a href='#n3243'>3243</a></p> -<p id='n3244' class='stm run hide_run'><a href='#n3244'>3244</a></p> -<p id='n3245' class='pln'><a href='#n3245'>3245</a></p> -<p id='n3246' class='stm run hide_run'><a href='#n3246'>3246</a></p> -<p id='n3247' class='stm run hide_run'><a href='#n3247'>3247</a></p> -<p id='n3248' class='stm mis'><a href='#n3248'>3248</a></p> -<p id='n3249' class='pln'><a href='#n3249'>3249</a></p> -<p id='n3250' class='stm run hide_run'><a href='#n3250'>3250</a></p> -<p id='n3251' class='stm run hide_run'><a href='#n3251'>3251</a></p> -<p id='n3252' class='stm mis'><a href='#n3252'>3252</a></p> -<p id='n3253' class='stm mis'><a href='#n3253'>3253</a></p> -<p id='n3254' class='stm mis'><a href='#n3254'>3254</a></p> -<p id='n3255' class='pln'><a href='#n3255'>3255</a></p> -<p id='n3256' class='stm mis'><a href='#n3256'>3256</a></p> -<p id='n3257' class='stm mis'><a href='#n3257'>3257</a></p> -<p id='n3258' class='pln'><a href='#n3258'>3258</a></p> -<p id='n3259' class='pln'><a href='#n3259'>3259</a></p> -<p id='n3260' class='stm run hide_run'><a href='#n3260'>3260</a></p> -<p id='n3261' class='stm run hide_run'><a href='#n3261'>3261</a></p> -<p id='n3262' class='stm mis'><a href='#n3262'>3262</a></p> -<p id='n3263' class='stm mis'><a href='#n3263'>3263</a></p> -<p id='n3264' class='stm mis'><a href='#n3264'>3264</a></p> -<p id='n3265' class='pln'><a href='#n3265'>3265</a></p> -<p id='n3266' class='stm run hide_run'><a href='#n3266'>3266</a></p> -<p id='n3267' class='stm run hide_run'><a href='#n3267'>3267</a></p> -<p id='n3268' class='stm run hide_run'><a href='#n3268'>3268</a></p> -<p id='n3269' class='pln'><a href='#n3269'>3269</a></p> -<p id='n3270' class='pln'><a href='#n3270'>3270</a></p> -<p id='n3271' class='pln'><a href='#n3271'>3271</a></p> -<p id='n3272' class='stm run hide_run'><a href='#n3272'>3272</a></p> -<p id='n3273' class='pln'><a href='#n3273'>3273</a></p> -<p id='n3274' class='stm run hide_run'><a href='#n3274'>3274</a></p> -<p id='n3275' class='stm run hide_run'><a href='#n3275'>3275</a></p> -<p id='n3276' class='pln'><a href='#n3276'>3276</a></p> -<p id='n3277' class='stm run hide_run'><a href='#n3277'>3277</a></p> -<p id='n3278' class='pln'><a href='#n3278'>3278</a></p> -<p id='n3279' class='pln'><a href='#n3279'>3279</a></p> -<p id='n3280' class='pln'><a href='#n3280'>3280</a></p> -<p id='n3281' class='pln'><a href='#n3281'>3281</a></p> -<p id='n3282' class='pln'><a href='#n3282'>3282</a></p> -<p id='n3283' class='pln'><a href='#n3283'>3283</a></p> -<p id='n3284' class='pln'><a href='#n3284'>3284</a></p> -<p id='n3285' class='stm run hide_run'><a href='#n3285'>3285</a></p> -<p id='n3286' class='pln'><a href='#n3286'>3286</a></p> -<p id='n3287' class='stm run hide_run'><a href='#n3287'>3287</a></p> -<p id='n3288' class='pln'><a href='#n3288'>3288</a></p> -<p id='n3289' class='pln'><a href='#n3289'>3289</a></p> -<p id='n3290' class='stm run hide_run'><a href='#n3290'>3290</a></p> -<p id='n3291' class='pln'><a href='#n3291'>3291</a></p> -<p id='n3292' class='pln'><a href='#n3292'>3292</a></p> -<p id='n3293' class='stm run hide_run'><a href='#n3293'>3293</a></p> -<p id='n3294' class='stm run hide_run'><a href='#n3294'>3294</a></p> -<p id='n3295' class='stm run hide_run'><a href='#n3295'>3295</a></p> -<p id='n3296' class='stm run hide_run'><a href='#n3296'>3296</a></p> -<p id='n3297' class='stm run hide_run'><a href='#n3297'>3297</a></p> -<p id='n3298' class='pln'><a href='#n3298'>3298</a></p> -<p id='n3299' class='stm run hide_run'><a href='#n3299'>3299</a></p> -<p id='n3300' class='pln'><a href='#n3300'>3300</a></p> -<p id='n3301' class='stm run hide_run'><a href='#n3301'>3301</a></p> -<p id='n3302' class='pln'><a href='#n3302'>3302</a></p> -<p id='n3303' class='stm run hide_run'><a href='#n3303'>3303</a></p> -<p id='n3304' class='pln'><a href='#n3304'>3304</a></p> -<p id='n3305' class='stm mis'><a href='#n3305'>3305</a></p> -<p id='n3306' class='pln'><a href='#n3306'>3306</a></p> -<p id='n3307' class='stm run hide_run'><a href='#n3307'>3307</a></p> -<p id='n3308' class='stm run hide_run'><a href='#n3308'>3308</a></p> -<p id='n3309' class='stm run hide_run'><a href='#n3309'>3309</a></p> -<p id='n3310' class='stm mis'><a href='#n3310'>3310</a></p> -<p id='n3311' class='stm mis'><a href='#n3311'>3311</a></p> -<p id='n3312' class='stm run hide_run'><a href='#n3312'>3312</a></p> -<p id='n3313' class='pln'><a href='#n3313'>3313</a></p> -<p id='n3314' class='stm run hide_run'><a href='#n3314'>3314</a></p> -<p id='n3315' class='pln'><a href='#n3315'>3315</a></p> -<p id='n3316' class='pln'><a href='#n3316'>3316</a></p> -<p id='n3317' class='stm run hide_run'><a href='#n3317'>3317</a></p> -<p id='n3318' class='stm run hide_run'><a href='#n3318'>3318</a></p> -<p id='n3319' class='stm run hide_run'><a href='#n3319'>3319</a></p> -<p id='n3320' class='stm mis'><a href='#n3320'>3320</a></p> -<p id='n3321' class='stm mis'><a href='#n3321'>3321</a></p> -<p id='n3322' class='stm mis'><a href='#n3322'>3322</a></p> -<p id='n3323' class='pln'><a href='#n3323'>3323</a></p> -<p id='n3324' class='stm run hide_run'><a href='#n3324'>3324</a></p> -<p id='n3325' class='stm run hide_run'><a href='#n3325'>3325</a></p> -<p id='n3326' class='stm mis'><a href='#n3326'>3326</a></p> -<p id='n3327' class='stm mis'><a href='#n3327'>3327</a></p> -<p id='n3328' class='stm run hide_run'><a href='#n3328'>3328</a></p> -<p id='n3329' class='pln'><a href='#n3329'>3329</a></p> -<p id='n3330' class='stm run hide_run'><a href='#n3330'>3330</a></p> -<p id='n3331' class='stm run hide_run'><a href='#n3331'>3331</a></p> -<p id='n3332' class='stm mis'><a href='#n3332'>3332</a></p> -<p id='n3333' class='stm mis'><a href='#n3333'>3333</a></p> -<p id='n3334' class='stm run hide_run'><a href='#n3334'>3334</a></p> -<p id='n3335' class='pln'><a href='#n3335'>3335</a></p> -<p id='n3336' class='stm run hide_run'><a href='#n3336'>3336</a></p> -<p id='n3337' class='stm run hide_run'><a href='#n3337'>3337</a></p> -<p id='n3338' class='stm mis'><a href='#n3338'>3338</a></p> -<p id='n3339' class='stm mis'><a href='#n3339'>3339</a></p> -<p id='n3340' class='stm run hide_run'><a href='#n3340'>3340</a></p> -<p id='n3341' class='pln'><a href='#n3341'>3341</a></p> -<p id='n3342' class='stm run hide_run'><a href='#n3342'>3342</a></p> -<p id='n3343' class='pln'><a href='#n3343'>3343</a></p> -<p id='n3344' class='pln'><a href='#n3344'>3344</a></p> -<p id='n3345' class='pln'><a href='#n3345'>3345</a></p> -<p id='n3346' class='pln'><a href='#n3346'>3346</a></p> -<p id='n3347' class='pln'><a href='#n3347'>3347</a></p> -<p id='n3348' class='pln'><a href='#n3348'>3348</a></p> -<p id='n3349' class='pln'><a href='#n3349'>3349</a></p> -<p id='n3350' class='pln'><a href='#n3350'>3350</a></p> -<p id='n3351' class='pln'><a href='#n3351'>3351</a></p> -<p id='n3352' class='pln'><a href='#n3352'>3352</a></p> -<p id='n3353' class='pln'><a href='#n3353'>3353</a></p> -<p id='n3354' class='stm run hide_run'><a href='#n3354'>3354</a></p> -<p id='n3355' class='pln'><a href='#n3355'>3355</a></p> -<p id='n3356' class='pln'><a href='#n3356'>3356</a></p> -<p id='n3357' class='stm run hide_run'><a href='#n3357'>3357</a></p> -<p id='n3358' class='stm run hide_run'><a href='#n3358'>3358</a></p> -<p id='n3359' class='pln'><a href='#n3359'>3359</a></p> -<p id='n3360' class='stm run hide_run'><a href='#n3360'>3360</a></p> -<p id='n3361' class='stm run hide_run'><a href='#n3361'>3361</a></p> -<p id='n3362' class='pln'><a href='#n3362'>3362</a></p> -<p id='n3363' class='stm run hide_run'><a href='#n3363'>3363</a></p> -<p id='n3364' class='pln'><a href='#n3364'>3364</a></p> -<p id='n3365' class='stm run hide_run'><a href='#n3365'>3365</a></p> -<p id='n3366' class='pln'><a href='#n3366'>3366</a></p> -<p id='n3367' class='stm run hide_run'><a href='#n3367'>3367</a></p> -<p id='n3368' class='pln'><a href='#n3368'>3368</a></p> -<p id='n3369' class='stm run hide_run'><a href='#n3369'>3369</a></p> -<p id='n3370' class='pln'><a href='#n3370'>3370</a></p> -<p id='n3371' class='stm run hide_run'><a href='#n3371'>3371</a></p> -<p id='n3372' class='pln'><a href='#n3372'>3372</a></p> -<p id='n3373' class='stm run hide_run'><a href='#n3373'>3373</a></p> -<p id='n3374' class='pln'><a href='#n3374'>3374</a></p> -<p id='n3375' class='stm run hide_run'><a href='#n3375'>3375</a></p> -<p id='n3376' class='pln'><a href='#n3376'>3376</a></p> -<p id='n3377' class='stm run hide_run'><a href='#n3377'>3377</a></p> -<p id='n3378' class='pln'><a href='#n3378'>3378</a></p> -<p id='n3379' class='stm run hide_run'><a href='#n3379'>3379</a></p> -<p id='n3380' class='pln'><a href='#n3380'>3380</a></p> -<p id='n3381' class='stm run hide_run'><a href='#n3381'>3381</a></p> -<p id='n3382' class='pln'><a href='#n3382'>3382</a></p> -<p id='n3383' class='stm run hide_run'><a href='#n3383'>3383</a></p> -<p id='n3384' class='pln'><a href='#n3384'>3384</a></p> -<p id='n3385' class='stm run hide_run'><a href='#n3385'>3385</a></p> -<p id='n3386' class='stm run hide_run'><a href='#n3386'>3386</a></p> -<p id='n3387' class='stm mis'><a href='#n3387'>3387</a></p> -<p id='n3388' class='stm mis'><a href='#n3388'>3388</a></p> -<p id='n3389' class='pln'><a href='#n3389'>3389</a></p> -<p id='n3390' class='stm run hide_run'><a href='#n3390'>3390</a></p> -<p id='n3391' class='stm run hide_run'><a href='#n3391'>3391</a></p> -<p id='n3392' class='pln'><a href='#n3392'>3392</a></p> -<p id='n3393' class='stm run hide_run'><a href='#n3393'>3393</a></p> -<p id='n3394' class='pln'><a href='#n3394'>3394</a></p> -<p id='n3395' class='pln'><a href='#n3395'>3395</a></p> -<p id='n3396' class='stm run hide_run'><a href='#n3396'>3396</a></p> -<p id='n3397' class='stm run hide_run'><a href='#n3397'>3397</a></p> -<p id='n3398' class='stm run hide_run'><a href='#n3398'>3398</a></p> -<p id='n3399' class='stm run hide_run'><a href='#n3399'>3399</a></p> -<p id='n3400' class='stm mis'><a href='#n3400'>3400</a></p> -<p id='n3401' class='stm mis'><a href='#n3401'>3401</a></p> -<p id='n3402' class='stm mis'><a href='#n3402'>3402</a></p> -<p id='n3403' class='pln'><a href='#n3403'>3403</a></p> -<p id='n3404' class='pln'><a href='#n3404'>3404</a></p> -<p id='n3405' class='stm run hide_run'><a href='#n3405'>3405</a></p> -<p id='n3406' class='stm run hide_run'><a href='#n3406'>3406</a></p> -<p id='n3407' class='stm run hide_run'><a href='#n3407'>3407</a></p> -<p id='n3408' class='stm run hide_run'><a href='#n3408'>3408</a></p> -<p id='n3409' class='stm run hide_run'><a href='#n3409'>3409</a></p> -<p id='n3410' class='pln'><a href='#n3410'>3410</a></p> -<p id='n3411' class='stm run hide_run'><a href='#n3411'>3411</a></p> -<p id='n3412' class='stm run hide_run'><a href='#n3412'>3412</a></p> -<p id='n3413' class='stm run hide_run'><a href='#n3413'>3413</a></p> -<p id='n3414' class='pln'><a href='#n3414'>3414</a></p> -<p id='n3415' class='pln'><a href='#n3415'>3415</a></p> -<p id='n3416' class='stm run hide_run'><a href='#n3416'>3416</a></p> -<p id='n3417' class='stm run hide_run'><a href='#n3417'>3417</a></p> -<p id='n3418' class='stm run hide_run'><a href='#n3418'>3418</a></p> -<p id='n3419' class='stm run hide_run'><a href='#n3419'>3419</a></p> -<p id='n3420' class='stm run hide_run'><a href='#n3420'>3420</a></p> -<p id='n3421' class='stm run hide_run'><a href='#n3421'>3421</a></p> -<p id='n3422' class='pln'><a href='#n3422'>3422</a></p> -<p id='n3423' class='pln'><a href='#n3423'>3423</a></p> -<p id='n3424' class='pln'><a href='#n3424'>3424</a></p> -<p id='n3425' class='stm run hide_run'><a href='#n3425'>3425</a></p> -<p id='n3426' class='stm run hide_run'><a href='#n3426'>3426</a></p> -<p id='n3427' class='stm run hide_run'><a href='#n3427'>3427</a></p> -<p id='n3428' class='stm run hide_run'><a href='#n3428'>3428</a></p> -<p id='n3429' class='stm run hide_run'><a href='#n3429'>3429</a></p> -<p id='n3430' class='stm run hide_run'><a href='#n3430'>3430</a></p> -<p id='n3431' class='pln'><a href='#n3431'>3431</a></p> -<p id='n3432' class='pln'><a href='#n3432'>3432</a></p> -<p id='n3433' class='stm run hide_run'><a href='#n3433'>3433</a></p> -<p id='n3434' class='stm run hide_run'><a href='#n3434'>3434</a></p> -<p id='n3435' class='stm run hide_run'><a href='#n3435'>3435</a></p> -<p id='n3436' class='stm mis'><a href='#n3436'>3436</a></p> -<p id='n3437' class='pln'><a href='#n3437'>3437</a></p> -<p id='n3438' class='stm run hide_run'><a href='#n3438'>3438</a></p> -<p id='n3439' class='stm run hide_run'><a href='#n3439'>3439</a></p> -<p id='n3440' class='stm run hide_run'><a href='#n3440'>3440</a></p> -<p id='n3441' class='stm run hide_run'><a href='#n3441'>3441</a></p> -<p id='n3442' class='stm mis'><a href='#n3442'>3442</a></p> -<p id='n3443' class='stm mis'><a href='#n3443'>3443</a></p> -<p id='n3444' class='stm mis'><a href='#n3444'>3444</a></p> -<p id='n3445' class='stm run hide_run'><a href='#n3445'>3445</a></p> -<p id='n3446' class='pln'><a href='#n3446'>3446</a></p> -<p id='n3447' class='pln'><a href='#n3447'>3447</a></p> -<p id='n3448' class='pln'><a href='#n3448'>3448</a></p> -<p id='n3449' class='pln'><a href='#n3449'>3449</a></p> -<p id='n3450' class='stm run hide_run'><a href='#n3450'>3450</a></p> -<p id='n3451' class='stm run hide_run'><a href='#n3451'>3451</a></p> -<p id='n3452' class='stm run hide_run'><a href='#n3452'>3452</a></p> -<p id='n3453' class='stm mis'><a href='#n3453'>3453</a></p> -<p id='n3454' class='pln'><a href='#n3454'>3454</a></p> -<p id='n3455' class='pln'><a href='#n3455'>3455</a></p> -<p id='n3456' class='stm run hide_run'><a href='#n3456'>3456</a></p> -<p id='n3457' class='pln'><a href='#n3457'>3457</a></p> -<p id='n3458' class='pln'><a href='#n3458'>3458</a></p> -<p id='n3459' class='stm run hide_run'><a href='#n3459'>3459</a></p> -<p id='n3460' class='pln'><a href='#n3460'>3460</a></p> -<p id='n3461' class='stm run hide_run'><a href='#n3461'>3461</a></p> -<p id='n3462' class='pln'><a href='#n3462'>3462</a></p> -<p id='n3463' class='stm run hide_run'><a href='#n3463'>3463</a></p> -<p id='n3464' class='stm run hide_run'><a href='#n3464'>3464</a></p> -<p id='n3465' class='stm mis'><a href='#n3465'>3465</a></p> -<p id='n3466' class='stm mis'><a href='#n3466'>3466</a></p> -<p id='n3467' class='pln'><a href='#n3467'>3467</a></p> -<p id='n3468' class='pln'><a href='#n3468'>3468</a></p> -<p id='n3469' class='stm run hide_run'><a href='#n3469'>3469</a></p> -<p id='n3470' class='pln'><a href='#n3470'>3470</a></p> -<p id='n3471' class='pln'><a href='#n3471'>3471</a></p> -<p id='n3472' class='pln'><a href='#n3472'>3472</a></p> -<p id='n3473' class='pln'><a href='#n3473'>3473</a></p> -<p id='n3474' class='pln'><a href='#n3474'>3474</a></p> -<p id='n3475' class='pln'><a href='#n3475'>3475</a></p> -<p id='n3476' class='pln'><a href='#n3476'>3476</a></p> -<p id='n3477' class='pln'><a href='#n3477'>3477</a></p> -<p id='n3478' class='stm run hide_run'><a href='#n3478'>3478</a></p> -<p id='n3479' class='stm run hide_run'><a href='#n3479'>3479</a></p> -<p id='n3480' class='stm run hide_run'><a href='#n3480'>3480</a></p> -<p id='n3481' class='pln'><a href='#n3481'>3481</a></p> -<p id='n3482' class='stm run hide_run'><a href='#n3482'>3482</a></p> -<p id='n3483' class='stm run hide_run'><a href='#n3483'>3483</a></p> -<p id='n3484' class='stm run hide_run'><a href='#n3484'>3484</a></p> -<p id='n3485' class='stm mis'><a href='#n3485'>3485</a></p> -<p id='n3486' class='stm mis'><a href='#n3486'>3486</a></p> -<p id='n3487' class='pln'><a href='#n3487'>3487</a></p> -<p id='n3488' class='stm run hide_run'><a href='#n3488'>3488</a></p> -<p id='n3489' class='stm run hide_run'><a href='#n3489'>3489</a></p> -<p id='n3490' class='stm run hide_run'><a href='#n3490'>3490</a></p> -<p id='n3491' class='pln'><a href='#n3491'>3491</a></p> -<p id='n3492' class='stm run hide_run'><a href='#n3492'>3492</a></p> -<p id='n3493' class='pln'><a href='#n3493'>3493</a></p> -<p id='n3494' class='stm run hide_run'><a href='#n3494'>3494</a></p> -<p id='n3495' class='stm run hide_run'><a href='#n3495'>3495</a></p> -<p id='n3496' class='stm run hide_run'><a href='#n3496'>3496</a></p> -<p id='n3497' class='stm run hide_run'><a href='#n3497'>3497</a></p> -<p id='n3498' class='stm run hide_run'><a href='#n3498'>3498</a></p> -<p id='n3499' class='pln'><a href='#n3499'>3499</a></p> -<p id='n3500' class='stm run hide_run'><a href='#n3500'>3500</a></p> -<p id='n3501' class='pln'><a href='#n3501'>3501</a></p> -<p id='n3502' class='stm run hide_run'><a href='#n3502'>3502</a></p> -<p id='n3503' class='stm run hide_run'><a href='#n3503'>3503</a></p> -<p id='n3504' class='stm run hide_run'><a href='#n3504'>3504</a></p> -<p id='n3505' class='pln'><a href='#n3505'>3505</a></p> -<p id='n3506' class='pln'><a href='#n3506'>3506</a></p> -<p id='n3507' class='pln'><a href='#n3507'>3507</a></p> -<p id='n3508' class='pln'><a href='#n3508'>3508</a></p> -<p id='n3509' class='pln'><a href='#n3509'>3509</a></p> -<p id='n3510' class='pln'><a href='#n3510'>3510</a></p> -<p id='n3511' class='pln'><a href='#n3511'>3511</a></p> -<p id='n3512' class='stm run hide_run'><a href='#n3512'>3512</a></p> -<p id='n3513' class='pln'><a href='#n3513'>3513</a></p> -<p id='n3514' class='stm run hide_run'><a href='#n3514'>3514</a></p> -<p id='n3515' class='pln'><a href='#n3515'>3515</a></p> -<p id='n3516' class='pln'><a href='#n3516'>3516</a></p> -<p id='n3517' class='pln'><a href='#n3517'>3517</a></p> -<p id='n3518' class='pln'><a href='#n3518'>3518</a></p> -<p id='n3519' class='pln'><a href='#n3519'>3519</a></p> -<p id='n3520' class='stm run hide_run'><a href='#n3520'>3520</a></p> -<p id='n3521' class='pln'><a href='#n3521'>3521</a></p> -<p id='n3522' class='stm run hide_run'><a href='#n3522'>3522</a></p> -<p id='n3523' class='stm run hide_run'><a href='#n3523'>3523</a></p> -<p id='n3524' class='pln'><a href='#n3524'>3524</a></p> -<p id='n3525' class='stm run hide_run'><a href='#n3525'>3525</a></p> -<p id='n3526' class='pln'><a href='#n3526'>3526</a></p> -<p id='n3527' class='stm run hide_run'><a href='#n3527'>3527</a></p> -<p id='n3528' class='pln'><a href='#n3528'>3528</a></p> -<p id='n3529' class='stm run hide_run'><a href='#n3529'>3529</a></p> -<p id='n3530' class='pln'><a href='#n3530'>3530</a></p> -<p id='n3531' class='stm mis'><a href='#n3531'>3531</a></p> -<p id='n3532' class='pln'><a href='#n3532'>3532</a></p> -<p id='n3533' class='pln'><a href='#n3533'>3533</a></p> -<p id='n3534' class='pln'><a href='#n3534'>3534</a></p> -<p id='n3535' class='stm run hide_run'><a href='#n3535'>3535</a></p> -<p id='n3536' class='stm run hide_run'><a href='#n3536'>3536</a></p> -<p id='n3537' class='stm run hide_run'><a href='#n3537'>3537</a></p> -<p id='n3538' class='stm run hide_run'><a href='#n3538'>3538</a></p> -<p id='n3539' class='stm run hide_run'><a href='#n3539'>3539</a></p> -<p id='n3540' class='stm mis'><a href='#n3540'>3540</a></p> -<p id='n3541' class='stm mis'><a href='#n3541'>3541</a></p> -<p id='n3542' class='stm mis'><a href='#n3542'>3542</a></p> -<p id='n3543' class='pln'><a href='#n3543'>3543</a></p> -<p id='n3544' class='stm run hide_run'><a href='#n3544'>3544</a></p> -<p id='n3545' class='stm run hide_run'><a href='#n3545'>3545</a></p> -<p id='n3546' class='stm run hide_run'><a href='#n3546'>3546</a></p> -<p id='n3547' class='stm run hide_run'><a href='#n3547'>3547</a></p> -<p id='n3548' class='stm run hide_run'><a href='#n3548'>3548</a></p> -<p id='n3549' class='stm run hide_run'><a href='#n3549'>3549</a></p> -<p id='n3550' class='stm run hide_run'><a href='#n3550'>3550</a></p> -<p id='n3551' class='stm run hide_run'><a href='#n3551'>3551</a></p> -<p id='n3552' class='pln'><a href='#n3552'>3552</a></p> -<p id='n3553' class='pln'><a href='#n3553'>3553</a></p> -<p id='n3554' class='pln'><a href='#n3554'>3554</a></p> -<p id='n3555' class='pln'><a href='#n3555'>3555</a></p> -<p id='n3556' class='pln'><a href='#n3556'>3556</a></p> -<p id='n3557' class='pln'><a href='#n3557'>3557</a></p> -<p id='n3558' class='pln'><a href='#n3558'>3558</a></p> -<p id='n3559' class='stm run hide_run'><a href='#n3559'>3559</a></p> -<p id='n3560' class='pln'><a href='#n3560'>3560</a></p> -<p id='n3561' class='stm run hide_run'><a href='#n3561'>3561</a></p> -<p id='n3562' class='stm run hide_run'><a href='#n3562'>3562</a></p> -<p id='n3563' class='stm run hide_run'><a href='#n3563'>3563</a></p> -<p id='n3564' class='stm mis'><a href='#n3564'>3564</a></p> -<p id='n3565' class='stm mis'><a href='#n3565'>3565</a></p> -<p id='n3566' class='pln'><a href='#n3566'>3566</a></p> -<p id='n3567' class='stm run hide_run'><a href='#n3567'>3567</a></p> -<p id='n3568' class='stm run hide_run'><a href='#n3568'>3568</a></p> -<p id='n3569' class='stm run hide_run'><a href='#n3569'>3569</a></p> -<p id='n3570' class='stm run hide_run'><a href='#n3570'>3570</a></p> -<p id='n3571' class='stm mis'><a href='#n3571'>3571</a></p> -<p id='n3572' class='stm mis'><a href='#n3572'>3572</a></p> -<p id='n3573' class='pln'><a href='#n3573'>3573</a></p> -<p id='n3574' class='stm run hide_run'><a href='#n3574'>3574</a></p> -<p id='n3575' class='stm run hide_run'><a href='#n3575'>3575</a></p> -<p id='n3576' class='pln'><a href='#n3576'>3576</a></p> -<p id='n3577' class='stm run hide_run'><a href='#n3577'>3577</a></p> -<p id='n3578' class='pln'><a href='#n3578'>3578</a></p> -<p id='n3579' class='stm run hide_run'><a href='#n3579'>3579</a></p> -<p id='n3580' class='stm run hide_run'><a href='#n3580'>3580</a></p> -<p id='n3581' class='stm run hide_run'><a href='#n3581'>3581</a></p> -<p id='n3582' class='stm run hide_run'><a href='#n3582'>3582</a></p> -<p id='n3583' class='stm run hide_run'><a href='#n3583'>3583</a></p> -<p id='n3584' class='stm mis'><a href='#n3584'>3584</a></p> -<p id='n3585' class='stm run hide_run'><a href='#n3585'>3585</a></p> -<p id='n3586' class='stm run hide_run'><a href='#n3586'>3586</a></p> -<p id='n3587' class='stm run hide_run'><a href='#n3587'>3587</a></p> -<p id='n3588' class='stm run hide_run'><a href='#n3588'>3588</a></p> -<p id='n3589' class='stm run hide_run'><a href='#n3589'>3589</a></p> -<p id='n3590' class='stm mis'><a href='#n3590'>3590</a></p> -<p id='n3591' class='stm run hide_run'><a href='#n3591'>3591</a></p> -<p id='n3592' class='pln'><a href='#n3592'>3592</a></p> -<p id='n3593' class='stm run hide_run'><a href='#n3593'>3593</a></p> -<p id='n3594' class='stm run hide_run'><a href='#n3594'>3594</a></p> -<p id='n3595' class='pln'><a href='#n3595'>3595</a></p> -<p id='n3596' class='stm run hide_run'><a href='#n3596'>3596</a></p> -<p id='n3597' class='stm run hide_run'><a href='#n3597'>3597</a></p> -<p id='n3598' class='stm run hide_run'><a href='#n3598'>3598</a></p> -<p id='n3599' class='stm mis'><a href='#n3599'>3599</a></p> -<p id='n3600' class='stm mis'><a href='#n3600'>3600</a></p> -<p id='n3601' class='pln'><a href='#n3601'>3601</a></p> -<p id='n3602' class='stm run hide_run'><a href='#n3602'>3602</a></p> -<p id='n3603' class='stm run hide_run'><a href='#n3603'>3603</a></p> -<p id='n3604' class='pln'><a href='#n3604'>3604</a></p> -<p id='n3605' class='stm run hide_run'><a href='#n3605'>3605</a></p> -<p id='n3606' class='stm run hide_run'><a href='#n3606'>3606</a></p> -<p id='n3607' class='stm mis'><a href='#n3607'>3607</a></p> -<p id='n3608' class='stm run hide_run'><a href='#n3608'>3608</a></p> -<p id='n3609' class='pln'><a href='#n3609'>3609</a></p> -<p id='n3610' class='stm run hide_run'><a href='#n3610'>3610</a></p> -<p id='n3611' class='stm run hide_run'><a href='#n3611'>3611</a></p> -<p id='n3612' class='stm mis'><a href='#n3612'>3612</a></p> -<p id='n3613' class='stm run hide_run'><a href='#n3613'>3613</a></p> -<p id='n3614' class='pln'><a href='#n3614'>3614</a></p> -<p id='n3615' class='stm run hide_run'><a href='#n3615'>3615</a></p> -<p id='n3616' class='stm run hide_run'><a href='#n3616'>3616</a></p> -<p id='n3617' class='stm run hide_run'><a href='#n3617'>3617</a></p> -<p id='n3618' class='pln'><a href='#n3618'>3618</a></p> -<p id='n3619' class='stm mis'><a href='#n3619'>3619</a></p> -<p id='n3620' class='pln'><a href='#n3620'>3620</a></p> -<p id='n3621' class='stm run hide_run'><a href='#n3621'>3621</a></p> -<p id='n3622' class='pln'><a href='#n3622'>3622</a></p> -<p id='n3623' class='pln'><a href='#n3623'>3623</a></p> -<p id='n3624' class='pln'><a href='#n3624'>3624</a></p> -<p id='n3625' class='pln'><a href='#n3625'>3625</a></p> -<p id='n3626' class='pln'><a href='#n3626'>3626</a></p> -<p id='n3627' class='pln'><a href='#n3627'>3627</a></p> -<p id='n3628' class='stm run hide_run'><a href='#n3628'>3628</a></p> -<p id='n3629' class='pln'><a href='#n3629'>3629</a></p> -<p id='n3630' class='stm run hide_run'><a href='#n3630'>3630</a></p> -<p id='n3631' class='stm run hide_run'><a href='#n3631'>3631</a></p> -<p id='n3632' class='pln'><a href='#n3632'>3632</a></p> -<p id='n3633' class='stm run hide_run'><a href='#n3633'>3633</a></p> -<p id='n3634' class='stm run hide_run'><a href='#n3634'>3634</a></p> -<p id='n3635' class='stm run hide_run'><a href='#n3635'>3635</a></p> -<p id='n3636' class='stm mis'><a href='#n3636'>3636</a></p> -<p id='n3637' class='stm mis'><a href='#n3637'>3637</a></p> -<p id='n3638' class='pln'><a href='#n3638'>3638</a></p> -<p id='n3639' class='stm run hide_run'><a href='#n3639'>3639</a></p> -<p id='n3640' class='stm run hide_run'><a href='#n3640'>3640</a></p> -<p id='n3641' class='pln'><a href='#n3641'>3641</a></p> -<p id='n3642' class='stm run hide_run'><a href='#n3642'>3642</a></p> -<p id='n3643' class='stm run hide_run'><a href='#n3643'>3643</a></p> -<p id='n3644' class='stm mis'><a href='#n3644'>3644</a></p> -<p id='n3645' class='stm run hide_run'><a href='#n3645'>3645</a></p> -<p id='n3646' class='pln'><a href='#n3646'>3646</a></p> -<p id='n3647' class='stm run hide_run'><a href='#n3647'>3647</a></p> -<p id='n3648' class='stm run hide_run'><a href='#n3648'>3648</a></p> -<p id='n3649' class='stm mis'><a href='#n3649'>3649</a></p> -<p id='n3650' class='stm run hide_run'><a href='#n3650'>3650</a></p> -<p id='n3651' class='pln'><a href='#n3651'>3651</a></p> -<p id='n3652' class='stm run hide_run'><a href='#n3652'>3652</a></p> -<p id='n3653' class='stm run hide_run'><a href='#n3653'>3653</a></p> -<p id='n3654' class='stm mis'><a href='#n3654'>3654</a></p> -<p id='n3655' class='stm run hide_run'><a href='#n3655'>3655</a></p> -<p id='n3656' class='stm run hide_run'><a href='#n3656'>3656</a></p> -<p id='n3657' class='pln'><a href='#n3657'>3657</a></p> -<p id='n3658' class='stm run hide_run'><a href='#n3658'>3658</a></p> -<p id='n3659' class='stm run hide_run'><a href='#n3659'>3659</a></p> -<p id='n3660' class='stm mis'><a href='#n3660'>3660</a></p> -<p id='n3661' class='stm run hide_run'><a href='#n3661'>3661</a></p> -<p id='n3662' class='pln'><a href='#n3662'>3662</a></p> -<p id='n3663' class='stm run hide_run'><a href='#n3663'>3663</a></p> -<p id='n3664' class='stm run hide_run'><a href='#n3664'>3664</a></p> -<p id='n3665' class='pln'><a href='#n3665'>3665</a></p> -<p id='n3666' class='stm run hide_run'><a href='#n3666'>3666</a></p> -<p id='n3667' class='pln'><a href='#n3667'>3667</a></p> -<p id='n3668' class='pln'><a href='#n3668'>3668</a></p> -<p id='n3669' class='pln'><a href='#n3669'>3669</a></p> -<p id='n3670' class='pln'><a href='#n3670'>3670</a></p> -<p id='n3671' class='pln'><a href='#n3671'>3671</a></p> -<p id='n3672' class='pln'><a href='#n3672'>3672</a></p> -<p id='n3673' class='pln'><a href='#n3673'>3673</a></p> -<p id='n3674' class='pln'><a href='#n3674'>3674</a></p> -<p id='n3675' class='pln'><a href='#n3675'>3675</a></p> -<p id='n3676' class='pln'><a href='#n3676'>3676</a></p> -<p id='n3677' class='stm run hide_run'><a href='#n3677'>3677</a></p> -<p id='n3678' class='pln'><a href='#n3678'>3678</a></p> -<p id='n3679' class='stm run hide_run'><a href='#n3679'>3679</a></p> -<p id='n3680' class='stm run hide_run'><a href='#n3680'>3680</a></p> -<p id='n3681' class='pln'><a href='#n3681'>3681</a></p> -<p id='n3682' class='pln'><a href='#n3682'>3682</a></p> -<p id='n3683' class='pln'><a href='#n3683'>3683</a></p> -<p id='n3684' class='pln'><a href='#n3684'>3684</a></p> -<p id='n3685' class='pln'><a href='#n3685'>3685</a></p> -<p id='n3686' class='stm run hide_run'><a href='#n3686'>3686</a></p> -<p id='n3687' class='pln'><a href='#n3687'>3687</a></p> -<p id='n3688' class='stm run hide_run'><a href='#n3688'>3688</a></p> -<p id='n3689' class='pln'><a href='#n3689'>3689</a></p> -<p id='n3690' class='stm run hide_run'><a href='#n3690'>3690</a></p> -<p id='n3691' class='stm run hide_run'><a href='#n3691'>3691</a></p> -<p id='n3692' class='stm run hide_run'><a href='#n3692'>3692</a></p> -<p id='n3693' class='stm run hide_run'><a href='#n3693'>3693</a></p> -<p id='n3694' class='stm run hide_run'><a href='#n3694'>3694</a></p> -<p id='n3695' class='stm run hide_run'><a href='#n3695'>3695</a></p> -<p id='n3696' class='stm run hide_run'><a href='#n3696'>3696</a></p> -<p id='n3697' class='stm run hide_run'><a href='#n3697'>3697</a></p> -<p id='n3698' class='stm run hide_run'><a href='#n3698'>3698</a></p> -<p id='n3699' class='stm run hide_run'><a href='#n3699'>3699</a></p> -<p id='n3700' class='stm run hide_run'><a href='#n3700'>3700</a></p> -<p id='n3701' class='stm run hide_run'><a href='#n3701'>3701</a></p> -<p id='n3702' class='stm run hide_run'><a href='#n3702'>3702</a></p> -<p id='n3703' class='stm run hide_run'><a href='#n3703'>3703</a></p> -<p id='n3704' class='stm run hide_run'><a href='#n3704'>3704</a></p> -<p id='n3705' class='stm mis'><a href='#n3705'>3705</a></p> -<p id='n3706' class='stm run hide_run'><a href='#n3706'>3706</a></p> -<p id='n3707' class='pln'><a href='#n3707'>3707</a></p> -<p id='n3708' class='pln'><a href='#n3708'>3708</a></p> -<p id='n3709' class='pln'><a href='#n3709'>3709</a></p> -<p id='n3710' class='pln'><a href='#n3710'>3710</a></p> -<p id='n3711' class='pln'><a href='#n3711'>3711</a></p> -<p id='n3712' class='stm run hide_run'><a href='#n3712'>3712</a></p> -<p id='n3713' class='stm run hide_run'><a href='#n3713'>3713</a></p> -<p id='n3714' class='pln'><a href='#n3714'>3714</a></p> -<p id='n3715' class='stm run hide_run'><a href='#n3715'>3715</a></p> -<p id='n3716' class='stm run hide_run'><a href='#n3716'>3716</a></p> -<p id='n3717' class='stm run hide_run'><a href='#n3717'>3717</a></p> -<p id='n3718' class='pln'><a href='#n3718'>3718</a></p> -<p id='n3719' class='stm run hide_run'><a href='#n3719'>3719</a></p> -<p id='n3720' class='stm run hide_run'><a href='#n3720'>3720</a></p> -<p id='n3721' class='stm run hide_run'><a href='#n3721'>3721</a></p> -<p id='n3722' class='stm run hide_run'><a href='#n3722'>3722</a></p> -<p id='n3723' class='stm run hide_run'><a href='#n3723'>3723</a></p> -<p id='n3724' class='stm run hide_run'><a href='#n3724'>3724</a></p> -<p id='n3725' class='stm run hide_run'><a href='#n3725'>3725</a></p> -<p id='n3726' class='stm run hide_run'><a href='#n3726'>3726</a></p> -<p id='n3727' class='stm run hide_run'><a href='#n3727'>3727</a></p> -<p id='n3728' class='stm run hide_run'><a href='#n3728'>3728</a></p> -<p id='n3729' class='pln'><a href='#n3729'>3729</a></p> -<p id='n3730' class='pln'><a href='#n3730'>3730</a></p> -<p id='n3731' class='pln'><a href='#n3731'>3731</a></p> -<p id='n3732' class='pln'><a href='#n3732'>3732</a></p> -<p id='n3733' class='pln'><a href='#n3733'>3733</a></p> -<p id='n3734' class='pln'><a href='#n3734'>3734</a></p> -<p id='n3735' class='stm run hide_run'><a href='#n3735'>3735</a></p> -<p id='n3736' class='pln'><a href='#n3736'>3736</a></p> -<p id='n3737' class='pln'><a href='#n3737'>3737</a></p> -<p id='n3738' class='stm run hide_run'><a href='#n3738'>3738</a></p> -<p id='n3739' class='pln'><a href='#n3739'>3739</a></p> -<p id='n3740' class='pln'><a href='#n3740'>3740</a></p> -<p id='n3741' class='pln'><a href='#n3741'>3741</a></p> -<p id='n3742' class='stm mis'><a href='#n3742'>3742</a></p> -<p id='n3743' class='pln'><a href='#n3743'>3743</a></p> -<p id='n3744' class='pln'><a href='#n3744'>3744</a></p> -<p id='n3745' class='pln'><a href='#n3745'>3745</a></p> -<p id='n3746' class='pln'><a href='#n3746'>3746</a></p> -<p id='n3747' class='pln'><a href='#n3747'>3747</a></p> -<p id='n3748' class='pln'><a href='#n3748'>3748</a></p> -<p id='n3749' class='pln'><a href='#n3749'>3749</a></p> -<p id='n3750' class='pln'><a href='#n3750'>3750</a></p> -<p id='n3751' class='pln'><a href='#n3751'>3751</a></p> -<p id='n3752' class='pln'><a href='#n3752'>3752</a></p> -<p id='n3753' class='pln'><a href='#n3753'>3753</a></p> -<p id='n3754' class='pln'><a href='#n3754'>3754</a></p> -<p id='n3755' class='pln'><a href='#n3755'>3755</a></p> -<p id='n3756' class='pln'><a href='#n3756'>3756</a></p> -<p id='n3757' class='pln'><a href='#n3757'>3757</a></p> -<p id='n3758' class='pln'><a href='#n3758'>3758</a></p> -<p id='n3759' class='pln'><a href='#n3759'>3759</a></p> -<p id='n3760' class='pln'><a href='#n3760'>3760</a></p> -<p id='n3761' class='pln'><a href='#n3761'>3761</a></p> -<p id='n3762' class='pln'><a href='#n3762'>3762</a></p> -<p id='n3763' class='pln'><a href='#n3763'>3763</a></p> -<p id='n3764' class='pln'><a href='#n3764'>3764</a></p> -<p id='n3765' class='pln'><a href='#n3765'>3765</a></p> -<p id='n3766' class='pln'><a href='#n3766'>3766</a></p> -<p id='n3767' class='pln'><a href='#n3767'>3767</a></p> -<p id='n3768' class='pln'><a href='#n3768'>3768</a></p> -<p id='n3769' class='pln'><a href='#n3769'>3769</a></p> -<p id='n3770' class='pln'><a href='#n3770'>3770</a></p> -<p id='n3771' class='pln'><a href='#n3771'>3771</a></p> -<p id='n3772' class='pln'><a href='#n3772'>3772</a></p> -<p id='n3773' class='pln'><a href='#n3773'>3773</a></p> -<p id='n3774' class='pln'><a href='#n3774'>3774</a></p> -<p id='n3775' class='pln'><a href='#n3775'>3775</a></p> -<p id='n3776' class='pln'><a href='#n3776'>3776</a></p> -<p id='n3777' class='pln'><a href='#n3777'>3777</a></p> -<p id='n3778' class='pln'><a href='#n3778'>3778</a></p> -<p id='n3779' class='pln'><a href='#n3779'>3779</a></p> -<p id='n3780' class='pln'><a href='#n3780'>3780</a></p> -<p id='n3781' class='pln'><a href='#n3781'>3781</a></p> -<p id='n3782' class='pln'><a href='#n3782'>3782</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='pln'><span class='com'>#!/usr/bin/env python</span><span class='strut'> </span></p> -<p id='t2' class='pln'><span class='com'># -*- coding: utf-8 -*-</span><span class='strut'> </span></p> -<p id='t3' class='pln'><span class='strut'> </span></p> -<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>absolute_import</span><span class='strut'> </span></p> -<p id='t5' class='pln'><span class='strut'> </span></p> -<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>base64</span><span class='strut'> </span></p> -<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>datetime</span><span class='strut'> </span></p> -<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>netrc</span><span class='strut'> </span></p> -<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='strut'> </span></p> -<p id='t10' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>re</span><span class='strut'> </span></p> -<p id='t11' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>socket</span><span class='strut'> </span></p> -<p id='t12' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>time</span><span class='strut'> </span></p> -<p id='t13' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='strut'> </span></p> -<p id='t14' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='strut'> </span></p> -<p id='t15' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>random</span><span class='strut'> </span></p> -<p id='t16' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>math</span><span class='strut'> </span></p> -<p id='t17' class='pln'><span class='strut'> </span></p> -<p id='t18' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>utils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t19' class='pln'><span class='strut'> </span></p> -<p id='t20' class='pln'><span class='strut'> </span></p> -<p id='t21' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>InfoExtractor</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t22' class='pln'> <span class='str'>"""Information Extractor class.</span><span class='strut'> </span></p> -<p id='t23' class='pln'><span class='strut'> </span></p> -<p id='t24' class='pln'><span class='str'> Information extractors are the classes that, given a URL, extract</span><span class='strut'> </span></p> -<p id='t25' class='pln'><span class='str'> information about the video (or videos) the URL refers to. This</span><span class='strut'> </span></p> -<p id='t26' class='pln'><span class='str'> information includes the real video URL, the video title, author and</span><span class='strut'> </span></p> -<p id='t27' class='pln'><span class='str'> others. The information is stored in a dictionary which is then</span><span class='strut'> </span></p> -<p id='t28' class='pln'><span class='str'> passed to the FileDownloader. The FileDownloader processes this</span><span class='strut'> </span></p> -<p id='t29' class='pln'><span class='str'> information possibly downloading the video to the file system, among</span><span class='strut'> </span></p> -<p id='t30' class='pln'><span class='str'> other possible outcomes.</span><span class='strut'> </span></p> -<p id='t31' class='pln'><span class='strut'> </span></p> -<p id='t32' class='pln'><span class='str'> The dictionaries must include the following fields:</span><span class='strut'> </span></p> -<p id='t33' class='pln'><span class='strut'> </span></p> -<p id='t34' class='pln'><span class='str'> id: Video identifier.</span><span class='strut'> </span></p> -<p id='t35' class='pln'><span class='str'> url: Final video URL.</span><span class='strut'> </span></p> -<p id='t36' class='pln'><span class='str'> title: Video title, unescaped.</span><span class='strut'> </span></p> -<p id='t37' class='pln'><span class='str'> ext: Video filename extension.</span><span class='strut'> </span></p> -<p id='t38' class='pln'><span class='str'> uploader: Full name of the video uploader.</span><span class='strut'> </span></p> -<p id='t39' class='pln'><span class='str'> upload_date: Video upload date (YYYYMMDD).</span><span class='strut'> </span></p> -<p id='t40' class='pln'><span class='strut'> </span></p> -<p id='t41' class='pln'><span class='str'> The following fields are optional:</span><span class='strut'> </span></p> -<p id='t42' class='pln'><span class='strut'> </span></p> -<p id='t43' class='pln'><span class='str'> format: The video format, defaults to ext (used for --get-format)</span><span class='strut'> </span></p> -<p id='t44' class='pln'><span class='str'> thumbnail: Full URL to a video thumbnail image.</span><span class='strut'> </span></p> -<p id='t45' class='pln'><span class='str'> description: One-line video description.</span><span class='strut'> </span></p> -<p id='t46' class='pln'><span class='str'> uploader_id: Nickname or id of the video uploader.</span><span class='strut'> </span></p> -<p id='t47' class='pln'><span class='str'> player_url: SWF Player URL (used for rtmpdump).</span><span class='strut'> </span></p> -<p id='t48' class='pln'><span class='str'> subtitles: The .srt file contents.</span><span class='strut'> </span></p> -<p id='t49' class='pln'><span class='str'> urlhandle: [internal] The urlHandle to be used to download the file,</span><span class='strut'> </span></p> -<p id='t50' class='pln'><span class='str'> like returned by urllib.request.urlopen</span><span class='strut'> </span></p> -<p id='t51' class='pln'><span class='strut'> </span></p> -<p id='t52' class='pln'><span class='str'> The fields should all be Unicode strings.</span><span class='strut'> </span></p> -<p id='t53' class='pln'><span class='strut'> </span></p> -<p id='t54' class='pln'><span class='str'> Subclasses of this one should re-define the _real_initialize() and</span><span class='strut'> </span></p> -<p id='t55' class='pln'><span class='str'> _real_extract() methods and define a _VALID_URL regexp.</span><span class='strut'> </span></p> -<p id='t56' class='pln'><span class='str'> Probably, they should also be added to the list of extractors.</span><span class='strut'> </span></p> -<p id='t57' class='pln'><span class='strut'> </span></p> -<p id='t58' class='pln'><span class='str'> _real_extract() must return a *list* of information dictionaries as</span><span class='strut'> </span></p> -<p id='t59' class='pln'><span class='str'> described above.</span><span class='strut'> </span></p> -<p id='t60' class='pln'><span class='strut'> </span></p> -<p id='t61' class='pln'><span class='str'> Finally, the _WORKING attribute should be set to False for broken IEs</span><span class='strut'> </span></p> -<p id='t62' class='pln'><span class='str'> in order to warn the users and skip the tests.</span><span class='strut'> </span></p> -<p id='t63' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t64' class='pln'><span class='strut'> </span></p> -<p id='t65' class='stm run hide_run'> <span class='nam'>_ready</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t66' class='stm run hide_run'> <span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t67' class='stm run hide_run'> <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t68' class='pln'><span class='strut'> </span></p> -<p id='t69' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t70' class='pln'> <span class='str'>"""Constructor. Receives an optional downloader."""</span><span class='strut'> </span></p> -<p id='t71' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ready</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t72' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t73' class='pln'><span class='strut'> </span></p> -<p id='t74' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t75' class='pln'> <span class='str'>"""Receives a URL and returns True if suitable for this IE."""</span><span class='strut'> </span></p> -<p id='t76' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t77' class='pln'><span class='strut'> </span></p> -<p id='t78' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>working</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t79' class='pln'> <span class='str'>"""Getter method for _WORKING."""</span><span class='strut'> </span></p> -<p id='t80' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_WORKING</span><span class='strut'> </span></p> -<p id='t81' class='pln'><span class='strut'> </span></p> -<p id='t82' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t83' class='pln'> <span class='str'>"""Initializes an instance (authentication, etc)."""</span><span class='strut'> </span></p> -<p id='t84' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ready</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t85' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_real_initialize</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t86' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ready</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t87' class='pln'><span class='strut'> </span></p> -<p id='t88' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t89' class='pln'> <span class='str'>"""Extracts URL information and returns it in list of dicts."""</span><span class='strut'> </span></p> -<p id='t90' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>initialize</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t91' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t92' class='pln'><span class='strut'> </span></p> -<p id='t93' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t94' class='pln'> <span class='str'>"""Sets the downloader for this IE."""</span><span class='strut'> </span></p> -<p id='t95' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>downloader</span><span class='strut'> </span></p> -<p id='t96' class='pln'><span class='strut'> </span></p> -<p id='t97' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t98' class='pln'> <span class='str'>"""Real initialization process. Redefine in subclasses."""</span><span class='strut'> </span></p> -<p id='t99' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t100' class='pln'><span class='strut'> </span></p> -<p id='t101' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t102' class='pln'> <span class='str'>"""Real extraction process. Redefine in subclasses."""</span><span class='strut'> </span></p> -<p id='t103' class='stm mis'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t104' class='pln'><span class='strut'> </span></p> -<p id='t105' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>property</span><span class='strut'> </span></p> -<p id='t106' class='pln'> <span class='key'>def</span> <span class='nam'>IE_NAME</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t107' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>__name__</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t108' class='pln'><span class='strut'> </span></p> -<p id='t109' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url_or_request</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>note</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errnote</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t110' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>note</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t111' class='stm run hide_run'> <span class='nam'>note</span> <span class='op'>=</span> <span class='str'>u'Downloading video webpage'</span><span class='strut'> </span></p> -<p id='t112' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: %s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>note</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t113' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t114' class='stm run hide_run'> <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url_or_request</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t115' class='stm run hide_run'> <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t116' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='str'>'replace'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t117' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t118' class='stm mis'> <span class='key'>if</span> <span class='nam'>errnote</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t119' class='stm mis'> <span class='nam'>errnote</span> <span class='op'>=</span> <span class='str'>u'Unable to download webpage'</span><span class='strut'> </span></p> -<p id='t120' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ExtractorError</span><span class='op'>(</span><span class='str'>u'%s: %s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>errnote</span><span class='op'>,</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t121' class='pln'><span class='strut'> </span></p> -<p id='t122' class='pln'><span class='strut'> </span></p> -<p id='t123' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t124' class='pln'> <span class='str'>"""Information extractor for youtube.com."""</span><span class='strut'> </span></p> -<p id='t125' class='pln'><span class='strut'> </span></p> -<p id='t126' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r"""^</span><span class='strut'> </span></p> -<p id='t127' class='pln'><span class='str'> (</span><span class='strut'> </span></p> -<p id='t128' class='pln'><span class='str'> (?:https?://)? # http(s):// (optional)</span><span class='strut'> </span></p> -<p id='t129' class='pln'><span class='str'> (?:youtu\.be/|(?:\w+\.)?youtube(?:-nocookie)?\.com/|</span><span class='strut'> </span></p> -<p id='t130' class='pln'><span class='str'> tube\.majestyc\.net/) # the various hostnames, with wildcard subdomains</span><span class='strut'> </span></p> -<p id='t131' class='pln'><span class='str'> (?:.*?\#/)? # handle anchor (#/) redirect urls</span><span class='strut'> </span></p> -<p id='t132' class='pln'><span class='str'> (?!view_play_list|my_playlists|artist|playlist) # ignore playlist URLs</span><span class='strut'> </span></p> -<p id='t133' class='pln'><span class='str'> (?: # the various things that can precede the ID:</span><span class='strut'> </span></p> -<p id='t134' class='pln'><span class='str'> (?:(?:v|embed|e)/) # v/ or embed/ or e/</span><span class='strut'> </span></p> -<p id='t135' class='pln'><span class='str'> |(?: # or the v= param in all its forms</span><span class='strut'> </span></p> -<p id='t136' class='pln'><span class='str'> (?:watch(?:_popup)?(?:\.php)?)? # preceding watch(_popup|.php) or nothing (like /?v=xxxx)</span><span class='strut'> </span></p> -<p id='t137' class='pln'><span class='str'> (?:\?|\#!?) # the params delimiter ? or # or #!</span><span class='strut'> </span></p> -<p id='t138' class='pln'><span class='str'> (?:.*?&)? # any other preceding param (like /?s=tuff&v=xxxx)</span><span class='strut'> </span></p> -<p id='t139' class='pln'><span class='str'> v=</span><span class='strut'> </span></p> -<p id='t140' class='pln'><span class='str'> )</span><span class='strut'> </span></p> -<p id='t141' class='pln'><span class='str'> )? # optional -> youtube.com/xxxx is OK</span><span class='strut'> </span></p> -<p id='t142' class='pln'><span class='str'> )? # all until now is optional -> you can pass the naked ID</span><span class='strut'> </span></p> -<p id='t143' class='pln'><span class='str'> ([0-9A-Za-z_-]+) # here is it! the YouTube video ID</span><span class='strut'> </span></p> -<p id='t144' class='pln'><span class='str'> (?(1).+)? # if we found the ID, everything can follow</span><span class='strut'> </span></p> -<p id='t145' class='pln'><span class='str'> $"""</span><span class='strut'> </span></p> -<p id='t146' class='stm run hide_run'> <span class='nam'>_LANG_URL</span> <span class='op'>=</span> <span class='str'>r'http://www.youtube.com/?hl=en&persist_hl=1&gl=US&persist_gl=1&opt_out_ackd=1'</span><span class='strut'> </span></p> -<p id='t147' class='stm run hide_run'> <span class='nam'>_LOGIN_URL</span> <span class='op'>=</span> <span class='str'>'https://www.youtube.com/signup?next=/&gl=US&hl=en'</span><span class='strut'> </span></p> -<p id='t148' class='stm run hide_run'> <span class='nam'>_AGE_URL</span> <span class='op'>=</span> <span class='str'>'http://www.youtube.com/verify_age?next_url=/&gl=US&hl=en'</span><span class='strut'> </span></p> -<p id='t149' class='stm run hide_run'> <span class='nam'>_NEXT_URL_RE</span> <span class='op'>=</span> <span class='str'>r'[\?&]next_url=([^&]+)'</span><span class='strut'> </span></p> -<p id='t150' class='stm run hide_run'> <span class='nam'>_NETRC_MACHINE</span> <span class='op'>=</span> <span class='str'>'youtube'</span><span class='strut'> </span></p> -<p id='t151' class='pln'> <span class='com'># Listed in order of quality</span><span class='strut'> </span></p> -<p id='t152' class='stm run hide_run'> <span class='nam'>_available_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'38'</span><span class='op'>,</span> <span class='str'>'37'</span><span class='op'>,</span> <span class='str'>'46'</span><span class='op'>,</span> <span class='str'>'22'</span><span class='op'>,</span> <span class='str'>'45'</span><span class='op'>,</span> <span class='str'>'35'</span><span class='op'>,</span> <span class='str'>'44'</span><span class='op'>,</span> <span class='str'>'34'</span><span class='op'>,</span> <span class='str'>'18'</span><span class='op'>,</span> <span class='str'>'43'</span><span class='op'>,</span> <span class='str'>'6'</span><span class='op'>,</span> <span class='str'>'5'</span><span class='op'>,</span> <span class='str'>'17'</span><span class='op'>,</span> <span class='str'>'13'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t153' class='stm run hide_run'> <span class='nam'>_available_formats_prefer_free</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'38'</span><span class='op'>,</span> <span class='str'>'46'</span><span class='op'>,</span> <span class='str'>'37'</span><span class='op'>,</span> <span class='str'>'45'</span><span class='op'>,</span> <span class='str'>'22'</span><span class='op'>,</span> <span class='str'>'44'</span><span class='op'>,</span> <span class='str'>'35'</span><span class='op'>,</span> <span class='str'>'43'</span><span class='op'>,</span> <span class='str'>'34'</span><span class='op'>,</span> <span class='str'>'18'</span><span class='op'>,</span> <span class='str'>'6'</span><span class='op'>,</span> <span class='str'>'5'</span><span class='op'>,</span> <span class='str'>'17'</span><span class='op'>,</span> <span class='str'>'13'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t154' class='stm run hide_run'> <span class='nam'>_video_extensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t155' class='pln'> <span class='str'>'13'</span><span class='op'>:</span> <span class='str'>'3gp'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t156' class='pln'> <span class='str'>'17'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t157' class='pln'> <span class='str'>'18'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t158' class='pln'> <span class='str'>'22'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t159' class='pln'> <span class='str'>'37'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t160' class='pln'> <span class='str'>'38'</span><span class='op'>:</span> <span class='str'>'video'</span><span class='op'>,</span> <span class='com'># You actually don't know if this will be MOV, AVI or whatever</span><span class='strut'> </span></p> -<p id='t161' class='pln'> <span class='str'>'43'</span><span class='op'>:</span> <span class='str'>'webm'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t162' class='pln'> <span class='str'>'44'</span><span class='op'>:</span> <span class='str'>'webm'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t163' class='pln'> <span class='str'>'45'</span><span class='op'>:</span> <span class='str'>'webm'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t164' class='pln'> <span class='str'>'46'</span><span class='op'>:</span> <span class='str'>'webm'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t165' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t166' class='stm run hide_run'> <span class='nam'>_video_dimensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t167' class='pln'> <span class='str'>'5'</span><span class='op'>:</span> <span class='str'>'240x400'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t168' class='pln'> <span class='str'>'6'</span><span class='op'>:</span> <span class='str'>'???'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t169' class='pln'> <span class='str'>'13'</span><span class='op'>:</span> <span class='str'>'???'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t170' class='pln'> <span class='str'>'17'</span><span class='op'>:</span> <span class='str'>'144x176'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t171' class='pln'> <span class='str'>'18'</span><span class='op'>:</span> <span class='str'>'360x640'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t172' class='pln'> <span class='str'>'22'</span><span class='op'>:</span> <span class='str'>'720x1280'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t173' class='pln'> <span class='str'>'34'</span><span class='op'>:</span> <span class='str'>'360x640'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t174' class='pln'> <span class='str'>'35'</span><span class='op'>:</span> <span class='str'>'480x854'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t175' class='pln'> <span class='str'>'37'</span><span class='op'>:</span> <span class='str'>'1080x1920'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t176' class='pln'> <span class='str'>'38'</span><span class='op'>:</span> <span class='str'>'3072x4096'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t177' class='pln'> <span class='str'>'43'</span><span class='op'>:</span> <span class='str'>'360x640'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t178' class='pln'> <span class='str'>'44'</span><span class='op'>:</span> <span class='str'>'480x854'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t179' class='pln'> <span class='str'>'45'</span><span class='op'>:</span> <span class='str'>'720x1280'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t180' class='pln'> <span class='str'>'46'</span><span class='op'>:</span> <span class='str'>'1080x1920'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t181' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t182' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'youtube'</span><span class='strut'> </span></p> -<p id='t183' class='pln'><span class='strut'> </span></p> -<p id='t184' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t185' class='pln'> <span class='str'>"""Receives a URL and returns True if suitable for this IE."""</span><span class='strut'> </span></p> -<p id='t186' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t187' class='pln'><span class='strut'> </span></p> -<p id='t188' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_lang</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t189' class='pln'> <span class='str'>"""Report attempt to set language."""</span><span class='strut'> </span></p> -<p id='t190' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] Setting language'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t191' class='pln'><span class='strut'> </span></p> -<p id='t192' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_login</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t193' class='pln'> <span class='str'>"""Report attempt to log in."""</span><span class='strut'> </span></p> -<p id='t194' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] Logging in'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t195' class='pln'><span class='strut'> </span></p> -<p id='t196' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t197' class='pln'> <span class='str'>"""Report attempt to confirm age."""</span><span class='strut'> </span></p> -<p id='t198' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] Confirming age'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t199' class='pln'><span class='strut'> </span></p> -<p id='t200' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t201' class='pln'> <span class='str'>"""Report attempt to download video webpage."""</span><span class='strut'> </span></p> -<p id='t202' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] %s: Downloading video webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t203' class='pln'><span class='strut'> </span></p> -<p id='t204' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_video_info_webpage_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t205' class='pln'> <span class='str'>"""Report attempt to download video info webpage."""</span><span class='strut'> </span></p> -<p id='t206' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] %s: Downloading video info webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t207' class='pln'><span class='strut'> </span></p> -<p id='t208' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_video_subtitles_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t209' class='pln'> <span class='str'>"""Report attempt to download video info webpage."""</span><span class='strut'> </span></p> -<p id='t210' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] %s: Downloading video subtitles'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t211' class='pln'><span class='strut'> </span></p> -<p id='t212' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t213' class='pln'> <span class='str'>"""Report attempt to extract video information."""</span><span class='strut'> </span></p> -<p id='t214' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] %s: Extracting video information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t215' class='pln'><span class='strut'> </span></p> -<p id='t216' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_unavailable_format</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>format</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t217' class='pln'> <span class='str'>"""Report extracted video URL."""</span><span class='strut'> </span></p> -<p id='t218' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] %s: Format %s not available'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>format</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t219' class='pln'><span class='strut'> </span></p> -<p id='t220' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_rtmp_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t221' class='pln'> <span class='str'>"""Indicate the download will use the RTMP protocol."""</span><span class='strut'> </span></p> -<p id='t222' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] RTMP download detected'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t223' class='pln'><span class='strut'> </span></p> -<p id='t224' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_closed_captions_xml_to_srt</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>xml_string</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t225' class='stm run hide_run'> <span class='nam'>srt</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t226' class='stm run hide_run'> <span class='nam'>texts</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>r'<text start="([\d\.]+)"( dur="([\d\.]+)")?>([^<]+)</text>'</span><span class='op'>,</span> <span class='nam'>xml_string</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>MULTILINE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t227' class='pln'> <span class='com'># TODO parse xml instead of regex</span><span class='strut'> </span></p> -<p id='t228' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>n</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>dur_tag</span><span class='op'>,</span> <span class='nam'>dur</span><span class='op'>,</span> <span class='nam'>caption</span><span class='op'>)</span> <span class='key'>in</span> <span class='nam'>enumerate</span><span class='op'>(</span><span class='nam'>texts</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t229' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>dur</span><span class='op'>:</span> <span class='nam'>dur</span> <span class='op'>=</span> <span class='str'>'4'</span><span class='strut'> </span></p> -<p id='t230' class='stm run hide_run'> <span class='nam'>start</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t231' class='stm run hide_run'> <span class='nam'>end</span> <span class='op'>=</span> <span class='nam'>start</span> <span class='op'>+</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>dur</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t232' class='stm run hide_run'> <span class='nam'>start</span> <span class='op'>=</span> <span class='str'>"%02i:%02i:%02i,%03i"</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>/</span><span class='op'>(</span><span class='num'>60</span><span class='op'>*</span><span class='num'>60</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>start</span><span class='op'>/</span><span class='num'>60</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>start</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>start</span><span class='op'>%</span><span class='num'>1</span><span class='op'>*</span><span class='num'>1000</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t233' class='stm run hide_run'> <span class='nam'>end</span> <span class='op'>=</span> <span class='str'>"%02i:%02i:%02i,%03i"</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>end</span><span class='op'>/</span><span class='op'>(</span><span class='num'>60</span><span class='op'>*</span><span class='num'>60</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>end</span><span class='op'>/</span><span class='num'>60</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>end</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>end</span><span class='op'>%</span><span class='num'>1</span><span class='op'>*</span><span class='num'>1000</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t234' class='stm run hide_run'> <span class='nam'>caption</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>caption</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t235' class='stm run hide_run'> <span class='nam'>caption</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>caption</span><span class='op'>)</span> <span class='com'># double cycle, intentional</span><span class='strut'> </span></p> -<p id='t236' class='stm run hide_run'> <span class='nam'>srt</span> <span class='op'>+=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>n</span><span class='op'>+</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>'\n'</span><span class='strut'> </span></p> -<p id='t237' class='stm run hide_run'> <span class='nam'>srt</span> <span class='op'>+=</span> <span class='nam'>start</span> <span class='op'>+</span> <span class='str'>' --> '</span> <span class='op'>+</span> <span class='nam'>end</span> <span class='op'>+</span> <span class='str'>'\n'</span><span class='strut'> </span></p> -<p id='t238' class='stm run hide_run'> <span class='nam'>srt</span> <span class='op'>+=</span> <span class='nam'>caption</span> <span class='op'>+</span> <span class='str'>'\n\n'</span><span class='strut'> </span></p> -<p id='t239' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>srt</span><span class='strut'> </span></p> -<p id='t240' class='pln'><span class='strut'> </span></p> -<p id='t241' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_extract_subtitles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t242' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_subtitles_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t243' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>'http://video.google.com/timedtext?hl=en&type=list&v=%s'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t244' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t245' class='stm run hide_run'> <span class='nam'>srt_list</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t246' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t247' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='str'>u'WARNING: unable to download video subtitles: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t248' class='stm run hide_run'> <span class='nam'>srt_lang_list</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>r'name="([^"]*)"[^>]+lang_code="([\w\-]+)"'</span><span class='op'>,</span> <span class='nam'>srt_list</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t249' class='stm run hide_run'> <span class='nam'>srt_lang_list</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>srt_lang_list</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t250' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>srt_lang_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t251' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='str'>u'WARNING: video has no closed captions'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t252' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'subtitleslang'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t253' class='stm run hide_run'> <span class='nam'>srt_lang</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'subtitleslang'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t254' class='stm run hide_run'> <span class='key'>elif</span> <span class='str'>'en'</span> <span class='key'>in</span> <span class='nam'>srt_lang_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t255' class='stm run hide_run'> <span class='nam'>srt_lang</span> <span class='op'>=</span> <span class='str'>'en'</span><span class='strut'> </span></p> -<p id='t256' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t257' class='stm mis'> <span class='nam'>srt_lang</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>srt_lang_list</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t258' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>srt_lang</span> <span class='key'>in</span> <span class='nam'>srt_lang_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t259' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='str'>u'WARNING: no closed captions found in the specified language'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t260' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>'http://www.youtube.com/api/timedtext?lang=%s&name=%s&v=%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>srt_lang</span><span class='op'>,</span> <span class='nam'>srt_lang_list</span><span class='op'>[</span><span class='nam'>srt_lang</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t261' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t262' class='stm run hide_run'> <span class='nam'>srt_xml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t263' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t264' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='str'>u'WARNING: unable to download video subtitles: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t265' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>srt_xml</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t266' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='str'>u'WARNING: unable to download video subtitles'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t267' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_closed_captions_xml_to_srt</span><span class='op'>(</span><span class='nam'>srt_xml</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t268' class='pln'><span class='strut'> </span></p> -<p id='t269' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>formats</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t270' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'Available formats:'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t271' class='stm mis'> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t272' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'%s\t:\t%s\t[%s]'</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>'flv'</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_dimensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>'???'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t273' class='pln'><span class='strut'> </span></p> -<p id='t274' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t275' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t276' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t277' class='pln'><span class='strut'> </span></p> -<p id='t278' class='stm run hide_run'> <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t279' class='stm run hide_run'> <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t280' class='stm run hide_run'> <span class='nam'>downloader_params</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='strut'> </span></p> -<p id='t281' class='pln'><span class='strut'> </span></p> -<p id='t282' class='pln'> <span class='com'># Attempt to use provided username and password or .netrc data</span><span class='strut'> </span></p> -<p id='t283' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'username'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t284' class='stm mis'> <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>'username'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t285' class='stm mis'> <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>'password'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t286' class='stm run hide_run'> <span class='key'>elif</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'usenetrc'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t287' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t288' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>netrc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>authenticators</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t289' class='stm mis'> <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t290' class='stm mis'> <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t291' class='stm mis'> <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t292' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t293' class='stm mis'> <span class='key'>raise</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>(</span><span class='str'>'No authenticators for %s'</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t294' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t295' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: parsing .netrc: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t296' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t297' class='pln'><span class='strut'> </span></p> -<p id='t298' class='pln'> <span class='com'># Set language</span><span class='strut'> </span></p> -<p id='t299' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LANG_URL</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t300' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t301' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_lang</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t302' class='stm run hide_run'> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t303' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t304' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: unable to set language: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t305' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t306' class='pln'><span class='strut'> </span></p> -<p id='t307' class='pln'> <span class='com'># No authentication to be performed</span><span class='strut'> </span></p> -<p id='t308' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>username</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t309' class='stm run hide_run'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t310' class='pln'><span class='strut'> </span></p> -<p id='t311' class='pln'> <span class='com'># Log in</span><span class='strut'> </span></p> -<p id='t312' class='stm mis'> <span class='nam'>login_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t313' class='pln'> <span class='str'>'current_form'</span><span class='op'>:</span> <span class='str'>'loginForm'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t314' class='pln'> <span class='str'>'next'</span><span class='op'>:</span> <span class='str'>'/'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t315' class='pln'> <span class='str'>'action_login'</span><span class='op'>:</span> <span class='str'>'Log In'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t316' class='pln'> <span class='str'>'username'</span><span class='op'>:</span> <span class='nam'>username</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t317' class='pln'> <span class='str'>'password'</span><span class='op'>:</span> <span class='nam'>password</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t318' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t319' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LOGIN_URL</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>login_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t320' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t321' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_login</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t322' class='stm mis'> <span class='nam'>login_results</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t323' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'(?i)<form[^>]* name="loginForm"'</span><span class='op'>,</span> <span class='nam'>login_results</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t324' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: unable to log in: bad username or password'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t325' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t326' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t327' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: unable to log in: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t328' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t329' class='pln'><span class='strut'> </span></p> -<p id='t330' class='pln'> <span class='com'># Confirm age</span><span class='strut'> </span></p> -<p id='t331' class='stm mis'> <span class='nam'>age_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t332' class='pln'> <span class='str'>'next_url'</span><span class='op'>:</span> <span class='str'>'/'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t333' class='pln'> <span class='str'>'action_confirm'</span><span class='op'>:</span> <span class='str'>'Confirm'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t334' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t335' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_AGE_URL</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>age_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t336' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t337' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t338' class='stm mis'> <span class='nam'>age_results</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t339' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t340' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to confirm age: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t341' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t342' class='pln'><span class='strut'> </span></p> -<p id='t343' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_extract_id</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t344' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t345' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t346' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t347' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t348' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t349' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>video_id</span><span class='strut'> </span></p> -<p id='t350' class='pln'><span class='strut'> </span></p> -<p id='t351' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t352' class='pln'> <span class='com'># Extract original video URL from URL with redirection, like age verification, using next_url parameter</span><span class='strut'> </span></p> -<p id='t353' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NEXT_URL_RE</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t354' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t355' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>'http://www.youtube.com/'</span> <span class='op'>+</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>lstrip</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t356' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_extract_id</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t357' class='pln'><span class='strut'> </span></p> -<p id='t358' class='pln'> <span class='com'># Get video webpage</span><span class='strut'> </span></p> -<p id='t359' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t360' class='stm run hide_run'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>'http://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='strut'> </span></p> -<p id='t361' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t362' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t363' class='stm run hide_run'> <span class='nam'>video_webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t364' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t365' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t366' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t367' class='pln'><span class='strut'> </span></p> -<p id='t368' class='stm run hide_run'> <span class='nam'>video_webpage</span> <span class='op'>=</span> <span class='nam'>video_webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='str'>'ignore'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t369' class='pln'><span class='strut'> </span></p> -<p id='t370' class='pln'> <span class='com'># Attempt to extract SWF player URL</span><span class='strut'> </span></p> -<p id='t371' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'swfConfig.*?"(http:\\/\\/.*?watch.*?-.*?\.swf)"'</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t372' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t373' class='stm mis'> <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>r'\\(.)'</span><span class='op'>,</span> <span class='str'>r'\1'</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t374' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t375' class='stm run hide_run'> <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t376' class='pln'><span class='strut'> </span></p> -<p id='t377' class='pln'> <span class='com'># Get video info</span><span class='strut'> </span></p> -<p id='t378' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_info_webpage_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t379' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>el_type</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>'&el=embedded'</span><span class='op'>,</span> <span class='str'>'&el=detailpage'</span><span class='op'>,</span> <span class='str'>'&el=vevo'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t380' class='stm run hide_run'> <span class='nam'>video_info_url</span> <span class='op'>=</span> <span class='op'>(</span><span class='str'>'http://www.youtube.com/get_video_info?&video_id=%s%s&ps=default&eurl=&gl=US&hl=en'</span><span class='strut'> </span></p> -<p id='t381' class='pln'> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>el_type</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t382' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>video_info_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t383' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t384' class='stm run hide_run'> <span class='nam'>video_info_webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t385' class='stm run hide_run'> <span class='nam'>video_info_webpage</span> <span class='op'>=</span> <span class='nam'>video_info_webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='str'>'ignore'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t386' class='stm run hide_run'> <span class='nam'>video_info</span> <span class='op'>=</span> <span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>video_info_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t387' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'token'</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t388' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t389' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t390' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video info webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t391' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t392' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'token'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t393' class='stm mis'> <span class='key'>if</span> <span class='str'>'reason'</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t394' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: YouTube said: %s'</span> <span class='op'>%</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'reason'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t395' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t396' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: "token" parameter not in video info for unknown reason'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t397' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t398' class='pln'><span class='strut'> </span></p> -<p id='t399' class='pln'> <span class='com'># Check for "rental" videos</span><span class='strut'> </span></p> -<p id='t400' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'ypc_video_rental_bar_text'</span> <span class='key'>in</span> <span class='nam'>video_info</span> <span class='key'>and</span> <span class='str'>'author'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t401' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: "rental" videos not supported'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t402' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t403' class='pln'><span class='strut'> </span></p> -<p id='t404' class='pln'> <span class='com'># Start extracting information</span><span class='strut'> </span></p> -<p id='t405' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t406' class='pln'><span class='strut'> </span></p> -<p id='t407' class='pln'> <span class='com'># uploader</span><span class='strut'> </span></p> -<p id='t408' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'author'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t409' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract uploader name'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t410' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t411' class='stm run hide_run'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'author'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t412' class='pln'><span class='strut'> </span></p> -<p id='t413' class='pln'> <span class='com'># uploader_id</span><span class='strut'> </span></p> -<p id='t414' class='stm run hide_run'> <span class='nam'>video_uploader_id</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t415' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<link itemprop="url" href="http://www.youtube.com/(?:user|channel)/([^"]+)">'</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t416' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t417' class='stm run hide_run'> <span class='nam'>video_uploader_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t418' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t419' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'WARNING: unable to extract uploader nickname'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t420' class='pln'><span class='strut'> </span></p> -<p id='t421' class='pln'> <span class='com'># title</span><span class='strut'> </span></p> -<p id='t422' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'title'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t423' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t424' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t425' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t426' class='pln'><span class='strut'> </span></p> -<p id='t427' class='pln'> <span class='com'># thumbnail image</span><span class='strut'> </span></p> -<p id='t428' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'thumbnail_url'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t429' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'WARNING: unable to extract video thumbnail'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t430' class='stm mis'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t431' class='pln'> <span class='key'>else</span><span class='op'>:</span> <span class='com'># don't panic if we can't find it</span><span class='strut'> </span></p> -<p id='t432' class='stm run hide_run'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'thumbnail_url'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t433' class='pln'><span class='strut'> </span></p> -<p id='t434' class='pln'> <span class='com'># upload date</span><span class='strut'> </span></p> -<p id='t435' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t436' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'id="eow-date.*?>(.*?)</span>'</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t437' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t438' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='str'>' '</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>r'[/,-]'</span><span class='op'>,</span> <span class='str'>r' '</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t439' class='stm run hide_run'> <span class='nam'>format_expressions</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'%d %B %Y'</span><span class='op'>,</span> <span class='str'>'%B %d %Y'</span><span class='op'>,</span> <span class='str'>'%b %d %Y'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t440' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>expression</span> <span class='key'>in</span> <span class='nam'>format_expressions</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t441' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t442' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>upload_date</span><span class='op'>,</span> <span class='nam'>expression</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>'%Y%m%d'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t443' class='stm run hide_run'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t444' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t445' class='pln'><span class='strut'> </span></p> -<p id='t446' class='pln'> <span class='com'># description</span><span class='strut'> </span></p> -<p id='t447' class='stm run hide_run'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>get_element_by_id</span><span class='op'>(</span><span class='str'>"eow-description"</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t448' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>video_description</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t449' class='stm run hide_run'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>clean_html</span><span class='op'>(</span><span class='nam'>video_description</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t450' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t451' class='stm mis'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t452' class='pln'><span class='strut'> </span></p> -<p id='t453' class='pln'> <span class='com'># closed captions</span><span class='strut'> </span></p> -<p id='t454' class='stm run hide_run'> <span class='nam'>video_subtitles</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t455' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'writesubtitles'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t456' class='stm run hide_run'> <span class='op'>(</span><span class='nam'>srt_error</span><span class='op'>,</span> <span class='nam'>video_subtitles</span><span class='op'>)</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_extract_subtitles</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t457' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>srt_error</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t458' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='nam'>srt_error</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t459' class='pln'><span class='strut'> </span></p> -<p id='t460' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'length_seconds'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t461' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'WARNING: unable to extract video duration'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t462' class='stm mis'> <span class='nam'>video_duration</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t463' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t464' class='stm run hide_run'> <span class='nam'>video_duration</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'length_seconds'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t465' class='pln'><span class='strut'> </span></p> -<p id='t466' class='pln'> <span class='com'># token</span><span class='strut'> </span></p> -<p id='t467' class='stm run hide_run'> <span class='nam'>video_token</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'token'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t468' class='pln'><span class='strut'> </span></p> -<p id='t469' class='pln'> <span class='com'># Decide which formats to download</span><span class='strut'> </span></p> -<p id='t470' class='stm run hide_run'> <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t471' class='pln'><span class='strut'> </span></p> -<p id='t472' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'conn'</span> <span class='key'>in</span> <span class='nam'>video_info</span> <span class='key'>and</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'conn'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>'rtmp'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t473' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_rtmp_download</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t474' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'conn'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t475' class='stm run hide_run'> <span class='key'>elif</span> <span class='str'>'url_encoded_fmt_stream_map'</span> <span class='key'>in</span> <span class='nam'>video_info</span> <span class='key'>and</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'url_encoded_fmt_stream_map'</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t476' class='stm run hide_run'> <span class='nam'>url_data_strs</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'url_encoded_fmt_stream_map'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>','</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t477' class='stm run hide_run'> <span class='nam'>url_data</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>uds</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>uds</span> <span class='key'>in</span> <span class='nam'>url_data_strs</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t478' class='stm run hide_run'> <span class='nam'>url_data</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>ud</span> <span class='key'>for</span> <span class='nam'>ud</span> <span class='key'>in</span> <span class='nam'>url_data</span> <span class='key'>if</span> <span class='str'>'itag'</span> <span class='key'>in</span> <span class='nam'>ud</span> <span class='key'>and</span> <span class='str'>'url'</span> <span class='key'>in</span> <span class='nam'>ud</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t479' class='stm run hide_run'> <span class='nam'>url_map</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>ud</span><span class='op'>[</span><span class='str'>'itag'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>ud</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>'&signature='</span> <span class='op'>+</span> <span class='nam'>ud</span><span class='op'>[</span><span class='str'>'sig'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>ud</span> <span class='key'>in</span> <span class='nam'>url_data</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t480' class='pln'><span class='strut'> </span></p> -<p id='t481' class='stm run hide_run'> <span class='nam'>format_limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format_limit'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t482' class='stm run hide_run'> <span class='nam'>available_formats</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats_prefer_free</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'prefer_free_formats'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>else</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='strut'> </span></p> -<p id='t483' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>format_limit</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>format_limit</span> <span class='key'>in</span> <span class='nam'>available_formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t484' class='stm mis'> <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>available_formats</span><span class='op'>[</span><span class='nam'>available_formats</span><span class='op'>.</span><span class='nam'>index</span><span class='op'>(</span><span class='nam'>format_limit</span><span class='op'>)</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t485' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t486' class='stm run hide_run'> <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>available_formats</span><span class='strut'> </span></p> -<p id='t487' class='stm run hide_run'> <span class='nam'>existing_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>format_list</span> <span class='key'>if</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t488' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t489' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: no known formats available for video'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t490' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t491' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'listformats'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t492' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t493' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t494' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>'best'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t495' class='stm run hide_run'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># Best quality</span><span class='strut'> </span></p> -<p id='t496' class='stm mis'> <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>'worst'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t497' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># worst quality</span><span class='strut'> </span></p> -<p id='t498' class='stm mis'> <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>'-1'</span><span class='op'>,</span> <span class='str'>'all'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t499' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>f</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>f</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>f</span> <span class='key'>in</span> <span class='nam'>existing_formats</span><span class='op'>]</span> <span class='com'># All formats</span><span class='strut'> </span></p> -<p id='t500' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t501' class='pln'> <span class='com'># Specific formats. We pick the first in a slash-delimeted sequence.</span><span class='strut'> </span></p> -<p id='t502' class='pln'> <span class='com'># For example, if '1/2/3/4' is requested and '2' and '4' are available, we pick '2'.</span><span class='strut'> </span></p> -<p id='t503' class='stm mis'> <span class='nam'>req_formats</span> <span class='op'>=</span> <span class='nam'>req_format</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t504' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t505' class='stm mis'> <span class='key'>for</span> <span class='nam'>rf</span> <span class='key'>in</span> <span class='nam'>req_formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t506' class='stm mis'> <span class='key'>if</span> <span class='nam'>rf</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t507' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>rf</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>rf</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t508' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t509' class='stm mis'> <span class='key'>if</span> <span class='nam'>video_url_list</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t510' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: requested format not available'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t511' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t512' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t513' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: no conn or url_encoded_fmt_stream_map information found in video info'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t514' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t515' class='pln'><span class='strut'> </span></p> -<p id='t516' class='stm run hide_run'> <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t517' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>format_param</span><span class='op'>,</span> <span class='nam'>video_real_url</span> <span class='key'>in</span> <span class='nam'>video_url_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t518' class='pln'> <span class='com'># Extension</span><span class='strut'> </span></p> -<p id='t519' class='stm run hide_run'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>format_param</span><span class='op'>,</span> <span class='str'>'flv'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t520' class='pln'><span class='strut'> </span></p> -<p id='t521' class='stm run hide_run'> <span class='nam'>video_format</span> <span class='op'>=</span> <span class='str'>'{0} - {1}'</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>format_param</span> <span class='key'>if</span> <span class='nam'>format_param</span> <span class='key'>else</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t522' class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_dimensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>format_param</span><span class='op'>,</span> <span class='str'>'???'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t523' class='pln'><span class='strut'> </span></p> -<p id='t524' class='stm run hide_run'> <span class='nam'>results</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t525' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t526' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_real_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t527' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t528' class='pln'> <span class='str'>'uploader_id'</span><span class='op'>:</span> <span class='nam'>video_uploader_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t529' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t530' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t531' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t532' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='nam'>video_format</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t533' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t534' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t535' class='pln'> <span class='str'>'player_url'</span><span class='op'>:</span> <span class='nam'>player_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t536' class='pln'> <span class='str'>'subtitles'</span><span class='op'>:</span> <span class='nam'>video_subtitles</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t537' class='pln'> <span class='str'>'duration'</span><span class='op'>:</span> <span class='nam'>video_duration</span><span class='strut'> </span></p> -<p id='t538' class='pln'> <span class='op'>}</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t539' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>results</span><span class='strut'> </span></p> -<p id='t540' class='pln'><span class='strut'> </span></p> -<p id='t541' class='pln'><span class='strut'> </span></p> -<p id='t542' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MetacafeIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t543' class='pln'> <span class='str'>"""Information Extractor for metacafe.com."""</span><span class='strut'> </span></p> -<p id='t544' class='pln'><span class='strut'> </span></p> -<p id='t545' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?(?:www\.)?metacafe\.com/watch/([^/]+)/([^/]+)/.*'</span><span class='strut'> </span></p> -<p id='t546' class='stm run hide_run'> <span class='nam'>_DISCLAIMER</span> <span class='op'>=</span> <span class='str'>'http://www.metacafe.com/family_filter/'</span><span class='strut'> </span></p> -<p id='t547' class='stm run hide_run'> <span class='nam'>_FILTER_POST</span> <span class='op'>=</span> <span class='str'>'http://www.metacafe.com/f/index.php?inputType=filter&controllerGroup=user'</span><span class='strut'> </span></p> -<p id='t548' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'metacafe'</span><span class='strut'> </span></p> -<p id='t549' class='pln'><span class='strut'> </span></p> -<p id='t550' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t551' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t552' class='pln'><span class='strut'> </span></p> -<p id='t553' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_disclaimer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t554' class='pln'> <span class='str'>"""Report disclaimer retrieval."""</span><span class='strut'> </span></p> -<p id='t555' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[metacafe] Retrieving disclaimer'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t556' class='pln'><span class='strut'> </span></p> -<p id='t557' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t558' class='pln'> <span class='str'>"""Report attempt to confirm age."""</span><span class='strut'> </span></p> -<p id='t559' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[metacafe] Confirming age'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t560' class='pln'><span class='strut'> </span></p> -<p id='t561' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t562' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t563' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[metacafe] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t564' class='pln'><span class='strut'> </span></p> -<p id='t565' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t566' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t567' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[metacafe] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t568' class='pln'><span class='strut'> </span></p> -<p id='t569' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t570' class='pln'> <span class='com'># Retrieve disclaimer</span><span class='strut'> </span></p> -<p id='t571' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_DISCLAIMER</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t572' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t573' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_disclaimer</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t574' class='stm run hide_run'> <span class='nam'>disclaimer</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t575' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t576' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to retrieve disclaimer: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t577' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t578' class='pln'><span class='strut'> </span></p> -<p id='t579' class='pln'> <span class='com'># Confirm age</span><span class='strut'> </span></p> -<p id='t580' class='stm run hide_run'> <span class='nam'>disclaimer_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t581' class='pln'> <span class='str'>'filters'</span><span class='op'>:</span> <span class='str'>'0'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t582' class='pln'> <span class='str'>'submit'</span><span class='op'>:</span> <span class='str'>"Continue - I'm over 18"</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t583' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t584' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_FILTER_POST</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>disclaimer_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t585' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t586' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t587' class='stm run hide_run'> <span class='nam'>disclaimer</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t588' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t589' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to confirm age: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t590' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t591' class='pln'><span class='strut'> </span></p> -<p id='t592' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t593' class='pln'> <span class='com'># Extract id and simplified title from URL</span><span class='strut'> </span></p> -<p id='t594' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t595' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t596' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t597' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t598' class='pln'><span class='strut'> </span></p> -<p id='t599' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t600' class='pln'><span class='strut'> </span></p> -<p id='t601' class='pln'> <span class='com'># Check if video comes from YouTube</span><span class='strut'> </span></p> -<p id='t602' class='stm run hide_run'> <span class='nam'>mobj2</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r'^yt-(.*)$'</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t603' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj2</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t604' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://www.youtube.com/watch?v=%s'</span> <span class='op'>%</span> <span class='nam'>mobj2</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t605' class='stm run hide_run'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t606' class='pln'><span class='strut'> </span></p> -<p id='t607' class='pln'> <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'> </span></p> -<p id='t608' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>'http://www.metacafe.com/watch/%s/'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t609' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t610' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t611' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t612' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t613' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t614' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t615' class='pln'><span class='strut'> </span></p> -<p id='t616' class='pln'> <span class='com'># Extract URL, uploader and title from webpage</span><span class='strut'> </span></p> -<p id='t617' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t618' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'(?m)&mediaURL=([^&]+)'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t619' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t620' class='stm mis'> <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t621' class='stm mis'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t622' class='pln'><span class='strut'> </span></p> -<p id='t623' class='pln'> <span class='com'># Extract gdaKey if available</span><span class='strut'> </span></p> -<p id='t624' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'(?m)&gdaKey=(.*?)&'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t625' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t626' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='strut'> </span></p> -<p id='t627' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t628' class='stm mis'> <span class='nam'>gdaKey</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t629' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>'%s?__gda__=%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>mediaURL</span><span class='op'>,</span> <span class='nam'>gdaKey</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t630' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t631' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r' name="flashvars" value="(.*?)"'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t632' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t633' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t634' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t635' class='stm mis'> <span class='nam'>vardict</span> <span class='op'>=</span> <span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t636' class='stm mis'> <span class='key'>if</span> <span class='str'>'mediaData'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>vardict</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t637' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t638' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t639' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'"mediaURL":"(http.*?)","key":"(.*?)"'</span><span class='op'>,</span> <span class='nam'>vardict</span><span class='op'>[</span><span class='str'>'mediaData'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t640' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t641' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t642' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t643' class='stm mis'> <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'\\/'</span><span class='op'>,</span> <span class='str'>'/'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t644' class='stm mis'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t645' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>'%s?__gda__=%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>mediaURL</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t646' class='pln'><span class='strut'> </span></p> -<p id='t647' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'(?im)<title>(.*) - Video</title>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t648' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t649' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t650' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t651' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t652' class='pln'><span class='strut'> </span></p> -<p id='t653' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'submitter=(.*?);'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t654' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t655' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract uploader nickname'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t656' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t657' class='stm mis'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t658' class='pln'><span class='strut'> </span></p> -<p id='t659' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t660' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t661' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t662' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t663' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t664' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t665' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t666' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t667' class='pln'><span class='strut'> </span></p> -<p id='t668' class='pln'><span class='strut'> </span></p> -<p id='t669' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DailymotionIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t670' class='pln'> <span class='str'>"""Information Extractor for Dailymotion"""</span><span class='strut'> </span></p> -<p id='t671' class='pln'><span class='strut'> </span></p> -<p id='t672' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?i)(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/video/([^/]+)'</span><span class='strut'> </span></p> -<p id='t673' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'dailymotion'</span><span class='strut'> </span></p> -<p id='t674' class='pln'><span class='strut'> </span></p> -<p id='t675' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t676' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t677' class='pln'><span class='strut'> </span></p> -<p id='t678' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t679' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t680' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[dailymotion] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t681' class='pln'><span class='strut'> </span></p> -<p id='t682' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t683' class='pln'> <span class='com'># Extract id and simplified title from URL</span><span class='strut'> </span></p> -<p id='t684' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t685' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t686' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t687' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t688' class='pln'><span class='strut'> </span></p> -<p id='t689' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'_'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'?'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t690' class='pln'><span class='strut'> </span></p> -<p id='t691' class='stm run hide_run'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>'mp4'</span><span class='strut'> </span></p> -<p id='t692' class='pln'><span class='strut'> </span></p> -<p id='t693' class='pln'> <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'> </span></p> -<p id='t694' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t695' class='stm run hide_run'> <span class='nam'>request</span><span class='op'>.</span><span class='nam'>add_header</span><span class='op'>(</span><span class='str'>'Cookie'</span><span class='op'>,</span> <span class='str'>'family_filter=off'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t696' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t697' class='pln'><span class='strut'> </span></p> -<p id='t698' class='pln'> <span class='com'># Extract URL, uploader and title from webpage</span><span class='strut'> </span></p> -<p id='t699' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t700' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'\s*var flashvars = (.*)'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t701' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t702' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t703' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t704' class='stm run hide_run'> <span class='nam'>flashvars</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t705' class='pln'><span class='strut'> </span></p> -<p id='t706' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>'hd1080URL'</span><span class='op'>,</span> <span class='str'>'hd720URL'</span><span class='op'>,</span> <span class='str'>'hqURL'</span><span class='op'>,</span> <span class='str'>'sdURL'</span><span class='op'>,</span> <span class='str'>'ldURL'</span><span class='op'>,</span> <span class='str'>'video_url'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t707' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='nam'>flashvars</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t708' class='stm run hide_run'> <span class='nam'>max_quality</span> <span class='op'>=</span> <span class='nam'>key</span><span class='strut'> </span></p> -<p id='t709' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[dailymotion] Using %s'</span> <span class='op'>%</span> <span class='nam'>key</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t710' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t711' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t712' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t713' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t714' class='pln'><span class='strut'> </span></p> -<p id='t715' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'"'</span> <span class='op'>+</span> <span class='nam'>max_quality</span> <span class='op'>+</span> <span class='str'>r'":"(.+?)"'</span><span class='op'>,</span> <span class='nam'>flashvars</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t716' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t717' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t718' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t719' class='pln'><span class='strut'> </span></p> -<p id='t720' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'\\/'</span><span class='op'>,</span> <span class='str'>'/'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t721' class='pln'><span class='strut'> </span></p> -<p id='t722' class='pln'> <span class='com'># TODO: support choosing qualities</span><span class='strut'> </span></p> -<p id='t723' class='pln'><span class='strut'> </span></p> -<p id='t724' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta property="og:title" content="(?P<title>[^"]*)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t725' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t726' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t727' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t728' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'title'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t729' class='pln'><span class='strut'> </span></p> -<p id='t730' class='stm run hide_run'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t731' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'(?im)<span class="owner[^\"]+?">[^<]+?<a [^>]+?>([^<]+?)</a>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t732' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t733' class='pln'> <span class='com'># lookin for official user</span><span class='strut'> </span></p> -<p id='t734' class='stm mis'> <span class='nam'>mobj_official</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<span rel="author"[^>]+?>([^<]+?)</span>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t735' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj_official</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t736' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'WARNING: unable to extract uploader nickname'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t737' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t738' class='stm mis'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj_official</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t739' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t740' class='stm run hide_run'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t741' class='pln'><span class='strut'> </span></p> -<p id='t742' class='stm run hide_run'> <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t743' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<div class="[^"]*uploaded_cont[^"]*" title="[^"]*">([0-9]{2})-([0-9]{2})-([0-9]{4})</div>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t744' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t745' class='stm mis'> <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t746' class='pln'><span class='strut'> </span></p> -<p id='t747' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t748' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t749' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t750' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t751' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>video_upload_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t752' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t753' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t754' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t755' class='pln'><span class='strut'> </span></p> -<p id='t756' class='pln'><span class='strut'> </span></p> -<p id='t757' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>PhotobucketIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t758' class='pln'> <span class='str'>"""Information extractor for photobucket.com."""</span><span class='strut'> </span></p> -<p id='t759' class='pln'><span class='strut'> </span></p> -<p id='t760' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?(?:[a-z0-9]+\.)?photobucket\.com/.*[\?\&]current=(.*\.flv)'</span><span class='strut'> </span></p> -<p id='t761' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'photobucket'</span><span class='strut'> </span></p> -<p id='t762' class='pln'><span class='strut'> </span></p> -<p id='t763' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t764' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t765' class='pln'><span class='strut'> </span></p> -<p id='t766' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t767' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t768' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[photobucket] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t769' class='pln'><span class='strut'> </span></p> -<p id='t770' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t771' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t772' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[photobucket] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t773' class='pln'><span class='strut'> </span></p> -<p id='t774' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t775' class='pln'> <span class='com'># Extract id from URL</span><span class='strut'> </span></p> -<p id='t776' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t777' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t778' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t779' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t780' class='pln'><span class='strut'> </span></p> -<p id='t781' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t782' class='pln'><span class='strut'> </span></p> -<p id='t783' class='stm mis'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>'flv'</span><span class='strut'> </span></p> -<p id='t784' class='pln'><span class='strut'> </span></p> -<p id='t785' class='pln'> <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'> </span></p> -<p id='t786' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t787' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t788' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t789' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t790' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t791' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t792' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t793' class='pln'><span class='strut'> </span></p> -<p id='t794' class='pln'> <span class='com'># Extract URL, uploader, and title from webpage</span><span class='strut'> </span></p> -<p id='t795' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t796' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<link rel="video_src" href=".*\?file=([^"]+)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t797' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t798' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t799' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t800' class='stm mis'> <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t801' class='pln'><span class='strut'> </span></p> -<p id='t802' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='strut'> </span></p> -<p id='t803' class='pln'><span class='strut'> </span></p> -<p id='t804' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<title>(.*) video by (.*) - Photobucket</title>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t805' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t806' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t807' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t808' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t809' class='pln'><span class='strut'> </span></p> -<p id='t810' class='stm mis'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t811' class='pln'><span class='strut'> </span></p> -<p id='t812' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t813' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t814' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t815' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t816' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t817' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t818' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t819' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t820' class='pln'><span class='strut'> </span></p> -<p id='t821' class='pln'><span class='strut'> </span></p> -<p id='t822' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YahooIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t823' class='pln'> <span class='str'>"""Information extractor for video.yahoo.com."""</span><span class='strut'> </span></p> -<p id='t824' class='pln'><span class='strut'> </span></p> -<p id='t825' class='stm run hide_run'> <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t826' class='pln'> <span class='com'># _VALID_URL matches all Yahoo! Video URLs</span><span class='strut'> </span></p> -<p id='t827' class='pln'> <span class='com'># _VPAGE_URL matches only the extractable '/watch/' URLs</span><span class='strut'> </span></p> -<p id='t828' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?(?:[a-z]+\.)?video\.yahoo\.com/(?:watch|network)/([0-9]+)(?:/|\?v=)([0-9]+)(?:[#\?].*)?'</span><span class='strut'> </span></p> -<p id='t829' class='stm run hide_run'> <span class='nam'>_VPAGE_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?video\.yahoo\.com/watch/([0-9]+)/([0-9]+)(?:[#\?].*)?'</span><span class='strut'> </span></p> -<p id='t830' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'video.yahoo'</span><span class='strut'> </span></p> -<p id='t831' class='pln'><span class='strut'> </span></p> -<p id='t832' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t833' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t834' class='pln'><span class='strut'> </span></p> -<p id='t835' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t836' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t837' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[video.yahoo] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t838' class='pln'><span class='strut'> </span></p> -<p id='t839' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t840' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t841' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[video.yahoo] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t842' class='pln'><span class='strut'> </span></p> -<p id='t843' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>new_video</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t844' class='pln'> <span class='com'># Extract ID from URL</span><span class='strut'> </span></p> -<p id='t845' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t846' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t847' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t848' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t849' class='pln'><span class='strut'> </span></p> -<p id='t850' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t851' class='stm mis'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>'flv'</span><span class='strut'> </span></p> -<p id='t852' class='pln'><span class='strut'> </span></p> -<p id='t853' class='pln'> <span class='com'># Rewrite valid but non-extractable URLs as</span><span class='strut'> </span></p> -<p id='t854' class='pln'> <span class='com'># extractable English language /watch/ URLs</span><span class='strut'> </span></p> -<p id='t855' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VPAGE_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t856' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t857' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t858' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t859' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t860' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t861' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t862' class='pln'><span class='strut'> </span></p> -<p id='t863' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'\("id", "([0-9]+)"\);'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t864' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t865' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to extract id field'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t866' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t867' class='stm mis'> <span class='nam'>yahoo_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t868' class='pln'><span class='strut'> </span></p> -<p id='t869' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'\("vid", "([0-9]+)"\);'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t870' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t871' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to extract vid field'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t872' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t873' class='stm mis'> <span class='nam'>yahoo_vid</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t874' class='pln'><span class='strut'> </span></p> -<p id='t875' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>'http://video.yahoo.com/watch/%s/%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>yahoo_vid</span><span class='op'>,</span> <span class='nam'>yahoo_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t876' class='stm mis'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>new_video</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t877' class='pln'><span class='strut'> </span></p> -<p id='t878' class='pln'> <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'> </span></p> -<p id='t879' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t880' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t881' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t882' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t883' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t884' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t885' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t886' class='pln'><span class='strut'> </span></p> -<p id='t887' class='pln'> <span class='com'># Extract uploader and title from webpage</span><span class='strut'> </span></p> -<p id='t888' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t889' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="title" content="(.*)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t890' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t891' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t892' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t893' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t894' class='pln'><span class='strut'> </span></p> -<p id='t895' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<h2 class="ti-5"><a href="http://video\.yahoo\.com/(people|profile)/[0-9]+" beacon=".*">(.*)</a></h2>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t896' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t897' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video uploader'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t898' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t899' class='stm mis'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t900' class='pln'><span class='strut'> </span></p> -<p id='t901' class='pln'> <span class='com'># Extract video thumbnail</span><span class='strut'> </span></p> -<p id='t902' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<link rel="image_src" href="(.*)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t903' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t904' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video thumbnail'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t905' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t906' class='stm mis'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t907' class='pln'><span class='strut'> </span></p> -<p id='t908' class='pln'> <span class='com'># Extract video description</span><span class='strut'> </span></p> -<p id='t909' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="description" content="(.*)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t910' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t911' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video description'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t912' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t913' class='stm mis'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t914' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>video_description</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t915' class='stm mis'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>'No description available.'</span><span class='strut'> </span></p> -<p id='t916' class='pln'><span class='strut'> </span></p> -<p id='t917' class='pln'> <span class='com'># Extract video height and width</span><span class='strut'> </span></p> -<p id='t918' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="video_height" content="([0-9]+)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t919' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t920' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video height'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t921' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t922' class='stm mis'> <span class='nam'>yv_video_height</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t923' class='pln'><span class='strut'> </span></p> -<p id='t924' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="video_width" content="([0-9]+)" />'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t925' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t926' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video width'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t927' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t928' class='stm mis'> <span class='nam'>yv_video_width</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t929' class='pln'><span class='strut'> </span></p> -<p id='t930' class='pln'> <span class='com'># Retrieve video playlist to extract media URL</span><span class='strut'> </span></p> -<p id='t931' class='pln'> <span class='com'># I'm not completely sure what all these options are, but we</span><span class='strut'> </span></p> -<p id='t932' class='pln'> <span class='com'># seem to need most of them, otherwise the server sends a 401.</span><span class='strut'> </span></p> -<p id='t933' class='stm mis'> <span class='nam'>yv_lg</span> <span class='op'>=</span> <span class='str'>'R0xx6idZnW2zlrKP8xxAIR'</span> <span class='com'># not sure what this represents</span><span class='strut'> </span></p> -<p id='t934' class='stm mis'> <span class='nam'>yv_bitrate</span> <span class='op'>=</span> <span class='str'>'700'</span> <span class='com'># according to Wikipedia this is hard-coded</span><span class='strut'> </span></p> -<p id='t935' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>'http://cosmos.bcst.yahoo.com/up/yep/process/getPlaylistFOP.php?node_id='</span> <span class='op'>+</span> <span class='nam'>video_id</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t936' class='pln'> <span class='str'>'&tech=flash&mode=playlist&lg='</span> <span class='op'>+</span> <span class='nam'>yv_lg</span> <span class='op'>+</span> <span class='str'>'&bitrate='</span> <span class='op'>+</span> <span class='nam'>yv_bitrate</span> <span class='op'>+</span> <span class='str'>'&vidH='</span> <span class='op'>+</span> <span class='nam'>yv_video_height</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t937' class='pln'> <span class='str'>'&vidW='</span> <span class='op'>+</span> <span class='nam'>yv_video_width</span> <span class='op'>+</span> <span class='str'>'&swf=as3&rd=video.yahoo.com&tk=null&adsupported=v1,v2,&eventid=1301797'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t938' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t939' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t940' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t941' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t942' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t943' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t944' class='pln'><span class='strut'> </span></p> -<p id='t945' class='pln'> <span class='com'># Extract media URL from playlist XML</span><span class='strut'> </span></p> -<p id='t946' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<STREAM APP="(http://.*)" FULLPATH="/?(/.*\.flv\?[^"]*)"'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t947' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t948' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t949' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t950' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t951' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t952' class='pln'><span class='strut'> </span></p> -<p id='t953' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t954' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t955' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t956' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t957' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t958' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t959' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t960' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t961' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t962' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t963' class='pln'><span class='strut'> </span></p> -<p id='t964' class='pln'><span class='strut'> </span></p> -<p id='t965' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>VimeoIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t966' class='pln'> <span class='str'>"""Information extractor for vimeo.com."""</span><span class='strut'> </span></p> -<p id='t967' class='pln'><span class='strut'> </span></p> -<p id='t968' class='pln'> <span class='com'># _VALID_URL matches Vimeo URLs</span><span class='strut'> </span></p> -<p id='t969' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:https?://)?(?:(?:www|player).)?vimeo\.com/(?:(?:groups|album)/[^/]+/)?(?:videos?/)?([0-9]+)'</span><span class='strut'> </span></p> -<p id='t970' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'vimeo'</span><span class='strut'> </span></p> -<p id='t971' class='pln'><span class='strut'> </span></p> -<p id='t972' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t973' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t974' class='pln'><span class='strut'> </span></p> -<p id='t975' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t976' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t977' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[vimeo] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t978' class='pln'><span class='strut'> </span></p> -<p id='t979' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t980' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t981' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[vimeo] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t982' class='pln'><span class='strut'> </span></p> -<p id='t983' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>new_video</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t984' class='pln'> <span class='com'># Extract ID from URL</span><span class='strut'> </span></p> -<p id='t985' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t986' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t987' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t988' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t989' class='pln'><span class='strut'> </span></p> -<p id='t990' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t991' class='pln'><span class='strut'> </span></p> -<p id='t992' class='pln'> <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'> </span></p> -<p id='t993' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>std_headers</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t994' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t995' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t996' class='stm run hide_run'> <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t997' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t998' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t999' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1000' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1001' class='pln'><span class='strut'> </span></p> -<p id='t1002' class='pln'> <span class='com'># Now we begin extracting as much information as we can from what we</span><span class='strut'> </span></p> -<p id='t1003' class='pln'> <span class='com'># retrieved. First we extract the information common to all extractors,</span><span class='strut'> </span></p> -<p id='t1004' class='pln'> <span class='com'># and latter we extract those that are Vimeo specific.</span><span class='strut'> </span></p> -<p id='t1005' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1006' class='pln'><span class='strut'> </span></p> -<p id='t1007' class='pln'> <span class='com'># Extract the config JSON</span><span class='strut'> </span></p> -<p id='t1008' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1009' class='stm run hide_run'> <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>webpage</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>' = {config:'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>',assets:'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1010' class='stm run hide_run'> <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>config</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1011' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1012' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract info section'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1013' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1014' class='pln'><span class='strut'> </span></p> -<p id='t1015' class='pln'> <span class='com'># Extract title</span><span class='strut'> </span></p> -<p id='t1016' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"title"</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1017' class='pln'><span class='strut'> </span></p> -<p id='t1018' class='pln'> <span class='com'># Extract uploader and uploader_id</span><span class='strut'> </span></p> -<p id='t1019' class='stm run hide_run'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"owner"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"name"</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1020' class='stm run hide_run'> <span class='nam'>video_uploader_id</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"owner"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"url"</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1021' class='pln'><span class='strut'> </span></p> -<p id='t1022' class='pln'> <span class='com'># Extract video thumbnail</span><span class='strut'> </span></p> -<p id='t1023' class='stm run hide_run'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"thumbnail"</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1024' class='pln'><span class='strut'> </span></p> -<p id='t1025' class='pln'> <span class='com'># Extract video description</span><span class='strut'> </span></p> -<p id='t1026' class='stm run hide_run'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>get_element_by_attribute</span><span class='op'>(</span><span class='str'>"itemprop"</span><span class='op'>,</span> <span class='str'>"description"</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1027' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>video_description</span><span class='op'>:</span> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>clean_html</span><span class='op'>(</span><span class='nam'>video_description</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1028' class='stm mis'> <span class='key'>else</span><span class='op'>:</span> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t1029' class='pln'><span class='strut'> </span></p> -<p id='t1030' class='pln'> <span class='com'># Extract upload date</span><span class='strut'> </span></p> -<p id='t1031' class='stm run hide_run'> <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t1032' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta itemprop="dateCreated" content="(\d{4})-(\d{2})-(\d{2})T'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1033' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1034' class='stm run hide_run'> <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1035' class='pln'><span class='strut'> </span></p> -<p id='t1036' class='pln'> <span class='com'># Vimeo specific: extract request signature and timestamp</span><span class='strut'> </span></p> -<p id='t1037' class='stm run hide_run'> <span class='nam'>sig</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'request'</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'signature'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1038' class='stm run hide_run'> <span class='nam'>timestamp</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'request'</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'timestamp'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1039' class='pln'><span class='strut'> </span></p> -<p id='t1040' class='pln'> <span class='com'># Vimeo specific: extract video codec and quality information</span><span class='strut'> </span></p> -<p id='t1041' class='pln'> <span class='com'># First consider quality, then codecs, then take everything</span><span class='strut'> </span></p> -<p id='t1042' class='pln'> <span class='com'># TODO bind to format param</span><span class='strut'> </span></p> -<p id='t1043' class='stm run hide_run'> <span class='nam'>codecs</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='str'>'h264'</span><span class='op'>,</span> <span class='str'>'mp4'</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='str'>'vp8'</span><span class='op'>,</span> <span class='str'>'flv'</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='str'>'vp6'</span><span class='op'>,</span> <span class='str'>'flv'</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1044' class='stm run hide_run'> <span class='nam'>files</span> <span class='op'>=</span> <span class='op'>{</span> <span class='str'>'hd'</span><span class='op'>:</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>'sd'</span><span class='op'>:</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>'other'</span><span class='op'>:</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t1045' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span> <span class='key'>in</span> <span class='nam'>codecs</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1046' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>codec_name</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"files"</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1047' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'hd'</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"files"</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>codec_name</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1048' class='stm run hide_run'> <span class='nam'>files</span><span class='op'>[</span><span class='str'>'hd'</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span><span class='op'>,</span> <span class='str'>'hd'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1049' class='stm mis'> <span class='key'>elif</span> <span class='str'>'sd'</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"files"</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>codec_name</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1050' class='stm mis'> <span class='nam'>files</span><span class='op'>[</span><span class='str'>'sd'</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span><span class='op'>,</span> <span class='str'>'sd'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1051' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1052' class='stm mis'> <span class='nam'>files</span><span class='op'>[</span><span class='str'>'other'</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span><span class='op'>,</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>"video"</span><span class='op'>]</span><span class='op'>[</span><span class='str'>"files"</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>codec_name</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1053' class='pln'><span class='strut'> </span></p> -<p id='t1054' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>quality</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>'hd'</span><span class='op'>,</span> <span class='str'>'sd'</span><span class='op'>,</span> <span class='str'>'other'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1055' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1056' class='stm run hide_run'> <span class='nam'>video_quality</span> <span class='op'>=</span> <span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1057' class='stm run hide_run'> <span class='nam'>video_codec</span> <span class='op'>=</span> <span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1058' class='stm run hide_run'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1059' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[vimeo] %s: Downloading %s file at %s quality'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>video_codec</span><span class='op'>.</span><span class='nam'>upper</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>video_quality</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1060' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t1061' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1062' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: no known codec found'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1063' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1064' class='pln'><span class='strut'> </span></p> -<p id='t1065' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>"http://player.vimeo.com/play_redirect?clip_id=%s&sig=%s&time=%s&quality=%s&codecs=%s&type=moogaloop_local&embed_location="</span> <span class='xx'>\</span><span class='strut'> </span></p> -<p id='t1066' class='pln'> <span class='op'>%</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>sig</span><span class='op'>,</span> <span class='nam'>timestamp</span><span class='op'>,</span> <span class='nam'>video_quality</span><span class='op'>,</span> <span class='nam'>video_codec</span><span class='op'>.</span><span class='nam'>upper</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1067' class='pln'><span class='strut'> </span></p> -<p id='t1068' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t1069' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1070' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1071' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1072' class='pln'> <span class='str'>'uploader_id'</span><span class='op'>:</span> <span class='nam'>video_uploader_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1073' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>video_upload_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1074' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1075' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1076' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1077' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1078' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1079' class='pln'><span class='strut'> </span></p> -<p id='t1080' class='pln'><span class='strut'> </span></p> -<p id='t1081' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ArteTvIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1082' class='pln'> <span class='str'>"""arte.tv information extractor."""</span><span class='strut'> </span></p> -<p id='t1083' class='pln'><span class='strut'> </span></p> -<p id='t1084' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?videos\.arte\.tv/(?:fr|de)/videos/.*'</span><span class='strut'> </span></p> -<p id='t1085' class='stm run hide_run'> <span class='nam'>_LIVE_URL</span> <span class='op'>=</span> <span class='str'>r'index-[0-9]+\.html$'</span><span class='strut'> </span></p> -<p id='t1086' class='pln'><span class='strut'> </span></p> -<p id='t1087' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'arte.tv'</span><span class='strut'> </span></p> -<p id='t1088' class='pln'><span class='strut'> </span></p> -<p id='t1089' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1090' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1091' class='pln'><span class='strut'> </span></p> -<p id='t1092' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1093' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t1094' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[arte.tv] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1095' class='pln'><span class='strut'> </span></p> -<p id='t1096' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1097' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t1098' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[arte.tv] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1099' class='pln'><span class='strut'> </span></p> -<p id='t1100' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>fetch_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1101' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1102' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1103' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1104' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1105' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1106' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1107' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1108' class='stm mis'> <span class='key'>except</span> <span class='nam'>ValueError</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1109' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1110' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1111' class='stm mis'> <span class='key'>return</span> <span class='nam'>webpage</span><span class='strut'> </span></p> -<p id='t1112' class='pln'><span class='strut'> </span></p> -<p id='t1113' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>grep_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>regex</span><span class='op'>,</span> <span class='nam'>regexFlags</span><span class='op'>,</span> <span class='nam'>matchTuples</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1114' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>fetch_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1115' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>regex</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>,</span> <span class='nam'>regexFlags</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1116' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t1117' class='pln'><span class='strut'> </span></p> -<p id='t1118' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1119' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1120' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1121' class='pln'><span class='strut'> </span></p> -<p id='t1122' class='stm mis'> <span class='key'>for</span> <span class='op'>(</span><span class='nam'>i</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>)</span> <span class='key'>in</span> <span class='nam'>matchTuples</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1123' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='nam'>i</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1124' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1125' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1126' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1127' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='nam'>key</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='nam'>i</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1128' class='pln'><span class='strut'> </span></p> -<p id='t1129' class='stm mis'> <span class='key'>return</span> <span class='nam'>info</span><span class='strut'> </span></p> -<p id='t1130' class='pln'><span class='strut'> </span></p> -<p id='t1131' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>extractLiveStream</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1132' class='stm mis'> <span class='nam'>video_lang</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>4</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1133' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'> </span></p> -<p id='t1134' class='pln'> <span class='nam'>url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1135' class='pln'> <span class='str'>r'src="(.*?/videothek_js.*?\.js)'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1136' class='pln'> <span class='num'>0</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1137' class='pln'> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t1138' class='pln'> <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>'url'</span><span class='op'>,</span> <span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1139' class='pln'> <span class='op'>]</span><span class='strut'> </span></p> -<p id='t1140' class='pln'> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t1141' class='stm mis'> <span class='nam'>http_host</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1142' class='stm mis'> <span class='nam'>next_url</span> <span class='op'>=</span> <span class='str'>'http://%s%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>http_host</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'url'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1143' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'> </span></p> -<p id='t1144' class='pln'> <span class='nam'>next_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1145' class='pln'> <span class='str'>r'(s_artestras_scst_geoFRDE_'</span> <span class='op'>+</span> <span class='nam'>video_lang</span> <span class='op'>+</span> <span class='str'>'.*?)\'.*?'</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t1146' class='pln'> <span class='str'>'(http://.*?\.swf).*?'</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t1147' class='pln'> <span class='str'>'(rtmp://.*?)\''</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1148' class='pln'> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1149' class='pln'> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t1150' class='pln'> <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>'path'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video path: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1151' class='pln'> <span class='op'>(</span><span class='num'>2</span><span class='op'>,</span> <span class='str'>'player'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video player: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1152' class='pln'> <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span> <span class='str'>'url'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video url: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1153' class='pln'> <span class='op'>]</span><span class='strut'> </span></p> -<p id='t1154' class='pln'> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t1155' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>u'%s/%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'url'</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'path'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1156' class='pln'><span class='strut'> </span></p> -<p id='t1157' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>extractPlus7Stream</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1158' class='stm mis'> <span class='nam'>video_lang</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1159' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'> </span></p> -<p id='t1160' class='pln'> <span class='nam'>url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1161' class='pln'> <span class='str'>r'param name="movie".*?videorefFileUrl=(http[^\'"&]*)'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1162' class='pln'> <span class='num'>0</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1163' class='pln'> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t1164' class='pln'> <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>'url'</span><span class='op'>,</span> <span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1165' class='pln'> <span class='op'>]</span><span class='strut'> </span></p> -<p id='t1166' class='pln'> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t1167' class='stm mis'> <span class='nam'>next_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'url'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1168' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'> </span></p> -<p id='t1169' class='pln'> <span class='nam'>next_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1170' class='pln'> <span class='str'>r'<video lang="%s" ref="(http[^\'"&]*)'</span> <span class='op'>%</span> <span class='nam'>video_lang</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1171' class='pln'> <span class='num'>0</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1172' class='pln'> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t1173' class='pln'> <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>'url'</span><span class='op'>,</span> <span class='str'>u'ERROR: Could not find <video> tag: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1174' class='pln'> <span class='op'>]</span><span class='strut'> </span></p> -<p id='t1175' class='pln'> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t1176' class='stm mis'> <span class='nam'>next_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'url'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1177' class='pln'><span class='strut'> </span></p> -<p id='t1178' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'> </span></p> -<p id='t1179' class='pln'> <span class='nam'>next_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1180' class='pln'> <span class='str'>r'<video id="(.*?)".*?>.*?'</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t1181' class='pln'> <span class='str'>'<name>(.*?)</name>.*?'</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t1182' class='pln'> <span class='str'>'<dateVideo>(.*?)</dateVideo>.*?'</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t1183' class='pln'> <span class='str'>'<url quality="hd">(.*?)</url>'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1184' class='pln'> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1185' class='pln'> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t1186' class='pln'> <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>'id'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video id: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1187' class='pln'> <span class='op'>(</span><span class='num'>2</span><span class='op'>,</span> <span class='str'>'title'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video title: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1188' class='pln'> <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span> <span class='str'>'date'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video date: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1189' class='pln'> <span class='op'>(</span><span class='num'>4</span><span class='op'>,</span> <span class='str'>'url'</span><span class='op'>,</span> <span class='str'>u'ERROR: could not extract video url: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1190' class='pln'> <span class='op'>]</span><span class='strut'> </span></p> -<p id='t1191' class='pln'> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t1192' class='pln'><span class='strut'> </span></p> -<p id='t1193' class='stm mis'> <span class='key'>return</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t1194' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'id'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1195' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'url'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1196' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='str'>u'arte.tv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1197' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'date'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1198' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'title'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1199' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>u'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1200' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='str'>u'NA'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1201' class='pln'> <span class='str'>'player_url'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1202' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t1203' class='pln'><span class='strut'> </span></p> -<p id='t1204' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1205' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1206' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1207' class='pln'><span class='strut'> </span></p> -<p id='t1208' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LIVE_URL</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1209' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extractLiveStream</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1210' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1211' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1212' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extractPlus7Stream</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1213' class='pln'><span class='strut'> </span></p> -<p id='t1214' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1215' class='pln'><span class='strut'> </span></p> -<p id='t1216' class='pln'><span class='strut'> </span></p> -<p id='t1217' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>GenericIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1218' class='pln'> <span class='str'>"""Generic last-resort information extractor."""</span><span class='strut'> </span></p> -<p id='t1219' class='pln'><span class='strut'> </span></p> -<p id='t1220' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'.*'</span><span class='strut'> </span></p> -<p id='t1221' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'generic'</span><span class='strut'> </span></p> -<p id='t1222' class='pln'><span class='strut'> </span></p> -<p id='t1223' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1224' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1225' class='pln'><span class='strut'> </span></p> -<p id='t1226' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1227' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t1228' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'WARNING: Falling back on generic information extractor.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1229' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[generic] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1230' class='pln'><span class='strut'> </span></p> -<p id='t1231' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1232' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t1233' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[generic] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1234' class='pln'><span class='strut'> </span></p> -<p id='t1235' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_following_redirect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new_url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1236' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t1237' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[redirect] Following redirect to %s'</span> <span class='op'>%</span> <span class='nam'>new_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1238' class='pln'><span class='strut'> </span></p> -<p id='t1239' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_test_redirect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1240' class='pln'> <span class='str'>"""Check if it is a redirect, like url shorteners, in case restart chain."""</span><span class='strut'> </span></p> -<p id='t1241' class='stm mis'> <span class='key'>class</span> <span class='nam'>HeadRequest</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1242' class='stm mis'> <span class='key'>def</span> <span class='nam'>get_method</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1243' class='stm mis'> <span class='key'>return</span> <span class='str'>"HEAD"</span><span class='strut'> </span></p> -<p id='t1244' class='pln'><span class='strut'> </span></p> -<p id='t1245' class='stm mis'> <span class='key'>class</span> <span class='nam'>HEADRedirectHandler</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPRedirectHandler</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1246' class='pln'> <span class='str'>"""</span><span class='strut'> </span></p> -<p id='t1247' class='pln'><span class='str'> Subclass the HTTPRedirectHandler to make it use our</span><span class='strut'> </span></p> -<p id='t1248' class='pln'><span class='str'> HeadRequest also on the redirected URL</span><span class='strut'> </span></p> -<p id='t1249' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t1250' class='stm mis'> <span class='key'>def</span> <span class='nam'>redirect_request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>req</span><span class='op'>,</span> <span class='nam'>fp</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>newurl</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1251' class='stm mis'> <span class='key'>if</span> <span class='nam'>code</span> <span class='key'>in</span> <span class='op'>(</span><span class='num'>301</span><span class='op'>,</span> <span class='num'>302</span><span class='op'>,</span> <span class='num'>303</span><span class='op'>,</span> <span class='num'>307</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1252' class='stm mis'> <span class='nam'>newurl</span> <span class='op'>=</span> <span class='nam'>newurl</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>' '</span><span class='op'>,</span> <span class='str'>'%20'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1253' class='stm mis'> <span class='nam'>newheaders</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1254' class='pln'> <span class='key'>if</span> <span class='nam'>k</span><span class='op'>.</span><span class='nam'>lower</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>"content-length"</span><span class='op'>,</span> <span class='str'>"content-type"</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1255' class='stm mis'> <span class='key'>return</span> <span class='nam'>HeadRequest</span><span class='op'>(</span><span class='nam'>newurl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1256' class='pln'> <span class='nam'>headers</span><span class='op'>=</span><span class='nam'>newheaders</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1257' class='pln'> <span class='nam'>origin_req_host</span><span class='op'>=</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_origin_req_host</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1258' class='pln'> <span class='nam'>unverifiable</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1259' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1260' class='stm mis'> <span class='key'>raise</span> <span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>HTTPError</span><span class='op'>(</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_full_url</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>fp</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1261' class='pln'><span class='strut'> </span></p> -<p id='t1262' class='stm mis'> <span class='key'>class</span> <span class='nam'>HTTPMethodFallback</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>BaseHandler</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1263' class='pln'> <span class='str'>"""</span><span class='strut'> </span></p> -<p id='t1264' class='pln'><span class='str'> Fallback to GET if HEAD is not allowed (405 HTTP error)</span><span class='strut'> </span></p> -<p id='t1265' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t1266' class='stm mis'> <span class='key'>def</span> <span class='nam'>http_error_405</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>req</span><span class='op'>,</span> <span class='nam'>fp</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1267' class='stm mis'> <span class='nam'>fp</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1268' class='stm mis'> <span class='nam'>fp</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1269' class='pln'><span class='strut'> </span></p> -<p id='t1270' class='stm mis'> <span class='nam'>newheaders</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1271' class='pln'> <span class='key'>if</span> <span class='nam'>k</span><span class='op'>.</span><span class='nam'>lower</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>"content-length"</span><span class='op'>,</span> <span class='str'>"content-type"</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1272' class='stm mis'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>parent</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_full_url</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1273' class='pln'> <span class='nam'>headers</span><span class='op'>=</span><span class='nam'>newheaders</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1274' class='pln'> <span class='nam'>origin_req_host</span><span class='op'>=</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_origin_req_host</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1275' class='pln'> <span class='nam'>unverifiable</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1276' class='pln'><span class='strut'> </span></p> -<p id='t1277' class='pln'> <span class='com'># Build our opener</span><span class='strut'> </span></p> -<p id='t1278' class='stm mis'> <span class='nam'>opener</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>OpenerDirector</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1279' class='stm mis'> <span class='key'>for</span> <span class='nam'>handler</span> <span class='key'>in</span> <span class='op'>[</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPHandler</span><span class='op'>,</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPDefaultErrorHandler</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1280' class='pln'> <span class='nam'>HTTPMethodFallback</span><span class='op'>,</span> <span class='nam'>HEADRedirectHandler</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1281' class='pln'> <span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>HTTPErrorProcessor</span><span class='op'>,</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPSHandler</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1282' class='stm mis'> <span class='nam'>opener</span><span class='op'>.</span><span class='nam'>add_handler</span><span class='op'>(</span><span class='nam'>handler</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1283' class='pln'><span class='strut'> </span></p> -<p id='t1284' class='stm mis'> <span class='nam'>response</span> <span class='op'>=</span> <span class='nam'>opener</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>HeadRequest</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1285' class='stm mis'> <span class='nam'>new_url</span> <span class='op'>=</span> <span class='nam'>response</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1286' class='pln'><span class='strut'> </span></p> -<p id='t1287' class='stm mis'> <span class='key'>if</span> <span class='nam'>url</span> <span class='op'>==</span> <span class='nam'>new_url</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1288' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t1289' class='pln'><span class='strut'> </span></p> -<p id='t1290' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_following_redirect</span><span class='op'>(</span><span class='nam'>new_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1291' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>new_url</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1292' class='stm mis'> <span class='key'>return</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t1293' class='pln'><span class='strut'> </span></p> -<p id='t1294' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1295' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_test_redirect</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1296' class='pln'><span class='strut'> </span></p> -<p id='t1297' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1298' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1299' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1300' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1301' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1302' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1303' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1304' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1305' class='stm mis'> <span class='key'>except</span> <span class='nam'>ValueError</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1306' class='pln'> <span class='com'># since this is the last-resort InfoExtractor, if</span><span class='strut'> </span></p> -<p id='t1307' class='pln'> <span class='com'># this error is thrown, it'll be thrown here</span><span class='strut'> </span></p> -<p id='t1308' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1309' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1310' class='pln'><span class='strut'> </span></p> -<p id='t1311' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1312' class='pln'> <span class='com'># Start with something easy: JW Player in SWFObject</span><span class='strut'> </span></p> -<p id='t1313' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1314' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1315' class='pln'> <span class='com'># Broaden the search a little bit</span><span class='strut'> </span></p> -<p id='t1316' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'[^A-Za-z0-9]?(?:file|source)=(http[^\'"&]*)'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1317' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1318' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1319' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1320' class='pln'><span class='strut'> </span></p> -<p id='t1321' class='pln'> <span class='com'># It's possible that one of the regexes</span><span class='strut'> </span></p> -<p id='t1322' class='pln'> <span class='com'># matched, but returned an empty group:</span><span class='strut'> </span></p> -<p id='t1323' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1324' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1325' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1326' class='pln'><span class='strut'> </span></p> -<p id='t1327' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1328' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>basename</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1329' class='pln'><span class='strut'> </span></p> -<p id='t1330' class='pln'> <span class='com'># here's a fun little line of code for you:</span><span class='strut'> </span></p> -<p id='t1331' class='stm mis'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1332' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1333' class='pln'><span class='strut'> </span></p> -<p id='t1334' class='pln'> <span class='com'># it's tempting to parse this further, but you would</span><span class='strut'> </span></p> -<p id='t1335' class='pln'> <span class='com'># have to take into account all the variations like</span><span class='strut'> </span></p> -<p id='t1336' class='pln'> <span class='com'># Video Title - Site Name</span><span class='strut'> </span></p> -<p id='t1337' class='pln'> <span class='com'># Site Name | Video Title</span><span class='strut'> </span></p> -<p id='t1338' class='pln'> <span class='com'># Video Title - Tagline | Site Name</span><span class='strut'> </span></p> -<p id='t1339' class='pln'> <span class='com'># and so on and so forth; it's just not practical</span><span class='strut'> </span></p> -<p id='t1340' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<title>(.*)</title>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1341' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1342' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1343' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1344' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1345' class='pln'><span class='strut'> </span></p> -<p id='t1346' class='pln'> <span class='com'># video uploader is domain name</span><span class='strut'> </span></p> -<p id='t1347' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r'(?:https?://)?([^/]*)/.*'</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1348' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1349' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1350' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1351' class='stm mis'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1352' class='pln'><span class='strut'> </span></p> -<p id='t1353' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t1354' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1355' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1356' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1357' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1358' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1359' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1360' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1361' class='pln'><span class='strut'> </span></p> -<p id='t1362' class='pln'><span class='strut'> </span></p> -<p id='t1363' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeSearchIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1364' class='pln'> <span class='str'>"""Information Extractor for YouTube search queries."""</span><span class='strut'> </span></p> -<p id='t1365' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'ytsearch(\d+|all)?:[\s\S]+'</span><span class='strut'> </span></p> -<p id='t1366' class='stm run hide_run'> <span class='nam'>_API_URL</span> <span class='op'>=</span> <span class='str'>'https://gdata.youtube.com/feeds/api/videos?q=%s&start-index=%i&max-results=50&v=2&alt=jsonc'</span><span class='strut'> </span></p> -<p id='t1367' class='stm run hide_run'> <span class='nam'>_max_youtube_results</span> <span class='op'>=</span> <span class='num'>1000</span><span class='strut'> </span></p> -<p id='t1368' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'youtube:search'</span><span class='strut'> </span></p> -<p id='t1369' class='pln'><span class='strut'> </span></p> -<p id='t1370' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1371' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1372' class='pln'><span class='strut'> </span></p> -<p id='t1373' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1374' class='pln'> <span class='str'>"""Report attempt to download search page with given number."""</span><span class='strut'> </span></p> -<p id='t1375' class='stm mis'> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1376' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] query "%s": Downloading page %s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1377' class='pln'><span class='strut'> </span></p> -<p id='t1378' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1379' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1380' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1381' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid search query "%s"'</span> <span class='op'>%</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1382' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1383' class='pln'><span class='strut'> </span></p> -<p id='t1384' class='stm mis'> <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>':'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1385' class='stm mis'> <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='num'>8</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1386' class='stm mis'> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1387' class='stm mis'> <span class='key'>if</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1388' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1389' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1390' class='stm mis'> <span class='key'>elif</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>'all'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1391' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1392' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1393' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1394' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1395' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1396' class='stm mis'> <span class='key'>if</span> <span class='nam'>n</span> <span class='op'><=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1397' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid download number %s for query "%s"'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1398' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1399' class='stm mis'> <span class='key'>elif</span> <span class='nam'>n</span> <span class='op'>></span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1400' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: ytsearch returns max %i results (you requested %i)'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1401' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='strut'> </span></p> -<p id='t1402' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1403' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1404' class='stm mis'> <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span> <span class='com'># parsing prefix as integer fails</span><span class='strut'> </span></p> -<p id='t1405' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1406' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1407' class='pln'><span class='strut'> </span></p> -<p id='t1408' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1409' class='pln'> <span class='str'>"""Downloads a specified number of results for a query"""</span><span class='strut'> </span></p> -<p id='t1410' class='pln'><span class='strut'> </span></p> -<p id='t1411' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1412' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t1413' class='stm mis'> <span class='nam'>limit</span> <span class='op'>=</span> <span class='nam'>n</span><span class='strut'> </span></p> -<p id='t1414' class='pln'><span class='strut'> </span></p> -<p id='t1415' class='stm mis'> <span class='key'>while</span> <span class='op'>(</span><span class='num'>50</span> <span class='op'>*</span> <span class='nam'>pagenum</span><span class='op'>)</span> <span class='op'><</span> <span class='nam'>limit</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1416' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>+</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1417' class='stm mis'> <span class='nam'>result_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_API_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>quote_plus</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='num'>50</span><span class='op'>*</span><span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>+</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1418' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>result_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1419' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1420' class='stm mis'> <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1421' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1422' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download API page: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1423' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1424' class='stm mis'> <span class='nam'>api_response</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>)</span><span class='op'>[</span><span class='str'>'data'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1425' class='pln'><span class='strut'> </span></p> -<p id='t1426' class='stm mis'> <span class='nam'>new_ids</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>video</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span> <span class='key'>for</span> <span class='nam'>video</span> <span class='key'>in</span> <span class='nam'>api_response</span><span class='op'>[</span><span class='str'>'items'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1427' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>+=</span> <span class='nam'>new_ids</span><span class='strut'> </span></p> -<p id='t1428' class='pln'><span class='strut'> </span></p> -<p id='t1429' class='stm mis'> <span class='nam'>limit</span> <span class='op'>=</span> <span class='nam'>min</span><span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>api_response</span><span class='op'>[</span><span class='str'>'totalItems'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1430' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1431' class='pln'><span class='strut'> </span></p> -<p id='t1432' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>></span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1433' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>n</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1434' class='stm mis'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1435' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://www.youtube.com/watch?v=%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1436' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1437' class='pln'><span class='strut'> </span></p> -<p id='t1438' class='pln'><span class='strut'> </span></p> -<p id='t1439' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>GoogleSearchIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1440' class='pln'> <span class='str'>"""Information Extractor for Google Video search queries."""</span><span class='strut'> </span></p> -<p id='t1441' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'gvsearch(\d+|all)?:[\s\S]+'</span><span class='strut'> </span></p> -<p id='t1442' class='stm run hide_run'> <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>'http://video.google.com/videosearch?q=%s+site:video.google.com&start=%s&hl=en'</span><span class='strut'> </span></p> -<p id='t1443' class='stm run hide_run'> <span class='nam'>_VIDEO_INDICATOR</span> <span class='op'>=</span> <span class='str'>r'<a href="http://video\.google\.com/videoplay\?docid=([^"\&]+)'</span><span class='strut'> </span></p> -<p id='t1444' class='stm run hide_run'> <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>r'class="pn" id="pnnext"'</span><span class='strut'> </span></p> -<p id='t1445' class='stm run hide_run'> <span class='nam'>_max_google_results</span> <span class='op'>=</span> <span class='num'>1000</span><span class='strut'> </span></p> -<p id='t1446' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'video.google:search'</span><span class='strut'> </span></p> -<p id='t1447' class='pln'><span class='strut'> </span></p> -<p id='t1448' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1449' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1450' class='pln'><span class='strut'> </span></p> -<p id='t1451' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1452' class='pln'> <span class='str'>"""Report attempt to download playlist page with given number."""</span><span class='strut'> </span></p> -<p id='t1453' class='stm mis'> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1454' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[video.google] query "%s": Downloading page %s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1455' class='pln'><span class='strut'> </span></p> -<p id='t1456' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1457' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1458' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1459' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid search query "%s"'</span> <span class='op'>%</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1460' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1461' class='pln'><span class='strut'> </span></p> -<p id='t1462' class='stm mis'> <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>':'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1463' class='stm mis'> <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='num'>8</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1464' class='stm mis'> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1465' class='stm mis'> <span class='key'>if</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1466' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1467' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1468' class='stm mis'> <span class='key'>elif</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>'all'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1469' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1470' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1471' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1472' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1473' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1474' class='stm mis'> <span class='key'>if</span> <span class='nam'>n</span> <span class='op'><=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1475' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid download number %s for query "%s"'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1476' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1477' class='stm mis'> <span class='key'>elif</span> <span class='nam'>n</span> <span class='op'>></span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1478' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: gvsearch returns max %i results (you requested %i)'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1479' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='strut'> </span></p> -<p id='t1480' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1481' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1482' class='stm mis'> <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span> <span class='com'># parsing prefix as integer fails</span><span class='strut'> </span></p> -<p id='t1483' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1484' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1485' class='pln'><span class='strut'> </span></p> -<p id='t1486' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1487' class='pln'> <span class='str'>"""Downloads a specified number of results for a query"""</span><span class='strut'> </span></p> -<p id='t1488' class='pln'><span class='strut'> </span></p> -<p id='t1489' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1490' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t1491' class='pln'><span class='strut'> </span></p> -<p id='t1492' class='stm mis'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1493' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1494' class='stm mis'> <span class='nam'>result_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>quote_plus</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>*</span><span class='num'>10</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1495' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>result_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1496' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1497' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1498' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1499' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1500' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1501' class='pln'><span class='strut'> </span></p> -<p id='t1502' class='pln'> <span class='com'># Extract video identifiers</span><span class='strut'> </span></p> -<p id='t1503' class='stm mis'> <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1504' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1505' class='stm mis'> <span class='key'>if</span> <span class='nam'>video_id</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1506' class='stm mis'> <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1507' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1508' class='pln'> <span class='com'># Specified n videos reached</span><span class='strut'> </span></p> -<p id='t1509' class='stm mis'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1510' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://video.google.com/videoplay?docid=%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1511' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1512' class='pln'><span class='strut'> </span></p> -<p id='t1513' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1514' class='stm mis'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1515' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://video.google.com/videoplay?docid=%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1516' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1517' class='pln'><span class='strut'> </span></p> -<p id='t1518' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1519' class='pln'><span class='strut'> </span></p> -<p id='t1520' class='pln'><span class='strut'> </span></p> -<p id='t1521' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YahooSearchIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1522' class='pln'> <span class='str'>"""Information Extractor for Yahoo! Video search queries."""</span><span class='strut'> </span></p> -<p id='t1523' class='pln'><span class='strut'> </span></p> -<p id='t1524' class='stm run hide_run'> <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t1525' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'yvsearch(\d+|all)?:[\s\S]+'</span><span class='strut'> </span></p> -<p id='t1526' class='stm run hide_run'> <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>'http://video.yahoo.com/search/?p=%s&o=%s'</span><span class='strut'> </span></p> -<p id='t1527' class='stm run hide_run'> <span class='nam'>_VIDEO_INDICATOR</span> <span class='op'>=</span> <span class='str'>r'href="http://video\.yahoo\.com/watch/([0-9]+/[0-9]+)"'</span><span class='strut'> </span></p> -<p id='t1528' class='stm run hide_run'> <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>r'\s*Next'</span><span class='strut'> </span></p> -<p id='t1529' class='stm run hide_run'> <span class='nam'>_max_yahoo_results</span> <span class='op'>=</span> <span class='num'>1000</span><span class='strut'> </span></p> -<p id='t1530' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'video.yahoo:search'</span><span class='strut'> </span></p> -<p id='t1531' class='pln'><span class='strut'> </span></p> -<p id='t1532' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1533' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1534' class='pln'><span class='strut'> </span></p> -<p id='t1535' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1536' class='pln'> <span class='str'>"""Report attempt to download playlist page with given number."""</span><span class='strut'> </span></p> -<p id='t1537' class='stm mis'> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1538' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[video.yahoo] query "%s": Downloading page %s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1539' class='pln'><span class='strut'> </span></p> -<p id='t1540' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1541' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1542' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1543' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid search query "%s"'</span> <span class='op'>%</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1544' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1545' class='pln'><span class='strut'> </span></p> -<p id='t1546' class='stm mis'> <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>':'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1547' class='stm mis'> <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='num'>8</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1548' class='stm mis'> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1549' class='stm mis'> <span class='key'>if</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1550' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1551' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1552' class='stm mis'> <span class='key'>elif</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>'all'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1553' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1554' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1555' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1556' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1557' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1558' class='stm mis'> <span class='key'>if</span> <span class='nam'>n</span> <span class='op'><=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1559' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid download number %s for query "%s"'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1560' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1561' class='stm mis'> <span class='key'>elif</span> <span class='nam'>n</span> <span class='op'>></span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1562' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: yvsearch returns max %i results (you requested %i)'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1563' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='strut'> </span></p> -<p id='t1564' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1565' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1566' class='stm mis'> <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span> <span class='com'># parsing prefix as integer fails</span><span class='strut'> </span></p> -<p id='t1567' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1568' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1569' class='pln'><span class='strut'> </span></p> -<p id='t1570' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1571' class='pln'> <span class='str'>"""Downloads a specified number of results for a query"""</span><span class='strut'> </span></p> -<p id='t1572' class='pln'><span class='strut'> </span></p> -<p id='t1573' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1574' class='stm mis'> <span class='nam'>already_seen</span> <span class='op'>=</span> <span class='nam'>set</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1575' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1576' class='pln'><span class='strut'> </span></p> -<p id='t1577' class='stm mis'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1578' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1579' class='stm mis'> <span class='nam'>result_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>quote_plus</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1580' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>result_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1581' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1582' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1583' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1584' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1585' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1586' class='pln'><span class='strut'> </span></p> -<p id='t1587' class='pln'> <span class='com'># Extract video identifiers</span><span class='strut'> </span></p> -<p id='t1588' class='stm mis'> <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1589' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1590' class='stm mis'> <span class='key'>if</span> <span class='nam'>video_id</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>already_seen</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1591' class='stm mis'> <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1592' class='stm mis'> <span class='nam'>already_seen</span><span class='op'>.</span><span class='nam'>add</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1593' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1594' class='pln'> <span class='com'># Specified n videos reached</span><span class='strut'> </span></p> -<p id='t1595' class='stm mis'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1596' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://video.yahoo.com/watch/%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1597' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1598' class='pln'><span class='strut'> </span></p> -<p id='t1599' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1600' class='stm mis'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1601' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://video.yahoo.com/watch/%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1602' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1603' class='pln'><span class='strut'> </span></p> -<p id='t1604' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1605' class='pln'><span class='strut'> </span></p> -<p id='t1606' class='pln'><span class='strut'> </span></p> -<p id='t1607' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubePlaylistIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1608' class='pln'> <span class='str'>"""Information Extractor for YouTube playlists."""</span><span class='strut'> </span></p> -<p id='t1609' class='pln'><span class='strut'> </span></p> -<p id='t1610' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:(?:https?://)?(?:\w+\.)?youtube\.com/(?:(?:course|view_play_list|my_playlists|artist|playlist)\?.*?(p|a|list)=|user/.*?/user/|p/|user/.*?#[pg]/c/)(?:PL|EC)?|PL|EC)([0-9A-Za-z-_]{10,})(?:/.*?/([0-9A-Za-z_-]+))?.*'</span><span class='strut'> </span></p> -<p id='t1611' class='stm run hide_run'> <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>'http://www.youtube.com/%s?%s=%s&page=%s&gl=US&hl=en'</span><span class='strut'> </span></p> -<p id='t1612' class='stm run hide_run'> <span class='nam'>_VIDEO_INDICATOR_TEMPLATE</span> <span class='op'>=</span> <span class='str'>r'/watch\?v=(.+?)&amp;([^&"]+&amp;)*list=.*?%s'</span><span class='strut'> </span></p> -<p id='t1613' class='stm run hide_run'> <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>u"Next \N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}"</span><span class='strut'> </span></p> -<p id='t1614' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'youtube:playlist'</span><span class='strut'> </span></p> -<p id='t1615' class='pln'><span class='strut'> </span></p> -<p id='t1616' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1617' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1618' class='pln'><span class='strut'> </span></p> -<p id='t1619' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1620' class='pln'> <span class='str'>"""Report attempt to download playlist page with given number."""</span><span class='strut'> </span></p> -<p id='t1621' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] PL %s: Downloading page #%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1622' class='pln'><span class='strut'> </span></p> -<p id='t1623' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1624' class='pln'> <span class='com'># Extract playlist id</span><span class='strut'> </span></p> -<p id='t1625' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1626' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1627' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid url: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1628' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1629' class='pln'><span class='strut'> </span></p> -<p id='t1630' class='pln'> <span class='com'># Single video case</span><span class='strut'> </span></p> -<p id='t1631' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1632' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1633' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1634' class='pln'><span class='strut'> </span></p> -<p id='t1635' class='pln'> <span class='com'># Download playlist pages</span><span class='strut'> </span></p> -<p id='t1636' class='pln'> <span class='com'># prefix is 'p' as default for playlists but there are other types that need extra care</span><span class='strut'> </span></p> -<p id='t1637' class='stm run hide_run'> <span class='nam'>playlist_prefix</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1638' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>playlist_prefix</span> <span class='op'>==</span> <span class='str'>'a'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1639' class='stm mis'> <span class='nam'>playlist_access</span> <span class='op'>=</span> <span class='str'>'artist'</span><span class='strut'> </span></p> -<p id='t1640' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1641' class='stm run hide_run'> <span class='nam'>playlist_prefix</span> <span class='op'>=</span> <span class='str'>'p'</span><span class='strut'> </span></p> -<p id='t1642' class='stm run hide_run'> <span class='nam'>playlist_access</span> <span class='op'>=</span> <span class='str'>'view_play_list'</span><span class='strut'> </span></p> -<p id='t1643' class='stm run hide_run'> <span class='nam'>playlist_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1644' class='stm run hide_run'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1645' class='stm run hide_run'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1646' class='pln'><span class='strut'> </span></p> -<p id='t1647' class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1648' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1649' class='stm run hide_run'> <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_access</span><span class='op'>,</span> <span class='nam'>playlist_prefix</span><span class='op'>,</span> <span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1650' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1651' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1652' class='stm run hide_run'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1653' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1654' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1655' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1656' class='pln'><span class='strut'> </span></p> -<p id='t1657' class='pln'> <span class='com'># Extract video identifiers</span><span class='strut'> </span></p> -<p id='t1658' class='stm run hide_run'> <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1659' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR_TEMPLATE</span> <span class='op'>%</span> <span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1660' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1661' class='stm run hide_run'> <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1662' class='stm run hide_run'> <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1663' class='pln'><span class='strut'> </span></p> -<p id='t1664' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>page</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1665' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t1666' class='stm run hide_run'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1667' class='pln'><span class='strut'> </span></p> -<p id='t1668' class='stm run hide_run'> <span class='nam'>total</span> <span class='op'>=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1669' class='pln'><span class='strut'> </span></p> -<p id='t1670' class='stm run hide_run'> <span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'playliststart'</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='op'>-</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1671' class='stm run hide_run'> <span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'playlistend'</span><span class='op'>,</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1672' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>playlistend</span> <span class='op'>==</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1673' class='stm run hide_run'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1674' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1675' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='nam'>playlistend</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1676' class='pln'><span class='strut'> </span></p> -<p id='t1677' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>total</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1678' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] PL %s: Found %i videos'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>total</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1679' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1680' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] PL %s: Found %i videos, downloading %i'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>total</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1681' class='pln'><span class='strut'> </span></p> -<p id='t1682' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1683' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://www.youtube.com/watch?v=%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1684' class='stm run hide_run'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1685' class='pln'><span class='strut'> </span></p> -<p id='t1686' class='pln'><span class='strut'> </span></p> -<p id='t1687' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeChannelIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1688' class='pln'> <span class='str'>"""Information Extractor for YouTube channels."""</span><span class='strut'> </span></p> -<p id='t1689' class='pln'><span class='strut'> </span></p> -<p id='t1690' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r"^(?:https?://)?(?:youtu\.be|(?:\w+\.)?youtube(?:-nocookie)?\.com)/channel/([0-9A-Za-z_-]+)(?:/.*)?$"</span><span class='strut'> </span></p> -<p id='t1691' class='stm run hide_run'> <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>'http://www.youtube.com/channel/%s/videos?sort=da&flow=list&view=0&page=%s&gl=US&hl=en'</span><span class='strut'> </span></p> -<p id='t1692' class='stm run hide_run'> <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>u"Next \N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}"</span><span class='strut'> </span></p> -<p id='t1693' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'youtube:channel'</span><span class='strut'> </span></p> -<p id='t1694' class='pln'><span class='strut'> </span></p> -<p id='t1695' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1696' class='pln'> <span class='str'>"""Report attempt to download channel page with given number."""</span><span class='strut'> </span></p> -<p id='t1697' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] Channel %s: Downloading page #%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1698' class='pln'><span class='strut'> </span></p> -<p id='t1699' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1700' class='pln'> <span class='com'># Extract channel id</span><span class='strut'> </span></p> -<p id='t1701' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1702' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1703' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid url: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1704' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1705' class='pln'><span class='strut'> </span></p> -<p id='t1706' class='pln'> <span class='com'># Download channel pages</span><span class='strut'> </span></p> -<p id='t1707' class='stm mis'> <span class='nam'>channel_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1708' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1709' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1710' class='pln'><span class='strut'> </span></p> -<p id='t1711' class='stm mis'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1712' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1713' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1714' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1715' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1716' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1717' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1718' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1719' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1720' class='pln'><span class='strut'> </span></p> -<p id='t1721' class='pln'> <span class='com'># Extract video identifiers</span><span class='strut'> </span></p> -<p id='t1722' class='stm mis'> <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1723' class='stm mis'> <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='str'>r'href="/watch\?v=([0-9A-Za-z_-]+)&'</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1724' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1725' class='stm mis'> <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1726' class='stm mis'> <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1727' class='pln'><span class='strut'> </span></p> -<p id='t1728' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>page</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1729' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t1730' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1731' class='pln'><span class='strut'> </span></p> -<p id='t1732' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] Channel %s: Found %i videos'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1733' class='pln'><span class='strut'> </span></p> -<p id='t1734' class='stm mis'> <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1735' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://www.youtube.com/watch?v=%s'</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1736' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1737' class='pln'><span class='strut'> </span></p> -<p id='t1738' class='pln'><span class='strut'> </span></p> -<p id='t1739' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeUserIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1740' class='pln'> <span class='str'>"""Information Extractor for YouTube users."""</span><span class='strut'> </span></p> -<p id='t1741' class='pln'><span class='strut'> </span></p> -<p id='t1742' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:(?:(?:https?://)?(?:\w+\.)?youtube\.com/user/)|ytuser:)([A-Za-z0-9_-]+)'</span><span class='strut'> </span></p> -<p id='t1743' class='stm run hide_run'> <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>'http://gdata.youtube.com/feeds/api/users/%s'</span><span class='strut'> </span></p> -<p id='t1744' class='stm run hide_run'> <span class='nam'>_GDATA_PAGE_SIZE</span> <span class='op'>=</span> <span class='num'>50</span><span class='strut'> </span></p> -<p id='t1745' class='stm run hide_run'> <span class='nam'>_GDATA_URL</span> <span class='op'>=</span> <span class='str'>'http://gdata.youtube.com/feeds/api/users/%s/uploads?max-results=%d&start-index=%d'</span><span class='strut'> </span></p> -<p id='t1746' class='stm run hide_run'> <span class='nam'>_VIDEO_INDICATOR</span> <span class='op'>=</span> <span class='str'>r'/watch\?v=(.+?)[\<&]'</span><span class='strut'> </span></p> -<p id='t1747' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'youtube:user'</span><span class='strut'> </span></p> -<p id='t1748' class='pln'><span class='strut'> </span></p> -<p id='t1749' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1750' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1751' class='pln'><span class='strut'> </span></p> -<p id='t1752' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1753' class='pln'> <span class='str'>"""Report attempt to download user page."""</span><span class='strut'> </span></p> -<p id='t1754' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] user %s: Downloading video ids from %d to %d'</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t1755' class='pln'> <span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>,</span> <span class='nam'>start_index</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1756' class='pln'><span class='strut'> </span></p> -<p id='t1757' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1758' class='pln'> <span class='com'># Extract username</span><span class='strut'> </span></p> -<p id='t1759' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1760' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1761' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid url: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1762' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1763' class='pln'><span class='strut'> </span></p> -<p id='t1764' class='stm run hide_run'> <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1765' class='pln'><span class='strut'> </span></p> -<p id='t1766' class='pln'> <span class='com'># Download video ids using YouTube Data API. Result size per</span><span class='strut'> </span></p> -<p id='t1767' class='pln'> <span class='com'># query is limited (currently to 50 videos) so we need to query</span><span class='strut'> </span></p> -<p id='t1768' class='pln'> <span class='com'># page by page until there are no video ids - it means we got</span><span class='strut'> </span></p> -<p id='t1769' class='pln'> <span class='com'># all of them.</span><span class='strut'> </span></p> -<p id='t1770' class='pln'><span class='strut'> </span></p> -<p id='t1771' class='stm run hide_run'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1772' class='stm run hide_run'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t1773' class='pln'><span class='strut'> </span></p> -<p id='t1774' class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1775' class='stm run hide_run'> <span class='nam'>start_index</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>*</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1776' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1777' class='pln'><span class='strut'> </span></p> -<p id='t1778' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1779' class='pln'><span class='strut'> </span></p> -<p id='t1780' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1781' class='stm run hide_run'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1782' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1783' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1784' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1785' class='pln'><span class='strut'> </span></p> -<p id='t1786' class='pln'> <span class='com'># Extract video identifiers</span><span class='strut'> </span></p> -<p id='t1787' class='stm run hide_run'> <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1788' class='pln'><span class='strut'> </span></p> -<p id='t1789' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1790' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1791' class='stm run hide_run'> <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1792' class='pln'><span class='strut'> </span></p> -<p id='t1793' class='stm run hide_run'> <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1794' class='pln'><span class='strut'> </span></p> -<p id='t1795' class='pln'> <span class='com'># A little optimization - if current page is not</span><span class='strut'> </span></p> -<p id='t1796' class='pln'> <span class='com'># "full", ie. does not contain PAGE_SIZE video ids then</span><span class='strut'> </span></p> -<p id='t1797' class='pln'> <span class='com'># we can assume that this page is the last one - there</span><span class='strut'> </span></p> -<p id='t1798' class='pln'> <span class='com'># are no more ids on further pages - no need to query</span><span class='strut'> </span></p> -<p id='t1799' class='pln'> <span class='com'># again.</span><span class='strut'> </span></p> -<p id='t1800' class='pln'><span class='strut'> </span></p> -<p id='t1801' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span> <span class='op'><</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1802' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t1803' class='pln'><span class='strut'> </span></p> -<p id='t1804' class='stm run hide_run'> <span class='nam'>pagenum</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1805' class='pln'><span class='strut'> </span></p> -<p id='t1806' class='stm run hide_run'> <span class='nam'>all_ids_count</span> <span class='op'>=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1807' class='stm run hide_run'> <span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'playliststart'</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='op'>-</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1808' class='stm run hide_run'> <span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'playlistend'</span><span class='op'>,</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1809' class='pln'><span class='strut'> </span></p> -<p id='t1810' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>playlistend</span> <span class='op'>==</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1811' class='stm run hide_run'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1812' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1813' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='nam'>playlistend</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1814' class='pln'><span class='strut'> </span></p> -<p id='t1815' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u"[youtube] user %s: Collected %d video ids (downloading %d of them)"</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t1816' class='pln'> <span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>all_ids_count</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1817' class='pln'><span class='strut'> </span></p> -<p id='t1818' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>video_id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1819' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'http://www.youtube.com/watch?v=%s'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1820' class='pln'><span class='strut'> </span></p> -<p id='t1821' class='pln'><span class='strut'> </span></p> -<p id='t1822' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>BlipTVUserIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1823' class='pln'> <span class='str'>"""Information Extractor for blip.tv users."""</span><span class='strut'> </span></p> -<p id='t1824' class='pln'><span class='strut'> </span></p> -<p id='t1825' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:(?:(?:https?://)?(?:\w+\.)?blip\.tv/)|bliptvuser:)([^/]+)/*$'</span><span class='strut'> </span></p> -<p id='t1826' class='stm run hide_run'> <span class='nam'>_PAGE_SIZE</span> <span class='op'>=</span> <span class='num'>12</span><span class='strut'> </span></p> -<p id='t1827' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'blip.tv:user'</span><span class='strut'> </span></p> -<p id='t1828' class='pln'><span class='strut'> </span></p> -<p id='t1829' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1830' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1831' class='pln'><span class='strut'> </span></p> -<p id='t1832' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1833' class='pln'> <span class='str'>"""Report attempt to download user page."""</span><span class='strut'> </span></p> -<p id='t1834' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] user %s: Downloading video ids from page %d'</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t1835' class='pln'> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1836' class='pln'><span class='strut'> </span></p> -<p id='t1837' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1838' class='pln'> <span class='com'># Extract username</span><span class='strut'> </span></p> -<p id='t1839' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1840' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1841' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid url: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1842' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1843' class='pln'><span class='strut'> </span></p> -<p id='t1844' class='stm mis'> <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1845' class='pln'><span class='strut'> </span></p> -<p id='t1846' class='stm mis'> <span class='nam'>page_base</span> <span class='op'>=</span> <span class='str'>'http://m.blip.tv/pr/show_get_full_episode_list?users_id=%s&lite=0&esi=1'</span><span class='strut'> </span></p> -<p id='t1847' class='pln'><span class='strut'> </span></p> -<p id='t1848' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1849' class='pln'><span class='strut'> </span></p> -<p id='t1850' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1851' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1852' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'data-users-id="([^"]+)"'</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1853' class='stm mis'> <span class='nam'>page_base</span> <span class='op'>=</span> <span class='nam'>page_base</span> <span class='op'>%</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1854' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1855' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1856' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1857' class='pln'><span class='strut'> </span></p> -<p id='t1858' class='pln'><span class='strut'> </span></p> -<p id='t1859' class='pln'> <span class='com'># Download video ids using BlipTV Ajax calls. Result size per</span><span class='strut'> </span></p> -<p id='t1860' class='pln'> <span class='com'># query is limited (currently to 12 videos) so we need to query</span><span class='strut'> </span></p> -<p id='t1861' class='pln'> <span class='com'># page by page until there are no video ids - it means we got</span><span class='strut'> </span></p> -<p id='t1862' class='pln'> <span class='com'># all of them.</span><span class='strut'> </span></p> -<p id='t1863' class='pln'><span class='strut'> </span></p> -<p id='t1864' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1865' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1866' class='pln'><span class='strut'> </span></p> -<p id='t1867' class='stm mis'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1868' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1869' class='pln'><span class='strut'> </span></p> -<p id='t1870' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span> <span class='nam'>page_base</span> <span class='op'>+</span> <span class='str'>"&page="</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>pagenum</span><span class='op'>)</span> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t1871' class='pln'><span class='strut'> </span></p> -<p id='t1872' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1873' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1874' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1875' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1876' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1877' class='pln'><span class='strut'> </span></p> -<p id='t1878' class='pln'> <span class='com'># Extract video identifiers</span><span class='strut'> </span></p> -<p id='t1879' class='stm mis'> <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1880' class='pln'><span class='strut'> </span></p> -<p id='t1881' class='stm mis'> <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='str'>r'href="/([^"]+)"'</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1882' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1883' class='stm mis'> <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1884' class='pln'><span class='strut'> </span></p> -<p id='t1885' class='stm mis'> <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1886' class='pln'><span class='strut'> </span></p> -<p id='t1887' class='pln'> <span class='com'># A little optimization - if current page is not</span><span class='strut'> </span></p> -<p id='t1888' class='pln'> <span class='com'># "full", ie. does not contain PAGE_SIZE video ids then</span><span class='strut'> </span></p> -<p id='t1889' class='pln'> <span class='com'># we can assume that this page is the last one - there</span><span class='strut'> </span></p> -<p id='t1890' class='pln'> <span class='com'># are no more ids on further pages - no need to query</span><span class='strut'> </span></p> -<p id='t1891' class='pln'> <span class='com'># again.</span><span class='strut'> </span></p> -<p id='t1892' class='pln'><span class='strut'> </span></p> -<p id='t1893' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span> <span class='op'><</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_PAGE_SIZE</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1894' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t1895' class='pln'><span class='strut'> </span></p> -<p id='t1896' class='stm mis'> <span class='nam'>pagenum</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1897' class='pln'><span class='strut'> </span></p> -<p id='t1898' class='stm mis'> <span class='nam'>all_ids_count</span> <span class='op'>=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1899' class='stm mis'> <span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'playliststart'</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='op'>-</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t1900' class='stm mis'> <span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'playlistend'</span><span class='op'>,</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1901' class='pln'><span class='strut'> </span></p> -<p id='t1902' class='stm mis'> <span class='key'>if</span> <span class='nam'>playlistend</span> <span class='op'>==</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1903' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1904' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1905' class='stm mis'> <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='nam'>playlistend</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1906' class='pln'><span class='strut'> </span></p> -<p id='t1907' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u"[%s] user %s: Collected %d video ids (downloading %d of them)"</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t1908' class='pln'> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>all_ids_count</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1909' class='pln'><span class='strut'> </span></p> -<p id='t1910' class='stm mis'> <span class='key'>for</span> <span class='nam'>video_id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1911' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>u'http://blip.tv/'</span><span class='op'>+</span><span class='nam'>video_id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1912' class='pln'><span class='strut'> </span></p> -<p id='t1913' class='pln'><span class='strut'> </span></p> -<p id='t1914' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DepositFilesIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1915' class='pln'> <span class='str'>"""Information extractor for depositfiles.com"""</span><span class='strut'> </span></p> -<p id='t1916' class='pln'><span class='strut'> </span></p> -<p id='t1917' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?(?:\w+\.)?depositfiles\.com/(?:../(?#locale))?files/(.+)'</span><span class='strut'> </span></p> -<p id='t1918' class='pln'><span class='strut'> </span></p> -<p id='t1919' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1920' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t1921' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[DepositFiles] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1922' class='pln'><span class='strut'> </span></p> -<p id='t1923' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1924' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t1925' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[DepositFiles] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1926' class='pln'><span class='strut'> </span></p> -<p id='t1927' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1928' class='stm mis'> <span class='nam'>file_id</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1929' class='pln'> <span class='com'># Rebuild url in english locale</span><span class='strut'> </span></p> -<p id='t1930' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>'http://depositfiles.com/en/files/'</span> <span class='op'>+</span> <span class='nam'>file_id</span><span class='strut'> </span></p> -<p id='t1931' class='pln'><span class='strut'> </span></p> -<p id='t1932' class='pln'> <span class='com'># Retrieve file webpage with 'Free download' button pressed</span><span class='strut'> </span></p> -<p id='t1933' class='stm mis'> <span class='nam'>free_download_indication</span> <span class='op'>=</span> <span class='op'>{</span> <span class='str'>'gateway_result'</span> <span class='op'>:</span> <span class='str'>'1'</span> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t1934' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>free_download_indication</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1935' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1936' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>file_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1937' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1938' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1939' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve file webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1940' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1941' class='pln'><span class='strut'> </span></p> -<p id='t1942' class='pln'> <span class='com'># Search for the real file URL</span><span class='strut'> </span></p> -<p id='t1943' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<form action="(http://fileshare.+?)"'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1944' class='stm mis'> <span class='key'>if</span> <span class='op'>(</span><span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1945' class='pln'> <span class='com'># Try to figure out reason of the error.</span><span class='strut'> </span></p> -<p id='t1946' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<strong>(Attention.*?)</strong>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1947' class='stm mis'> <span class='key'>if</span> <span class='op'>(</span><span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>and</span> <span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1948' class='stm mis'> <span class='nam'>restriction_message</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>'\s+'</span><span class='op'>,</span> <span class='str'>' '</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1949' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: %s'</span> <span class='op'>%</span> <span class='nam'>restriction_message</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1950' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1951' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract download URL from: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1952' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1953' class='pln'><span class='strut'> </span></p> -<p id='t1954' class='stm mis'> <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1955' class='stm mis'> <span class='nam'>file_extension</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>file_url</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1956' class='pln'><span class='strut'> </span></p> -<p id='t1957' class='pln'> <span class='com'># Search for file title</span><span class='strut'> </span></p> -<p id='t1958' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<b title="(.*?)">'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1959' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1960' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1961' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t1962' class='stm mis'> <span class='nam'>file_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1963' class='pln'><span class='strut'> </span></p> -<p id='t1964' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t1965' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>file_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1966' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>file_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1967' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1968' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1969' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>file_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1970' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>file_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1971' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1972' class='pln'><span class='strut'> </span></p> -<p id='t1973' class='pln'><span class='strut'> </span></p> -<p id='t1974' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FacebookIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1975' class='pln'> <span class='str'>"""Information Extractor for Facebook"""</span><span class='strut'> </span></p> -<p id='t1976' class='pln'><span class='strut'> </span></p> -<p id='t1977' class='stm run hide_run'> <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t1978' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:\w+\.)?facebook\.com/(?:video/video|photo)\.php\?(?:.*?)v=(?P<ID>\d+)(?:.*)'</span><span class='strut'> </span></p> -<p id='t1979' class='stm run hide_run'> <span class='nam'>_LOGIN_URL</span> <span class='op'>=</span> <span class='str'>'https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php&'</span><span class='strut'> </span></p> -<p id='t1980' class='stm run hide_run'> <span class='nam'>_NETRC_MACHINE</span> <span class='op'>=</span> <span class='str'>'facebook'</span><span class='strut'> </span></p> -<p id='t1981' class='stm run hide_run'> <span class='nam'>_available_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'video'</span><span class='op'>,</span> <span class='str'>'highqual'</span><span class='op'>,</span> <span class='str'>'lowqual'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t1982' class='stm run hide_run'> <span class='nam'>_video_extensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t1983' class='pln'> <span class='str'>'video'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1984' class='pln'> <span class='str'>'highqual'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1985' class='pln'> <span class='str'>'lowqual'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t1986' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t1987' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'facebook'</span><span class='strut'> </span></p> -<p id='t1988' class='pln'><span class='strut'> </span></p> -<p id='t1989' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1990' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1991' class='pln'><span class='strut'> </span></p> -<p id='t1992' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_reporter</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1993' class='pln'> <span class='str'>"""Add header and report message."""</span><span class='strut'> </span></p> -<p id='t1994' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[facebook] %s'</span> <span class='op'>%</span> <span class='nam'>message</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1995' class='pln'><span class='strut'> </span></p> -<p id='t1996' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_login</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t1997' class='pln'> <span class='str'>"""Report attempt to log in."""</span><span class='strut'> </span></p> -<p id='t1998' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_reporter</span><span class='op'>(</span><span class='str'>u'Logging in'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t1999' class='pln'><span class='strut'> </span></p> -<p id='t2000' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2001' class='pln'> <span class='str'>"""Report attempt to download video webpage."""</span><span class='strut'> </span></p> -<p id='t2002' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_reporter</span><span class='op'>(</span><span class='str'>u'%s: Downloading video webpage'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2003' class='pln'><span class='strut'> </span></p> -<p id='t2004' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2005' class='pln'> <span class='str'>"""Report attempt to extract video information."""</span><span class='strut'> </span></p> -<p id='t2006' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_reporter</span><span class='op'>(</span><span class='str'>u'%s: Extracting video information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2007' class='pln'><span class='strut'> </span></p> -<p id='t2008' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2009' class='pln'> <span class='str'>"""Extract video information from page"""</span><span class='strut'> </span></p> -<p id='t2010' class='pln'> <span class='com'># General data</span><span class='strut'> </span></p> -<p id='t2011' class='stm mis'> <span class='nam'>data</span> <span class='op'>=</span> <span class='op'>{</span><span class='str'>'title'</span><span class='op'>:</span> <span class='str'>r'\("video_title", "(.*?)"\)'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2012' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='str'>r'<div class="datawrap">(.*?)</div>'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2013' class='pln'> <span class='str'>'owner'</span><span class='op'>:</span> <span class='str'>r'\("video_owner_name", "(.*?)"\)'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2014' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='str'>r'\("thumb_url", "(?P<THUMB>.*?)"\)'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2015' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2016' class='stm mis'> <span class='nam'>video_info</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t2017' class='stm mis'> <span class='key'>for</span> <span class='nam'>piece</span> <span class='key'>in</span> <span class='nam'>data</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2018' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>[</span><span class='nam'>piece</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2019' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2020' class='stm mis'> <span class='nam'>video_info</span><span class='op'>[</span><span class='nam'>piece</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>"unicode_escape"</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2021' class='pln'><span class='strut'> </span></p> -<p id='t2022' class='pln'> <span class='com'># Video urls</span><span class='strut'> </span></p> -<p id='t2023' class='stm mis'> <span class='nam'>video_urls</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t2024' class='stm mis'> <span class='key'>for</span> <span class='nam'>fmt</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2025' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'\("%s_src\", "(.+?)"\)'</span> <span class='op'>%</span> <span class='nam'>fmt</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2026' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2027' class='pln'> <span class='com'># URL is in a Javascript segment inside an escaped Unicode format within</span><span class='strut'> </span></p> -<p id='t2028' class='pln'> <span class='com'># the generally utf-8 page</span><span class='strut'> </span></p> -<p id='t2029' class='stm mis'> <span class='nam'>video_urls</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>"unicode_escape"</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2030' class='stm mis'> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'video_urls'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>video_urls</span><span class='strut'> </span></p> -<p id='t2031' class='pln'><span class='strut'> </span></p> -<p id='t2032' class='stm mis'> <span class='key'>return</span> <span class='nam'>video_info</span><span class='strut'> </span></p> -<p id='t2033' class='pln'><span class='strut'> </span></p> -<p id='t2034' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2035' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2036' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2037' class='pln'><span class='strut'> </span></p> -<p id='t2038' class='stm mis'> <span class='nam'>useremail</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2039' class='stm mis'> <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2040' class='stm mis'> <span class='nam'>downloader_params</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='strut'> </span></p> -<p id='t2041' class='pln'><span class='strut'> </span></p> -<p id='t2042' class='pln'> <span class='com'># Attempt to use provided username and password or .netrc data</span><span class='strut'> </span></p> -<p id='t2043' class='stm mis'> <span class='key'>if</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'username'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2044' class='stm mis'> <span class='nam'>useremail</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>'username'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2045' class='stm mis'> <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>'password'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2046' class='stm mis'> <span class='key'>elif</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'usenetrc'</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2047' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2048' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>netrc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>authenticators</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2049' class='stm mis'> <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2050' class='stm mis'> <span class='nam'>useremail</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2051' class='stm mis'> <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2052' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2053' class='stm mis'> <span class='key'>raise</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>(</span><span class='str'>'No authenticators for %s'</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2054' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2055' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: parsing .netrc: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2056' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2057' class='pln'><span class='strut'> </span></p> -<p id='t2058' class='stm mis'> <span class='key'>if</span> <span class='nam'>useremail</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2059' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2060' class='pln'><span class='strut'> </span></p> -<p id='t2061' class='pln'> <span class='com'># Log in</span><span class='strut'> </span></p> -<p id='t2062' class='stm mis'> <span class='nam'>login_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2063' class='pln'> <span class='str'>'email'</span><span class='op'>:</span> <span class='nam'>useremail</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2064' class='pln'> <span class='str'>'pass'</span><span class='op'>:</span> <span class='nam'>password</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2065' class='pln'> <span class='str'>'login'</span><span class='op'>:</span> <span class='str'>'Log+In'</span><span class='strut'> </span></p> -<p id='t2066' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2067' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LOGIN_URL</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>login_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2068' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2069' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_login</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2070' class='stm mis'> <span class='nam'>login_results</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2071' class='stm mis'> <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<form(.*)name="login"(.*)</form>'</span><span class='op'>,</span> <span class='nam'>login_results</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2072' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: unable to log in: bad username/password, or exceded login rate limit (~3/min). Check credentials or wait.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2073' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2074' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2075' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: unable to log in: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2076' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2077' class='pln'><span class='strut'> </span></p> -<p id='t2078' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2079' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2080' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2081' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2082' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2083' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'ID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2084' class='pln'><span class='strut'> </span></p> -<p id='t2085' class='pln'> <span class='com'># Get video webpage</span><span class='strut'> </span></p> -<p id='t2086' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2087' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>'https://www.facebook.com/video/video.php?v=%s'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2088' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2089' class='stm mis'> <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2090' class='stm mis'> <span class='nam'>video_webpage</span> <span class='op'>=</span> <span class='nam'>page</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2091' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2092' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2093' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2094' class='pln'><span class='strut'> </span></p> -<p id='t2095' class='pln'> <span class='com'># Start extracting information</span><span class='strut'> </span></p> -<p id='t2096' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2097' class='pln'><span class='strut'> </span></p> -<p id='t2098' class='pln'> <span class='com'># Extract information</span><span class='strut'> </span></p> -<p id='t2099' class='stm mis'> <span class='nam'>video_info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2100' class='pln'><span class='strut'> </span></p> -<p id='t2101' class='pln'> <span class='com'># uploader</span><span class='strut'> </span></p> -<p id='t2102' class='stm mis'> <span class='key'>if</span> <span class='str'>'owner'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2103' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract uploader nickname'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2104' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2105' class='stm mis'> <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'owner'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2106' class='pln'><span class='strut'> </span></p> -<p id='t2107' class='pln'> <span class='com'># title</span><span class='strut'> </span></p> -<p id='t2108' class='stm mis'> <span class='key'>if</span> <span class='str'>'title'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2109' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2110' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2111' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2112' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>video_title</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2113' class='pln'><span class='strut'> </span></p> -<p id='t2114' class='pln'> <span class='com'># thumbnail image</span><span class='strut'> </span></p> -<p id='t2115' class='stm mis'> <span class='key'>if</span> <span class='str'>'thumbnail'</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2116' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'WARNING: unable to extract video thumbnail'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2117' class='stm mis'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t2118' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2119' class='stm mis'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'thumbnail'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2120' class='pln'><span class='strut'> </span></p> -<p id='t2121' class='pln'> <span class='com'># upload date</span><span class='strut'> </span></p> -<p id='t2122' class='stm mis'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2123' class='stm mis'> <span class='key'>if</span> <span class='str'>'upload_date'</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2124' class='stm mis'> <span class='nam'>upload_time</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'upload_date'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2125' class='stm mis'> <span class='nam'>timetuple</span> <span class='op'>=</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='op'>.</span><span class='nam'>parsedate_tz</span><span class='op'>(</span><span class='nam'>upload_time</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2126' class='stm mis'> <span class='key'>if</span> <span class='nam'>timetuple</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2127' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2128' class='stm mis'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>'%Y%m%d'</span><span class='op'>,</span> <span class='nam'>timetuple</span><span class='op'>[</span><span class='num'>0</span><span class='op'>:</span><span class='num'>9</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2129' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2130' class='stm mis'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t2131' class='pln'><span class='strut'> </span></p> -<p id='t2132' class='pln'> <span class='com'># description</span><span class='strut'> </span></p> -<p id='t2133' class='stm mis'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'description'</span><span class='op'>,</span> <span class='str'>'No description available.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2134' class='pln'><span class='strut'> </span></p> -<p id='t2135' class='stm mis'> <span class='nam'>url_map</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>'video_urls'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2136' class='stm mis'> <span class='key'>if</span> <span class='nam'>url_map</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2137' class='pln'> <span class='com'># Decide which formats to download</span><span class='strut'> </span></p> -<p id='t2138' class='stm mis'> <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2139' class='stm mis'> <span class='nam'>format_limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format_limit'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2140' class='pln'><span class='strut'> </span></p> -<p id='t2141' class='stm mis'> <span class='key'>if</span> <span class='nam'>format_limit</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>format_limit</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2142' class='stm mis'> <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>.</span><span class='nam'>index</span><span class='op'>(</span><span class='nam'>format_limit</span><span class='op'>)</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2143' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2144' class='stm mis'> <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='strut'> </span></p> -<p id='t2145' class='stm mis'> <span class='nam'>existing_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>format_list</span> <span class='key'>if</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2146' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2147' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: no known formats available for video'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2148' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2149' class='stm mis'> <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2150' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># Best quality</span><span class='strut'> </span></p> -<p id='t2151' class='stm mis'> <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>'worst'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2152' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># worst quality</span><span class='strut'> </span></p> -<p id='t2153' class='stm mis'> <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>'-1'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2154' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>f</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>f</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>f</span> <span class='key'>in</span> <span class='nam'>existing_formats</span><span class='op'>]</span> <span class='com'># All formats</span><span class='strut'> </span></p> -<p id='t2155' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2156' class='pln'> <span class='com'># Specific format</span><span class='strut'> </span></p> -<p id='t2157' class='stm mis'> <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2158' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: requested format not available'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2159' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2160' class='stm mis'> <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>req_format</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>req_format</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># Specific format</span><span class='strut'> </span></p> -<p id='t2161' class='pln'><span class='strut'> </span></p> -<p id='t2162' class='stm mis'> <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2163' class='stm mis'> <span class='key'>for</span> <span class='nam'>format_param</span><span class='op'>,</span> <span class='nam'>video_real_url</span> <span class='key'>in</span> <span class='nam'>video_url_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2164' class='pln'> <span class='com'># Extension</span><span class='strut'> </span></p> -<p id='t2165' class='stm mis'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>format_param</span><span class='op'>,</span> <span class='str'>'mp4'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2166' class='pln'><span class='strut'> </span></p> -<p id='t2167' class='stm mis'> <span class='nam'>results</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t2168' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2169' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_real_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2170' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2171' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2172' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2173' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2174' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='op'>(</span><span class='nam'>format_param</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='str'>u'NA'</span> <span class='key'>or</span> <span class='nam'>format_param</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2175' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2176' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>video_description</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2177' class='pln'> <span class='op'>}</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2178' class='stm mis'> <span class='key'>return</span> <span class='nam'>results</span><span class='strut'> </span></p> -<p id='t2179' class='pln'><span class='strut'> </span></p> -<p id='t2180' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>BlipTVIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2181' class='pln'> <span class='str'>"""Information extractor for blip.tv"""</span><span class='strut'> </span></p> -<p id='t2182' class='pln'><span class='strut'> </span></p> -<p id='t2183' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:\w+\.)?blip\.tv(/.+)$'</span><span class='strut'> </span></p> -<p id='t2184' class='stm run hide_run'> <span class='nam'>_URL_EXT</span> <span class='op'>=</span> <span class='str'>r'^.*\.([a-z0-9]+)$'</span><span class='strut'> </span></p> -<p id='t2185' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'blip.tv'</span><span class='strut'> </span></p> -<p id='t2186' class='pln'><span class='strut'> </span></p> -<p id='t2187' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2188' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2189' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2190' class='pln'><span class='strut'> </span></p> -<p id='t2191' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_direct_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>title</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2192' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2193' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Direct download detected'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>title</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2194' class='pln'><span class='strut'> </span></p> -<p id='t2195' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2196' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2197' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2198' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2199' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2200' class='pln'><span class='strut'> </span></p> -<p id='t2201' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'?'</span> <span class='key'>in</span> <span class='nam'>url</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2202' class='stm mis'> <span class='nam'>cchar</span> <span class='op'>=</span> <span class='str'>'&'</span><span class='strut'> </span></p> -<p id='t2203' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2204' class='stm run hide_run'> <span class='nam'>cchar</span> <span class='op'>=</span> <span class='str'>'?'</span><span class='strut'> </span></p> -<p id='t2205' class='stm run hide_run'> <span class='nam'>json_url</span> <span class='op'>=</span> <span class='nam'>url</span> <span class='op'>+</span> <span class='nam'>cchar</span> <span class='op'>+</span> <span class='str'>'skin=json&version=2&no_wrap=1'</span><span class='strut'> </span></p> -<p id='t2206' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>json_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2207' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2208' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2209' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2210' class='stm run hide_run'> <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2211' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'Content-Type'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>'video/'</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># Direct download</span><span class='strut'> </span></p> -<p id='t2212' class='stm mis'> <span class='nam'>basename</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2213' class='stm mis'> <span class='nam'>title</span><span class='op'>,</span><span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>basename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2214' class='stm mis'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>title</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'UTF-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2215' class='stm mis'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>ext</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2216' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_direct_download</span><span class='op'>(</span><span class='nam'>title</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2217' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2218' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2219' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2220' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2221' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2222' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2223' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2224' class='pln'> <span class='str'>'urlhandle'</span><span class='op'>:</span> <span class='nam'>urlh</span><span class='strut'> </span></p> -<p id='t2225' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2226' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2227' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video info webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2228' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2229' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span> <span class='com'># Regular URL</span><span class='strut'> </span></p> -<p id='t2230' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2231' class='stm run hide_run'> <span class='nam'>json_code_bytes</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2232' class='stm run hide_run'> <span class='nam'>json_code</span> <span class='op'>=</span> <span class='nam'>json_code_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2233' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2234' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to read video info webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2235' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2236' class='pln'><span class='strut'> </span></p> -<p id='t2237' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2238' class='stm run hide_run'> <span class='nam'>json_data</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>json_code</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2239' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'Post'</span> <span class='key'>in</span> <span class='nam'>json_data</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2240' class='stm run hide_run'> <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>'Post'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2241' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2242' class='stm mis'> <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>json_data</span><span class='strut'> </span></p> -<p id='t2243' class='pln'><span class='strut'> </span></p> -<p id='t2244' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>[</span><span class='str'>'datestamp'</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>'%m-%d-%y %H:%M%p'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>'%Y%m%d'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2245' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'media'</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2246' class='stm run hide_run'> <span class='nam'>umobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_URL_EXT</span><span class='op'>,</span> <span class='nam'>video_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2247' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>umobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2248' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ValueError</span><span class='op'>(</span><span class='str'>'Can not determine filename extension'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2249' class='stm run hide_run'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>umobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2250' class='pln'><span class='strut'> </span></p> -<p id='t2251' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2252' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'item_id'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2253' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2254' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'display_name'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2255' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2256' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2257' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2258' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'media'</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'mimeType'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2259' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'thumbnailUrl'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2260' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2261' class='pln'> <span class='str'>'player_url'</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>'embedUrl'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2262' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2263' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>ValueError</span><span class='op'>,</span><span class='nam'>KeyError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2264' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to parse video information: %s'</span> <span class='op'>%</span> <span class='nam'>repr</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2265' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2266' class='pln'><span class='strut'> </span></p> -<p id='t2267' class='stm run hide_run'> <span class='nam'>std_headers</span><span class='op'>[</span><span class='str'>'User-Agent'</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>'iTunes/10.6.1'</span><span class='strut'> </span></p> -<p id='t2268' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2269' class='pln'><span class='strut'> </span></p> -<p id='t2270' class='pln'><span class='strut'> </span></p> -<p id='t2271' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MyVideoIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2272' class='pln'> <span class='str'>"""Information Extractor for myvideo.de."""</span><span class='strut'> </span></p> -<p id='t2273' class='pln'><span class='strut'> </span></p> -<p id='t2274' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?(?:www\.)?myvideo\.de/watch/([0-9]+)/([^?/]+).*'</span><span class='strut'> </span></p> -<p id='t2275' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'myvideo'</span><span class='strut'> </span></p> -<p id='t2276' class='pln'><span class='strut'> </span></p> -<p id='t2277' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2278' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2279' class='pln'><span class='strut'> </span></p> -<p id='t2280' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2281' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2282' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[myvideo] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2283' class='pln'><span class='strut'> </span></p> -<p id='t2284' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2285' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2286' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2287' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2288' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2289' class='pln'><span class='strut'> </span></p> -<p id='t2290' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2291' class='pln'><span class='strut'> </span></p> -<p id='t2292' class='pln'> <span class='com'># Get video webpage</span><span class='strut'> </span></p> -<p id='t2293' class='stm run hide_run'> <span class='nam'>webpage_url</span> <span class='op'>=</span> <span class='str'>'http://www.myvideo.de/watch/%s'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='strut'> </span></p> -<p id='t2294' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>webpage_url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2295' class='pln'><span class='strut'> </span></p> -<p id='t2296' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2297' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<link rel=\'image_src\' href=\'(http://is[0-9].myvideo\.de/de/movie[0-9]+/[a-f0-9]+)/thumbs/[^.]+\.jpg\' />'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2298' class='pln'> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2299' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2300' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract media URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2301' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2302' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='op'>(</span><span class='str'>'/%s.flv'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2303' class='pln'><span class='strut'> </span></p> -<p id='t2304' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'<title>([^<]+)</title>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2305' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2306' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2307' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2308' class='pln'><span class='strut'> </span></p> -<p id='t2309' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2310' class='pln'><span class='strut'> </span></p> -<p id='t2311' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t2312' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2313' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2314' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2315' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2316' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2317' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>u'flv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2318' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2319' class='pln'><span class='strut'> </span></p> -<p id='t2320' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ComedyCentralIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2321' class='pln'> <span class='str'>"""Information extractor for The Daily Show and Colbert Report """</span><span class='strut'> </span></p> -<p id='t2322' class='pln'><span class='strut'> </span></p> -<p id='t2323' class='pln'> <span class='com'># urls can be abbreviations like :thedailyshow or :colbert</span><span class='strut'> </span></p> -<p id='t2324' class='pln'> <span class='com'># urls for episodes like:</span><span class='strut'> </span></p> -<p id='t2325' class='pln'> <span class='com'># or urls for clips like: http://www.thedailyshow.com/watch/mon-december-10-2012/any-given-gun-day</span><span class='strut'> </span></p> -<p id='t2326' class='pln'> <span class='com'># or: http://www.colbertnation.com/the-colbert-report-videos/421667/november-29-2012/moon-shattering-news</span><span class='strut'> </span></p> -<p id='t2327' class='pln'> <span class='com'># or: http://www.colbertnation.com/the-colbert-report-collections/422008/festival-of-lights/79524</span><span class='strut'> </span></p> -<p id='t2328' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r"""^(:(?P<shortname>tds|thedailyshow|cr|colbert|colbertnation|colbertreport)</span><span class='strut'> </span></p> -<p id='t2329' class='pln'><span class='str'> |(https?://)?(www\.)?</span><span class='strut'> </span></p> -<p id='t2330' class='pln'><span class='str'> (?P<showname>thedailyshow|colbertnation)\.com/</span><span class='strut'> </span></p> -<p id='t2331' class='pln'><span class='str'> (full-episodes/(?P<episode>.*)|</span><span class='strut'> </span></p> -<p id='t2332' class='pln'><span class='str'> (?P<clip></span><span class='strut'> </span></p> -<p id='t2333' class='pln'><span class='str'> (the-colbert-report-(videos|collections)/(?P<clipID>[0-9]+)/[^/]*/(?P<cntitle>.*?))</span><span class='strut'> </span></p> -<p id='t2334' class='pln'><span class='str'> |(watch/(?P<date>[^/]*)/(?P<tdstitle>.*)))))</span><span class='strut'> </span></p> -<p id='t2335' class='pln'><span class='str'> $"""</span><span class='strut'> </span></p> -<p id='t2336' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'comedycentral'</span><span class='strut'> </span></p> -<p id='t2337' class='pln'><span class='strut'> </span></p> -<p id='t2338' class='stm run hide_run'> <span class='nam'>_available_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'3500'</span><span class='op'>,</span> <span class='str'>'2200'</span><span class='op'>,</span> <span class='str'>'1700'</span><span class='op'>,</span> <span class='str'>'1200'</span><span class='op'>,</span> <span class='str'>'750'</span><span class='op'>,</span> <span class='str'>'400'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2339' class='pln'><span class='strut'> </span></p> -<p id='t2340' class='stm run hide_run'> <span class='nam'>_video_extensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2341' class='pln'> <span class='str'>'3500'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2342' class='pln'> <span class='str'>'2200'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2343' class='pln'> <span class='str'>'1700'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2344' class='pln'> <span class='str'>'1200'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2345' class='pln'> <span class='str'>'750'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2346' class='pln'> <span class='str'>'400'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2347' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2348' class='stm run hide_run'> <span class='nam'>_video_dimensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2349' class='pln'> <span class='str'>'3500'</span><span class='op'>:</span> <span class='str'>'1280x720'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2350' class='pln'> <span class='str'>'2200'</span><span class='op'>:</span> <span class='str'>'960x540'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2351' class='pln'> <span class='str'>'1700'</span><span class='op'>:</span> <span class='str'>'768x432'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2352' class='pln'> <span class='str'>'1200'</span><span class='op'>:</span> <span class='str'>'640x360'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2353' class='pln'> <span class='str'>'750'</span><span class='op'>:</span> <span class='str'>'512x288'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2354' class='pln'> <span class='str'>'400'</span><span class='op'>:</span> <span class='str'>'384x216'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2355' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2356' class='pln'><span class='strut'> </span></p> -<p id='t2357' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2358' class='pln'> <span class='str'>"""Receives a URL and returns True if suitable for this IE."""</span><span class='strut'> </span></p> -<p id='t2359' class='stm mis'> <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2360' class='pln'><span class='strut'> </span></p> -<p id='t2361' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2362' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[comedycentral] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2363' class='pln'><span class='strut'> </span></p> -<p id='t2364' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2365' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[comedycentral] %s: Downloading configuration'</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2366' class='pln'><span class='strut'> </span></p> -<p id='t2367' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_index_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2368' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[comedycentral] %s: Downloading show index'</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2369' class='pln'><span class='strut'> </span></p> -<p id='t2370' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_player_url</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2371' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[comedycentral] %s: Determining player URL'</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2372' class='pln'><span class='strut'> </span></p> -<p id='t2373' class='pln'><span class='strut'> </span></p> -<p id='t2374' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>formats</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2375' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'Available formats:'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2376' class='stm mis'> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2377' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'%s\t:\t%s\t[%s]'</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>'mp4'</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_dimensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>'???'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2378' class='pln'><span class='strut'> </span></p> -<p id='t2379' class='pln'><span class='strut'> </span></p> -<p id='t2380' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2381' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2382' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2383' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2384' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2385' class='pln'><span class='strut'> </span></p> -<p id='t2386' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'shortname'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2387' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'shortname'</span><span class='op'>)</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>'tds'</span><span class='op'>,</span> <span class='str'>'thedailyshow'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2388' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>u'http://www.thedailyshow.com/full-episodes/'</span><span class='strut'> </span></p> -<p id='t2389' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2390' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>u'http://www.colbertnation.com/full-episodes/'</span><span class='strut'> </span></p> -<p id='t2391' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2392' class='stm mis'> <span class='key'>assert</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2393' class='pln'><span class='strut'> </span></p> -<p id='t2394' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'clip'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2395' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'showname'</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>'thedailyshow'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2396' class='stm mis'> <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'tdstitle'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2397' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2398' class='stm mis'> <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'cntitle'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2399' class='stm mis'> <span class='nam'>dlNewest</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t2400' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2401' class='stm mis'> <span class='nam'>dlNewest</span> <span class='op'>=</span> <span class='key'>not</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'episode'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2402' class='stm mis'> <span class='key'>if</span> <span class='nam'>dlNewest</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2403' class='stm mis'> <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'showname'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2404' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2405' class='stm mis'> <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'episode'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2406' class='pln'><span class='strut'> </span></p> -<p id='t2407' class='stm mis'> <span class='nam'>req</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2408' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2409' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2410' class='stm mis'> <span class='nam'>htmlHandle</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>req</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2411' class='stm mis'> <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>htmlHandle</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2412' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2413' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2414' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2415' class='stm mis'> <span class='key'>if</span> <span class='nam'>dlNewest</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2416' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>htmlHandle</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2417' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2418' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2419' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid redirected URL: '</span> <span class='op'>+</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2420' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2421' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'episode'</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2422' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Redirected URL is still not specific: '</span> <span class='op'>+</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2423' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2424' class='stm mis'> <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'episode'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2425' class='pln'><span class='strut'> </span></p> -<p id='t2426' class='stm mis'> <span class='nam'>mMovieParams</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'(?:<param name="movie" value="|var url = ")(http://media.mtvnservices.com/([^"]*(?:episode|video).*?:.*?))"'</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2427' class='pln'><span class='strut'> </span></p> -<p id='t2428' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>mMovieParams</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2429' class='pln'> <span class='com'># The Colbert Report embeds the information in a without</span><span class='strut'> </span></p> -<p id='t2430' class='pln'> <span class='com'># a URL prefix; so extract the alternate reference</span><span class='strut'> </span></p> -<p id='t2431' class='pln'> <span class='com'># and then add the URL prefix manually.</span><span class='strut'> </span></p> -<p id='t2432' class='pln'><span class='strut'> </span></p> -<p id='t2433' class='stm mis'> <span class='nam'>altMovieParams</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'data-mgid="([^"]*(?:episode|video).*?:.*?)"'</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2434' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>altMovieParams</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2435' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to find Flash URL in webpage '</span> <span class='op'>+</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2436' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2437' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2438' class='stm mis'> <span class='nam'>mMovieParams</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='str'>"http://media.mtvnservices.com/"</span> <span class='op'>+</span> <span class='nam'>altMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>altMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2439' class='pln'><span class='strut'> </span></p> -<p id='t2440' class='stm mis'> <span class='nam'>playerUrl_raw</span> <span class='op'>=</span> <span class='nam'>mMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2441' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_player_url</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2442' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2443' class='stm mis'> <span class='nam'>urlHandle</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>playerUrl_raw</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2444' class='stm mis'> <span class='nam'>playerUrl</span> <span class='op'>=</span> <span class='nam'>urlHandle</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2445' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2446' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to find out player URL: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2447' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2448' class='pln'><span class='strut'> </span></p> -<p id='t2449' class='stm mis'> <span class='nam'>uri</span> <span class='op'>=</span> <span class='nam'>mMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2450' class='stm mis'> <span class='nam'>indexUrl</span> <span class='op'>=</span> <span class='str'>'http://shadow.comedycentral.com/feeds/video_player/mrss/?'</span> <span class='op'>+</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='op'>{</span><span class='str'>'uri'</span><span class='op'>:</span> <span class='nam'>uri</span><span class='op'>}</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2451' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_index_download</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2452' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2453' class='stm mis'> <span class='nam'>indexXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>indexUrl</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2454' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2455' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download episode index: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2456' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2457' class='pln'><span class='strut'> </span></p> -<p id='t2458' class='stm mis'> <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2459' class='pln'><span class='strut'> </span></p> -<p id='t2460' class='stm mis'> <span class='nam'>idoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>indexXml</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2461' class='stm mis'> <span class='nam'>itemEls</span> <span class='op'>=</span> <span class='nam'>idoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'.//item'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2462' class='stm mis'> <span class='key'>for</span> <span class='nam'>itemEl</span> <span class='key'>in</span> <span class='nam'>itemEls</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2463' class='stm mis'> <span class='nam'>mediaId</span> <span class='op'>=</span> <span class='nam'>itemEl</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./guid'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2464' class='stm mis'> <span class='nam'>shortMediaId</span> <span class='op'>=</span> <span class='nam'>mediaId</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>':'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2465' class='stm mis'> <span class='nam'>showId</span> <span class='op'>=</span> <span class='nam'>mediaId</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>':'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>2</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'.com'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2466' class='stm mis'> <span class='nam'>officialTitle</span> <span class='op'>=</span> <span class='nam'>itemEl</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./title'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2467' class='stm mis'> <span class='nam'>officialDate</span> <span class='op'>=</span> <span class='nam'>itemEl</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./pubDate'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2468' class='pln'><span class='strut'> </span></p> -<p id='t2469' class='stm mis'> <span class='nam'>configUrl</span> <span class='op'>=</span> <span class='op'>(</span><span class='str'>'http://www.comedycentral.com/global/feeds/entertainment/media/mediaGenEntertainment.jhtml?'</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t2470' class='pln'> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='op'>{</span><span class='str'>'uri'</span><span class='op'>:</span> <span class='nam'>mediaId</span><span class='op'>}</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2471' class='stm mis'> <span class='nam'>configReq</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>configUrl</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2472' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2473' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2474' class='stm mis'> <span class='nam'>configXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>configReq</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2475' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2476' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2477' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2478' class='pln'><span class='strut'> </span></p> -<p id='t2479' class='stm mis'> <span class='nam'>cdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>configXml</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2480' class='stm mis'> <span class='nam'>turls</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2481' class='stm mis'> <span class='key'>for</span> <span class='nam'>rendition</span> <span class='key'>in</span> <span class='nam'>cdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'.//rendition'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2482' class='stm mis'> <span class='nam'>finfo</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>'bitrate'</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./src'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2483' class='stm mis'> <span class='nam'>turls</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>finfo</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2484' class='pln'><span class='strut'> </span></p> -<p id='t2485' class='stm mis'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>turls</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2486' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: unable to download '</span> <span class='op'>+</span> <span class='nam'>mediaId</span> <span class='op'>+</span> <span class='str'>': No videos found'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2487' class='stm mis'> <span class='key'>continue</span><span class='strut'> </span></p> -<p id='t2488' class='pln'><span class='strut'> </span></p> -<p id='t2489' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'listformats'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2490' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_print_formats</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>turls</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2491' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2492' class='pln'><span class='strut'> </span></p> -<p id='t2493' class='pln'> <span class='com'># For now, just pick the highest bitrate</span><span class='strut'> </span></p> -<p id='t2494' class='stm mis'> <span class='nam'>format</span><span class='op'>,</span><span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>turls</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2495' class='pln'><span class='strut'> </span></p> -<p id='t2496' class='pln'> <span class='com'># Get the format arg from the arg stream</span><span class='strut'> </span></p> -<p id='t2497' class='stm mis'> <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2498' class='pln'><span class='strut'> </span></p> -<p id='t2499' class='pln'> <span class='com'># Select format if we can find one</span><span class='strut'> </span></p> -<p id='t2500' class='stm mis'> <span class='key'>for</span> <span class='nam'>f</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>turls</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2501' class='stm mis'> <span class='key'>if</span> <span class='nam'>f</span> <span class='op'>==</span> <span class='nam'>req_format</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2502' class='stm mis'> <span class='nam'>format</span><span class='op'>,</span> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>,</span> <span class='nam'>v</span><span class='strut'> </span></p> -<p id='t2503' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t2504' class='pln'><span class='strut'> </span></p> -<p id='t2505' class='pln'> <span class='com'># Patch to download from alternative CDN, which does not</span><span class='strut'> </span></p> -<p id='t2506' class='pln'> <span class='com'># break on current RTMPDump builds</span><span class='strut'> </span></p> -<p id='t2507' class='stm mis'> <span class='nam'>broken_cdn</span> <span class='op'>=</span> <span class='str'>"rtmpe://viacomccstrmfs.fplive.net/viacomccstrm/gsp.comedystor/"</span><span class='strut'> </span></p> -<p id='t2508' class='stm mis'> <span class='nam'>better_cdn</span> <span class='op'>=</span> <span class='str'>"rtmpe://cp10740.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/"</span><span class='strut'> </span></p> -<p id='t2509' class='pln'><span class='strut'> </span></p> -<p id='t2510' class='stm mis'> <span class='key'>if</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='nam'>broken_cdn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2511' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>broken_cdn</span><span class='op'>,</span> <span class='nam'>better_cdn</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2512' class='pln'><span class='strut'> </span></p> -<p id='t2513' class='stm mis'> <span class='nam'>effTitle</span> <span class='op'>=</span> <span class='nam'>showId</span> <span class='op'>+</span> <span class='str'>u'-'</span> <span class='op'>+</span> <span class='nam'>epTitle</span><span class='strut'> </span></p> -<p id='t2514' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2515' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>shortMediaId</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2516' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2517' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>showId</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2518' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>officialDate</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2519' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>effTitle</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2520' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2521' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='nam'>format</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2522' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2523' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>officialTitle</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2524' class='pln'> <span class='str'>'player_url'</span><span class='op'>:</span> <span class='nam'>None</span> <span class='com'>#playerUrl</span><span class='strut'> </span></p> -<p id='t2525' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2526' class='pln'><span class='strut'> </span></p> -<p id='t2527' class='stm mis'> <span class='nam'>results</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2528' class='pln'><span class='strut'> </span></p> -<p id='t2529' class='stm mis'> <span class='key'>return</span> <span class='nam'>results</span><span class='strut'> </span></p> -<p id='t2530' class='pln'><span class='strut'> </span></p> -<p id='t2531' class='pln'><span class='strut'> </span></p> -<p id='t2532' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>EscapistIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2533' class='pln'> <span class='str'>"""Information extractor for The Escapist """</span><span class='strut'> </span></p> -<p id='t2534' class='pln'><span class='strut'> </span></p> -<p id='t2535' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(https?://)?(www\.)?escapistmagazine\.com/videos/view/(?P<showname>[^/]+)/(?P<episode>[^/?]+)[/?]?.*$'</span><span class='strut'> </span></p> -<p id='t2536' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'escapist'</span><span class='strut'> </span></p> -<p id='t2537' class='pln'><span class='strut'> </span></p> -<p id='t2538' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>showName</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2539' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[escapist] %s: Extracting information'</span> <span class='op'>%</span> <span class='nam'>showName</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2540' class='pln'><span class='strut'> </span></p> -<p id='t2541' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>showName</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2542' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[escapist] %s: Downloading configuration'</span> <span class='op'>%</span> <span class='nam'>showName</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2543' class='pln'><span class='strut'> </span></p> -<p id='t2544' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2545' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2546' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2547' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2548' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2549' class='stm mis'> <span class='nam'>showName</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'showname'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2550' class='stm mis'> <span class='nam'>videoId</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'episode'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2551' class='pln'><span class='strut'> </span></p> -<p id='t2552' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>showName</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2553' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2554' class='stm mis'> <span class='nam'>webPage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2555' class='stm mis'> <span class='nam'>webPageBytes</span> <span class='op'>=</span> <span class='nam'>webPage</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2556' class='stm mis'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r'text/html; charset="?([^"]+)"?'</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='str'>'Content-Type'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2557' class='stm mis'> <span class='nam'>webPage</span> <span class='op'>=</span> <span class='nam'>webPageBytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>m</span> <span class='key'>else</span> <span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2558' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2559' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download webpage: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2560' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2561' class='pln'><span class='strut'> </span></p> -<p id='t2562' class='stm mis'> <span class='nam'>descMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'<meta name="description" content="([^"]*)"'</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2563' class='stm mis'> <span class='nam'>description</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>descMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2564' class='stm mis'> <span class='nam'>imgMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'<meta property="og:image" content="([^"]*)"'</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2565' class='stm mis'> <span class='nam'>imgUrl</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>imgMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2566' class='stm mis'> <span class='nam'>playerUrlMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'<meta property="og:video" content="([^"]*)"'</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2567' class='stm mis'> <span class='nam'>playerUrl</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>playerUrlMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2568' class='stm mis'> <span class='nam'>configUrlMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'config=(.*)$'</span><span class='op'>,</span> <span class='nam'>playerUrl</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2569' class='stm mis'> <span class='nam'>configUrl</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>configUrlMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2570' class='pln'><span class='strut'> </span></p> -<p id='t2571' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>showName</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2572' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2573' class='stm mis'> <span class='nam'>configJSON</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>configUrl</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2574' class='stm mis'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r'text/html; charset="?([^"]+)"?'</span><span class='op'>,</span> <span class='nam'>configJSON</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='str'>'Content-Type'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2575' class='stm mis'> <span class='nam'>configJSON</span> <span class='op'>=</span> <span class='nam'>configJSON</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>m</span> <span class='key'>else</span> <span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2576' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2577' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download configuration: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2578' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2579' class='pln'><span class='strut'> </span></p> -<p id='t2580' class='pln'> <span class='com'># Technically, it's JavaScript, not JSON</span><span class='strut'> </span></p> -<p id='t2581' class='stm mis'> <span class='nam'>configJSON</span> <span class='op'>=</span> <span class='nam'>configJSON</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>"'"</span><span class='op'>,</span> <span class='str'>'"'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2582' class='pln'><span class='strut'> </span></p> -<p id='t2583' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2584' class='stm mis'> <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>configJSON</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2585' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>ValueError</span><span class='op'>,</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2586' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid JSON in configuration file: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2587' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2588' class='pln'><span class='strut'> </span></p> -<p id='t2589' class='stm mis'> <span class='nam'>playlist</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'playlist'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2590' class='stm mis'> <span class='nam'>videoUrl</span> <span class='op'>=</span> <span class='nam'>playlist</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2591' class='pln'><span class='strut'> </span></p> -<p id='t2592' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2593' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>videoId</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2594' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>videoUrl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2595' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>showName</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2596' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2597' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>showName</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2598' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'flv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2599' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>imgUrl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2600' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>description</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2601' class='pln'> <span class='str'>'player_url'</span><span class='op'>:</span> <span class='nam'>playerUrl</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2602' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2603' class='pln'><span class='strut'> </span></p> -<p id='t2604' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2605' class='pln'><span class='strut'> </span></p> -<p id='t2606' class='pln'><span class='strut'> </span></p> -<p id='t2607' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CollegeHumorIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2608' class='pln'> <span class='str'>"""Information extractor for collegehumor.com"""</span><span class='strut'> </span></p> -<p id='t2609' class='pln'><span class='strut'> </span></p> -<p id='t2610' class='stm run hide_run'> <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t2611' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?collegehumor\.com/video/(?P<videoid>[0-9]+)/(?P<shorttitle>.*)$'</span><span class='strut'> </span></p> -<p id='t2612' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'collegehumor'</span><span class='strut'> </span></p> -<p id='t2613' class='pln'><span class='strut'> </span></p> -<p id='t2614' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_manifest</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2615' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2616' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Downloading XML manifest'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2617' class='pln'><span class='strut'> </span></p> -<p id='t2618' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2619' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2620' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2621' class='pln'><span class='strut'> </span></p> -<p id='t2622' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2623' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2624' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2625' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2626' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2627' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'videoid'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2628' class='pln'><span class='strut'> </span></p> -<p id='t2629' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2630' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2631' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2632' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2633' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2634' class='pln'><span class='strut'> </span></p> -<p id='t2635' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2636' class='stm mis'> <span class='nam'>xmlUrl</span> <span class='op'>=</span> <span class='str'>'http://www.collegehumor.com/moogaloop/video/'</span> <span class='op'>+</span> <span class='nam'>video_id</span><span class='strut'> </span></p> -<p id='t2637' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2638' class='stm mis'> <span class='nam'>metaXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>xmlUrl</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2639' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2640' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video info XML: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2641' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2642' class='pln'><span class='strut'> </span></p> -<p id='t2643' class='stm mis'> <span class='nam'>mdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>metaXml</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2644' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2645' class='stm mis'> <span class='nam'>videoNode</span> <span class='op'>=</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./video'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2646' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./description'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2647' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./caption'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2648' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'thumbnail'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./thumbnail'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2649' class='stm mis'> <span class='nam'>manifest_url</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./file'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2650' class='stm mis'> <span class='key'>except</span> <span class='nam'>IndexError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2651' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: Invalid metadata XML file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2652' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2653' class='pln'><span class='strut'> </span></p> -<p id='t2654' class='stm mis'> <span class='nam'>manifest_url</span> <span class='op'>+=</span> <span class='str'>'?hdcore=2.10.3'</span><span class='strut'> </span></p> -<p id='t2655' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_manifest</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2656' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2657' class='stm mis'> <span class='nam'>manifestXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>manifest_url</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2658' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2659' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video info XML: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2660' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2661' class='pln'><span class='strut'> </span></p> -<p id='t2662' class='stm mis'> <span class='nam'>adoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>manifestXml</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2663' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2664' class='stm mis'> <span class='nam'>media_node</span> <span class='op'>=</span> <span class='nam'>adoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./{http://ns.adobe.com/f4m/1.0}media'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2665' class='stm mis'> <span class='nam'>node_id</span> <span class='op'>=</span> <span class='nam'>media_node</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2666' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>adoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./{http://ns.adobe.com/f4m/1.0}id'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t2667' class='stm mis'> <span class='key'>except</span> <span class='nam'>IndexError</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2668' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: Invalid manifest file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2669' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2670' class='pln'><span class='strut'> </span></p> -<p id='t2671' class='stm mis'> <span class='nam'>url_pr</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse_urlparse</span><span class='op'>(</span><span class='nam'>manifest_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2672' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>url_pr</span><span class='op'>.</span><span class='nam'>scheme</span> <span class='op'>+</span> <span class='str'>'://'</span> <span class='op'>+</span> <span class='nam'>url_pr</span><span class='op'>.</span><span class='nam'>netloc</span> <span class='op'>+</span> <span class='str'>'/z'</span> <span class='op'>+</span> <span class='nam'>video_id</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='num'>2</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>'/'</span> <span class='op'>+</span> <span class='nam'>node_id</span> <span class='op'>+</span> <span class='str'>'Seg1-Frag1'</span><span class='strut'> </span></p> -<p id='t2673' class='pln'><span class='strut'> </span></p> -<p id='t2674' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>url</span><span class='strut'> </span></p> -<p id='t2675' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'ext'</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>'f4f'</span><span class='strut'> </span></p> -<p id='t2676' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2677' class='pln'><span class='strut'> </span></p> -<p id='t2678' class='pln'><span class='strut'> </span></p> -<p id='t2679' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>XVideosIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2680' class='pln'> <span class='str'>"""Information extractor for xvideos.com"""</span><span class='strut'> </span></p> -<p id='t2681' class='pln'><span class='strut'> </span></p> -<p id='t2682' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?xvideos\.com/video([0-9]+)(?:.*)'</span><span class='strut'> </span></p> -<p id='t2683' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'xvideos'</span><span class='strut'> </span></p> -<p id='t2684' class='pln'><span class='strut'> </span></p> -<p id='t2685' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2686' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2687' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2688' class='pln'><span class='strut'> </span></p> -<p id='t2689' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2690' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2691' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2692' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2693' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2694' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2695' class='pln'><span class='strut'> </span></p> -<p id='t2696' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2697' class='pln'><span class='strut'> </span></p> -<p id='t2698' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2699' class='pln'><span class='strut'> </span></p> -<p id='t2700' class='pln'><span class='strut'> </span></p> -<p id='t2701' class='pln'> <span class='com'># Extract video URL</span><span class='strut'> </span></p> -<p id='t2702' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'flv_url=(.+?)&'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2703' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2704' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video url'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2705' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2706' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2707' class='pln'><span class='strut'> </span></p> -<p id='t2708' class='pln'><span class='strut'> </span></p> -<p id='t2709' class='pln'> <span class='com'># Extract title</span><span class='strut'> </span></p> -<p id='t2710' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<title>(.*?)\s+-\s+XVID'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2711' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2712' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2713' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2714' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2715' class='pln'><span class='strut'> </span></p> -<p id='t2716' class='pln'><span class='strut'> </span></p> -<p id='t2717' class='pln'> <span class='com'># Extract video thumbnail</span><span class='strut'> </span></p> -<p id='t2718' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'http://(?:img.*?\.)xvideos.com/videos/thumbs/[a-fA-F0-9]+/[a-fA-F0-9]+/[a-fA-F0-9]+/[a-fA-F0-9]+/([a-fA-F0-9.]+jpg)'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2719' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2720' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video thumbnail'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2721' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2722' class='stm run hide_run'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2723' class='pln'><span class='strut'> </span></p> -<p id='t2724' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2725' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2726' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2727' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2728' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2729' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2730' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'flv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2731' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2732' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2733' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2734' class='pln'><span class='strut'> </span></p> -<p id='t2735' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2736' class='pln'><span class='strut'> </span></p> -<p id='t2737' class='pln'><span class='strut'> </span></p> -<p id='t2738' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>SoundcloudIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2739' class='pln'> <span class='str'>"""Information extractor for soundcloud.com</span><span class='strut'> </span></p> -<p id='t2740' class='pln'><span class='str'> To access the media, the uid of the song and a stream token</span><span class='strut'> </span></p> -<p id='t2741' class='pln'><span class='str'> must be extracted from the page source and the script must make</span><span class='strut'> </span></p> -<p id='t2742' class='pln'><span class='str'> a request to media.soundcloud.com/crossdomain.xml. Then</span><span class='strut'> </span></p> -<p id='t2743' class='pln'><span class='str'> the media can be grabbed by requesting from an url composed</span><span class='strut'> </span></p> -<p id='t2744' class='pln'><span class='str'> of the stream token and uid</span><span class='strut'> </span></p> -<p id='t2745' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t2746' class='pln'><span class='strut'> </span></p> -<p id='t2747' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)'</span><span class='strut'> </span></p> -<p id='t2748' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'soundcloud'</span><span class='strut'> </span></p> -<p id='t2749' class='pln'><span class='strut'> </span></p> -<p id='t2750' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2751' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2752' class='pln'><span class='strut'> </span></p> -<p id='t2753' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_resolve</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2754' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2755' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Resolving id'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2756' class='pln'><span class='strut'> </span></p> -<p id='t2757' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2758' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2759' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Retrieving stream'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2760' class='pln'><span class='strut'> </span></p> -<p id='t2761' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2762' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2763' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2764' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2765' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2766' class='pln'><span class='strut'> </span></p> -<p id='t2767' class='pln'> <span class='com'># extract uploader (which is in the url)</span><span class='strut'> </span></p> -<p id='t2768' class='stm run hide_run'> <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2769' class='pln'> <span class='com'># extract simple title (uploader + slug of song title)</span><span class='strut'> </span></p> -<p id='t2770' class='stm run hide_run'> <span class='nam'>slug_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2771' class='stm run hide_run'> <span class='nam'>simple_title</span> <span class='op'>=</span> <span class='nam'>uploader</span> <span class='op'>+</span> <span class='str'>u'-'</span> <span class='op'>+</span> <span class='nam'>slug_title</span><span class='strut'> </span></p> -<p id='t2772' class='pln'><span class='strut'> </span></p> -<p id='t2773' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_resolve</span><span class='op'>(</span><span class='str'>'%s/%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>uploader</span><span class='op'>,</span> <span class='nam'>slug_title</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2774' class='pln'><span class='strut'> </span></p> -<p id='t2775' class='stm run hide_run'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>'http://soundcloud.com/%s/%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>uploader</span><span class='op'>,</span> <span class='nam'>slug_title</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2776' class='stm run hide_run'> <span class='nam'>resolv_url</span> <span class='op'>=</span> <span class='str'>'http://api.soundcloud.com/resolve.json?url='</span> <span class='op'>+</span> <span class='nam'>url</span> <span class='op'>+</span> <span class='str'>'&client_id=b45b1aa10f1ac2941910a7f0d10f8e28'</span><span class='strut'> </span></p> -<p id='t2777' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>resolv_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2778' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2779' class='stm run hide_run'> <span class='nam'>info_json_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2780' class='stm run hide_run'> <span class='nam'>info_json</span> <span class='op'>=</span> <span class='nam'>info_json_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2781' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2782' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2783' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2784' class='pln'><span class='strut'> </span></p> -<p id='t2785' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>info_json</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2786' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2787' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='str'>'%s/%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>uploader</span><span class='op'>,</span> <span class='nam'>slug_title</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2788' class='pln'><span class='strut'> </span></p> -<p id='t2789' class='stm run hide_run'> <span class='nam'>streams_url</span> <span class='op'>=</span> <span class='str'>'https://api.sndcdn.com/i1/tracks/'</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>'/streams?client_id=b45b1aa10f1ac2941910a7f0d10f8e28'</span><span class='strut'> </span></p> -<p id='t2790' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>streams_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2791' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2792' class='stm run hide_run'> <span class='nam'>stream_json_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2793' class='stm run hide_run'> <span class='nam'>stream_json</span> <span class='op'>=</span> <span class='nam'>stream_json_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2794' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2795' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download stream definitions: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2796' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2797' class='pln'><span class='strut'> </span></p> -<p id='t2798' class='stm run hide_run'> <span class='nam'>streams</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>stream_json</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2799' class='stm run hide_run'> <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>streams</span><span class='op'>[</span><span class='str'>'http_mp3_128_url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2800' class='pln'><span class='strut'> </span></p> -<p id='t2801' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t2802' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2803' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>mediaURL</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2804' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'user'</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'username'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2805' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'created_at'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2806' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2807' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>u'mp3'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2808' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2809' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2810' class='pln'><span class='strut'> </span></p> -<p id='t2811' class='pln'><span class='strut'> </span></p> -<p id='t2812' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>InfoQIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2813' class='pln'> <span class='str'>"""Information extractor for infoq.com"""</span><span class='strut'> </span></p> -<p id='t2814' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?infoq\.com/[^/]+/[^/]+$'</span><span class='strut'> </span></p> -<p id='t2815' class='pln'><span class='strut'> </span></p> -<p id='t2816' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2817' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2818' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2819' class='pln'><span class='strut'> </span></p> -<p id='t2820' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2821' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2822' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2823' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2824' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2825' class='pln'><span class='strut'> </span></p> -<p id='t2826' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>=</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2827' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2828' class='pln'><span class='strut'> </span></p> -<p id='t2829' class='pln'> <span class='com'># Extract video URL</span><span class='strut'> </span></p> -<p id='t2830' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r"jsclassref='([^']*)'"</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2831' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2832' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video url'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2833' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2834' class='stm run hide_run'> <span class='nam'>real_id</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>base64</span><span class='op'>.</span><span class='nam'>b64decode</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>'ascii'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2835' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>'rtmpe://video.infoq.com/cfx/st/'</span> <span class='op'>+</span> <span class='nam'>real_id</span><span class='strut'> </span></p> -<p id='t2836' class='pln'><span class='strut'> </span></p> -<p id='t2837' class='pln'> <span class='com'># Extract title</span><span class='strut'> </span></p> -<p id='t2838' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'contentTitle = "(.*?)";'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2839' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2840' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2841' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2842' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2843' class='pln'><span class='strut'> </span></p> -<p id='t2844' class='pln'> <span class='com'># Extract description</span><span class='strut'> </span></p> -<p id='t2845' class='stm run hide_run'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>u'No description available.'</span><span class='strut'> </span></p> -<p id='t2846' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="description" content="(.*)"(?:\s*/)?>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2847' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2848' class='stm run hide_run'> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2849' class='pln'><span class='strut'> </span></p> -<p id='t2850' class='stm run hide_run'> <span class='nam'>video_filename</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2851' class='stm run hide_run'> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>extension</span> <span class='op'>=</span> <span class='nam'>video_filename</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2852' class='pln'><span class='strut'> </span></p> -<p id='t2853' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t2854' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2855' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2856' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2857' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2858' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2859' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>extension</span><span class='op'>,</span> <span class='com'># Extension is always(?) mp4, but seems to be flv</span><span class='strut'> </span></p> -<p id='t2860' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2861' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2862' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t2863' class='pln'><span class='strut'> </span></p> -<p id='t2864' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2865' class='pln'><span class='strut'> </span></p> -<p id='t2866' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MixcloudIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2867' class='pln'> <span class='str'>"""Information extractor for www.mixcloud.com"""</span><span class='strut'> </span></p> -<p id='t2868' class='pln'><span class='strut'> </span></p> -<p id='t2869' class='stm run hide_run'> <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span> <span class='com'># New API, but it seems good http://www.mixcloud.com/developers/documentation/</span><span class='strut'> </span></p> -<p id='t2870' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?mixcloud\.com/([\w\d-]+)/([\w\d-]+)'</span><span class='strut'> </span></p> -<p id='t2871' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'mixcloud'</span><span class='strut'> </span></p> -<p id='t2872' class='pln'><span class='strut'> </span></p> -<p id='t2873' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2874' class='stm mis'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2875' class='pln'><span class='strut'> </span></p> -<p id='t2876' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_json</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2877' class='pln'> <span class='str'>"""Report JSON download."""</span><span class='strut'> </span></p> -<p id='t2878' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] Downloading json'</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2879' class='pln'><span class='strut'> </span></p> -<p id='t2880' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2881' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2882' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2883' class='pln'><span class='strut'> </span></p> -<p id='t2884' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>get_urls</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>jsonData</span><span class='op'>,</span> <span class='nam'>fmt</span><span class='op'>,</span> <span class='nam'>bitrate</span><span class='op'>=</span><span class='str'>'best'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2885' class='pln'> <span class='str'>"""Get urls from 'audio_formats' section in json"""</span><span class='strut'> </span></p> -<p id='t2886' class='stm mis'> <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2887' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2888' class='stm mis'> <span class='nam'>bitrate_list</span> <span class='op'>=</span> <span class='nam'>jsonData</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2889' class='stm mis'> <span class='key'>if</span> <span class='nam'>bitrate</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>bitrate</span> <span class='op'>==</span> <span class='str'>'best'</span> <span class='key'>or</span> <span class='nam'>bitrate</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>bitrate_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2890' class='stm mis'> <span class='nam'>bitrate</span> <span class='op'>=</span> <span class='nam'>max</span><span class='op'>(</span><span class='nam'>bitrate_list</span><span class='op'>)</span> <span class='com'># select highest</span><span class='strut'> </span></p> -<p id='t2891' class='pln'><span class='strut'> </span></p> -<p id='t2892' class='stm mis'> <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>jsonData</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>bitrate</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2893' class='stm mis'> <span class='key'>except</span> <span class='nam'>TypeError</span><span class='op'>:</span> <span class='com'># we have no bitrate info.</span><span class='strut'> </span></p> -<p id='t2894' class='stm mis'> <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>jsonData</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2895' class='stm mis'> <span class='key'>return</span> <span class='nam'>url_list</span><span class='strut'> </span></p> -<p id='t2896' class='pln'><span class='strut'> </span></p> -<p id='t2897' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>check_urls</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url_list</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2898' class='pln'> <span class='str'>"""Returns 1st active url from list"""</span><span class='strut'> </span></p> -<p id='t2899' class='stm mis'> <span class='key'>for</span> <span class='nam'>url</span> <span class='key'>in</span> <span class='nam'>url_list</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2900' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2901' class='stm mis'> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2902' class='stm mis'> <span class='key'>return</span> <span class='nam'>url</span><span class='strut'> </span></p> -<p id='t2903' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2904' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2905' class='pln'><span class='strut'> </span></p> -<p id='t2906' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2907' class='pln'><span class='strut'> </span></p> -<p id='t2908' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>formats</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2909' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'Available formats:'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2910' class='stm mis'> <span class='key'>for</span> <span class='nam'>fmt</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2911' class='stm mis'> <span class='key'>for</span> <span class='nam'>b</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2912' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2913' class='stm mis'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>formats</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>b</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2914' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'%s\t%s\t[%s]'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>fmt</span><span class='op'>,</span> <span class='nam'>b</span><span class='op'>,</span> <span class='nam'>ext</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2915' class='stm mis'> <span class='key'>except</span> <span class='nam'>TypeError</span><span class='op'>:</span> <span class='com'># we have no bitrate info</span><span class='strut'> </span></p> -<p id='t2916' class='stm mis'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>formats</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2917' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='str'>'%s\t%s\t[%s]'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>fmt</span><span class='op'>,</span> <span class='str'>'??'</span><span class='op'>,</span> <span class='nam'>ext</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2918' class='stm mis'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t2919' class='pln'><span class='strut'> </span></p> -<p id='t2920' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2921' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2922' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2923' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2924' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2925' class='pln'> <span class='com'># extract uploader & filename from url</span><span class='strut'> </span></p> -<p id='t2926' class='stm mis'> <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2927' class='stm mis'> <span class='nam'>file_id</span> <span class='op'>=</span> <span class='nam'>uploader</span> <span class='op'>+</span> <span class='str'>"-"</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2928' class='pln'><span class='strut'> </span></p> -<p id='t2929' class='pln'> <span class='com'># construct API request</span><span class='strut'> </span></p> -<p id='t2930' class='stm mis'> <span class='nam'>file_url</span> <span class='op'>=</span> <span class='str'>'http://www.mixcloud.com/api/1/cloudcast/'</span> <span class='op'>+</span> <span class='str'>'/'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>:</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>'.json'</span><span class='strut'> </span></p> -<p id='t2931' class='pln'> <span class='com'># retrieve .json file with links to files</span><span class='strut'> </span></p> -<p id='t2932' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>file_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2933' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2934' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_json</span><span class='op'>(</span><span class='nam'>file_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2935' class='stm mis'> <span class='nam'>jsonData</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2936' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2937' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve file: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2938' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2939' class='pln'><span class='strut'> </span></p> -<p id='t2940' class='pln'> <span class='com'># parse JSON</span><span class='strut'> </span></p> -<p id='t2941' class='stm mis'> <span class='nam'>json_data</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>jsonData</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2942' class='stm mis'> <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>'player_swf_url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2943' class='stm mis'> <span class='nam'>formats</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='nam'>json_data</span><span class='op'>[</span><span class='str'>'audio_formats'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2944' class='pln'><span class='strut'> </span></p> -<p id='t2945' class='stm mis'> <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2946' class='stm mis'> <span class='nam'>bitrate</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t2947' class='pln'><span class='strut'> </span></p> -<p id='t2948' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'listformats'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2949' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>formats</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2950' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2951' class='pln'><span class='strut'> </span></p> -<p id='t2952' class='stm mis'> <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>'best'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2953' class='stm mis'> <span class='key'>for</span> <span class='nam'>format_param</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2954' class='stm mis'> <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_urls</span><span class='op'>(</span><span class='nam'>formats</span><span class='op'>,</span> <span class='nam'>format_param</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2955' class='pln'> <span class='com'># check urls</span><span class='strut'> </span></p> -<p id='t2956' class='stm mis'> <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>check_urls</span><span class='op'>(</span><span class='nam'>url_list</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2957' class='stm mis'> <span class='key'>if</span> <span class='nam'>file_url</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2958' class='stm mis'> <span class='key'>break</span> <span class='com'># got it!</span><span class='strut'> </span></p> -<p id='t2959' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2960' class='stm mis'> <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2961' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: format is not available'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2962' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t2963' class='pln'><span class='strut'> </span></p> -<p id='t2964' class='stm mis'> <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_urls</span><span class='op'>(</span><span class='nam'>formats</span><span class='op'>,</span> <span class='nam'>req_format</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2965' class='stm mis'> <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>check_urls</span><span class='op'>(</span><span class='nam'>url_list</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2966' class='stm mis'> <span class='nam'>format_param</span> <span class='op'>=</span> <span class='nam'>req_format</span><span class='strut'> </span></p> -<p id='t2967' class='pln'><span class='strut'> </span></p> -<p id='t2968' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t2969' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>file_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2970' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>file_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2971' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2972' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2973' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>'name'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2974' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>file_url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2975' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='op'>(</span><span class='nam'>format_param</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='str'>u'NA'</span> <span class='key'>or</span> <span class='nam'>format_param</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2976' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>'thumbnail_url'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2977' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2978' class='pln'> <span class='str'>'player_url'</span><span class='op'>:</span> <span class='nam'>player_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t2979' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t2980' class='pln'><span class='strut'> </span></p> -<p id='t2981' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>StanfordOpenClassroomIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2982' class='pln'> <span class='str'>"""Information extractor for Stanford's Open ClassRoom"""</span><span class='strut'> </span></p> -<p id='t2983' class='pln'><span class='strut'> </span></p> -<p id='t2984' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?openclassroom.stanford.edu(?P<path>/?|(/MainFolder/(?:HomePage|CoursePage|VideoPage)\.php([?]course=(?P<course>[^&]+)(&video=(?P<video>[^&]+))?(&.*)?)?))$'</span><span class='strut'> </span></p> -<p id='t2985' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'stanfordoc'</span><span class='strut'> </span></p> -<p id='t2986' class='pln'><span class='strut'> </span></p> -<p id='t2987' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>objid</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2988' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2989' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>objid</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2990' class='pln'><span class='strut'> </span></p> -<p id='t2991' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2992' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t2993' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2994' class='pln'><span class='strut'> </span></p> -<p id='t2995' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2996' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2997' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t2998' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t2999' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3000' class='pln'><span class='strut'> </span></p> -<p id='t3001' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'course'</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'video'</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># A specific video</span><span class='strut'> </span></p> -<p id='t3002' class='stm run hide_run'> <span class='nam'>course</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'course'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3003' class='stm run hide_run'> <span class='nam'>video</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'video'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3004' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3005' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>course</span> <span class='op'>+</span> <span class='str'>'_'</span> <span class='op'>+</span> <span class='nam'>video</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3006' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3007' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3008' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3009' class='pln'><span class='strut'> </span></p> -<p id='t3010' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3011' class='stm run hide_run'> <span class='nam'>baseUrl</span> <span class='op'>=</span> <span class='str'>'http://openclassroom.stanford.edu/MainFolder/courses/'</span> <span class='op'>+</span> <span class='nam'>course</span> <span class='op'>+</span> <span class='str'>'/videos/'</span><span class='strut'> </span></p> -<p id='t3012' class='stm run hide_run'> <span class='nam'>xmlUrl</span> <span class='op'>=</span> <span class='nam'>baseUrl</span> <span class='op'>+</span> <span class='nam'>video</span> <span class='op'>+</span> <span class='str'>'.xml'</span><span class='strut'> </span></p> -<p id='t3013' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3014' class='stm run hide_run'> <span class='nam'>metaXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>xmlUrl</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3015' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3016' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video info XML: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3017' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3018' class='stm run hide_run'> <span class='nam'>mdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>metaXml</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3019' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3020' class='stm run hide_run'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./title'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t3021' class='stm run hide_run'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>baseUrl</span> <span class='op'>+</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'./videoFile'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t3022' class='stm mis'> <span class='key'>except</span> <span class='nam'>IndexError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3023' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'\nERROR: Invalid metadata XML file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3024' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3025' class='stm run hide_run'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'ext'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>rpartition</span><span class='op'>(</span><span class='str'>'.'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3026' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3027' class='stm mis'> <span class='key'>elif</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'course'</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># A course page</span><span class='strut'> </span></p> -<p id='t3028' class='stm mis'> <span class='nam'>course</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'course'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3029' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3030' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>course</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3031' class='pln'> <span class='str'>'type'</span><span class='op'>:</span> <span class='str'>'playlist'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3032' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3033' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3034' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3035' class='pln'><span class='strut'> </span></p> -<p id='t3036' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3037' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3038' class='stm mis'> <span class='nam'>coursepage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3039' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3040' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download course info page: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3041' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3042' class='pln'><span class='strut'> </span></p> -<p id='t3043' class='stm mis'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'<h1>([^<]+)</h1>'</span><span class='op'>,</span> <span class='nam'>coursepage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3044' class='stm mis'> <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3045' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3046' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3047' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3048' class='pln'><span class='strut'> </span></p> -<p id='t3049' class='stm mis'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>'<description>([^<]+)</description>'</span><span class='op'>,</span> <span class='nam'>coursepage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3050' class='stm mis'> <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3051' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'description'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3052' class='pln'><span class='strut'> </span></p> -<p id='t3053' class='stm mis'> <span class='nam'>links</span> <span class='op'>=</span> <span class='nam'>orderedSet</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'<a href="(VideoPage.php\?[^"]+)">'</span><span class='op'>,</span> <span class='nam'>coursepage</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3054' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'list'</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t3055' class='pln'> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3056' class='pln'> <span class='str'>'type'</span><span class='op'>:</span> <span class='str'>'reference'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3057' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='str'>'http://openclassroom.stanford.edu/MainFolder/'</span> <span class='op'>+</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>vpage</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3058' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3059' class='pln'> <span class='key'>for</span> <span class='nam'>vpage</span> <span class='key'>in</span> <span class='nam'>links</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3060' class='stm mis'> <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3061' class='stm mis'> <span class='key'>for</span> <span class='nam'>entry</span> <span class='key'>in</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'list'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3062' class='stm mis'> <span class='key'>assert</span> <span class='nam'>entry</span><span class='op'>[</span><span class='str'>'type'</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>'reference'</span><span class='strut'> </span></p> -<p id='t3063' class='stm mis'> <span class='nam'>results</span> <span class='op'>+=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extract</span><span class='op'>(</span><span class='nam'>entry</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3064' class='stm mis'> <span class='key'>return</span> <span class='nam'>results</span><span class='strut'> </span></p> -<p id='t3065' class='pln'><span class='strut'> </span></p> -<p id='t3066' class='pln'> <span class='key'>else</span><span class='op'>:</span> <span class='com'># Root page</span><span class='strut'> </span></p> -<p id='t3067' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3068' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='str'>'Stanford OpenClassroom'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3069' class='pln'> <span class='str'>'type'</span><span class='op'>:</span> <span class='str'>'playlist'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3070' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3071' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3072' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3073' class='pln'><span class='strut'> </span></p> -<p id='t3074' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3075' class='stm mis'> <span class='nam'>rootURL</span> <span class='op'>=</span> <span class='str'>'http://openclassroom.stanford.edu/MainFolder/HomePage.php'</span><span class='strut'> </span></p> -<p id='t3076' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3077' class='stm mis'> <span class='nam'>rootpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>rootURL</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3078' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3079' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download course info page: '</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3080' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3081' class='pln'><span class='strut'> </span></p> -<p id='t3082' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3083' class='pln'><span class='strut'> </span></p> -<p id='t3084' class='stm mis'> <span class='nam'>links</span> <span class='op'>=</span> <span class='nam'>orderedSet</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'<a href="(CoursePage.php\?[^"]+)">'</span><span class='op'>,</span> <span class='nam'>rootpage</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3085' class='stm mis'> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'list'</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t3086' class='pln'> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3087' class='pln'> <span class='str'>'type'</span><span class='op'>:</span> <span class='str'>'reference'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3088' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='str'>'http://openclassroom.stanford.edu/MainFolder/'</span> <span class='op'>+</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>cpage</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3089' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3090' class='pln'> <span class='key'>for</span> <span class='nam'>cpage</span> <span class='key'>in</span> <span class='nam'>links</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3091' class='pln'><span class='strut'> </span></p> -<p id='t3092' class='stm mis'> <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3093' class='stm mis'> <span class='key'>for</span> <span class='nam'>entry</span> <span class='key'>in</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>'list'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3094' class='stm mis'> <span class='key'>assert</span> <span class='nam'>entry</span><span class='op'>[</span><span class='str'>'type'</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>'reference'</span><span class='strut'> </span></p> -<p id='t3095' class='stm mis'> <span class='nam'>results</span> <span class='op'>+=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extract</span><span class='op'>(</span><span class='nam'>entry</span><span class='op'>[</span><span class='str'>'url'</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3096' class='stm mis'> <span class='key'>return</span> <span class='nam'>results</span><span class='strut'> </span></p> -<p id='t3097' class='pln'><span class='strut'> </span></p> -<p id='t3098' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MTVIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3099' class='pln'> <span class='str'>"""Information extractor for MTV.com"""</span><span class='strut'> </span></p> -<p id='t3100' class='pln'><span class='strut'> </span></p> -<p id='t3101' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?P<proto>https?://)?(?:www\.)?mtv\.com/videos/[^/]+/(?P<videoid>[0-9]+)/[^/]+$'</span><span class='strut'> </span></p> -<p id='t3102' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'mtv'</span><span class='strut'> </span></p> -<p id='t3103' class='pln'><span class='strut'> </span></p> -<p id='t3104' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3105' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t3106' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3107' class='pln'><span class='strut'> </span></p> -<p id='t3108' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3109' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3110' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3111' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3112' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3113' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'proto'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3114' class='stm mis'> <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>'http://'</span> <span class='op'>+</span> <span class='nam'>url</span><span class='strut'> </span></p> -<p id='t3115' class='stm mis'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'videoid'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3116' class='pln'><span class='strut'> </span></p> -<p id='t3117' class='stm mis'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3118' class='pln'><span class='strut'> </span></p> -<p id='t3119' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="mtv_vt" content="([^"]+)"/>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3120' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3121' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract song name'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3122' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3123' class='stm mis'> <span class='nam'>song_name</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'iso-8859-1'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3124' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="mtv_an" content="([^"]+)"/>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3125' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3126' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract performer'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3127' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3128' class='stm mis'> <span class='nam'>performer</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'iso-8859-1'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3129' class='stm mis'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>performer</span> <span class='op'>+</span> <span class='str'>' - '</span> <span class='op'>+</span> <span class='nam'>song_name</span><span class='strut'> </span></p> -<p id='t3130' class='pln'><span class='strut'> </span></p> -<p id='t3131' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta name="mtvn_uri" content="([^"]+)"/>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3132' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3133' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to mtvn_uri'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3134' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3135' class='stm mis'> <span class='nam'>mtvn_uri</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3136' class='pln'><span class='strut'> </span></p> -<p id='t3137' class='stm mis'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'MTVN.Player.defaultPlaylistId = ([0-9]+);'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3138' class='stm mis'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3139' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract content id'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3140' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3141' class='stm mis'> <span class='nam'>content_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3142' class='pln'><span class='strut'> </span></p> -<p id='t3143' class='stm mis'> <span class='nam'>videogen_url</span> <span class='op'>=</span> <span class='str'>'http://www.mtv.com/player/includes/mediaGen.jhtml?uri='</span> <span class='op'>+</span> <span class='nam'>mtvn_uri</span> <span class='op'>+</span> <span class='str'>'&id='</span> <span class='op'>+</span> <span class='nam'>content_id</span> <span class='op'>+</span> <span class='str'>'&vid='</span> <span class='op'>+</span> <span class='nam'>video_id</span> <span class='op'>+</span> <span class='str'>'&ref=www.mtvn.com&viewUri='</span> <span class='op'>+</span> <span class='nam'>mtvn_uri</span><span class='strut'> </span></p> -<p id='t3144' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3145' class='stm mis'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>videogen_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3146' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3147' class='stm mis'> <span class='nam'>metadataXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3148' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3149' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video metadata: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3150' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3151' class='pln'><span class='strut'> </span></p> -<p id='t3152' class='stm mis'> <span class='nam'>mdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>metadataXml</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3153' class='stm mis'> <span class='nam'>renditions</span> <span class='op'>=</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>'.//rendition'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3154' class='pln'><span class='strut'> </span></p> -<p id='t3155' class='pln'> <span class='com'># For now, always pick the highest quality.</span><span class='strut'> </span></p> -<p id='t3156' class='stm mis'> <span class='nam'>rendition</span> <span class='op'>=</span> <span class='nam'>renditions</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3157' class='pln'><span class='strut'> </span></p> -<p id='t3158' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3159' class='stm mis'> <span class='nam'>_</span><span class='op'>,</span><span class='nam'>_</span><span class='op'>,</span><span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>'type'</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>partition</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3160' class='stm mis'> <span class='nam'>format</span> <span class='op'>=</span> <span class='nam'>ext</span> <span class='op'>+</span> <span class='str'>'-'</span> <span class='op'>+</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>'width'</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>'x'</span> <span class='op'>+</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>'height'</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>'_'</span> <span class='op'>+</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>'bitrate'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3161' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>'./src'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'> </span></p> -<p id='t3162' class='stm mis'> <span class='key'>except</span> <span class='nam'>KeyError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3163' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>'Invalid rendition field.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3164' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3165' class='pln'><span class='strut'> </span></p> -<p id='t3166' class='stm mis'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3167' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3168' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3169' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>performer</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3170' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3171' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3172' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3173' class='pln'> <span class='str'>'format'</span><span class='op'>:</span> <span class='nam'>format</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3174' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3175' class='pln'><span class='strut'> </span></p> -<p id='t3176' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3177' class='pln'><span class='strut'> </span></p> -<p id='t3178' class='pln'><span class='strut'> </span></p> -<p id='t3179' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoukuIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3180' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:http://)?v\.youku\.com/v_show/id_(?P<ID>[A-Za-z0-9]+)\.html'</span><span class='strut'> </span></p> -<p id='t3181' class='pln'><span class='strut'> </span></p> -<p id='t3182' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3183' class='pln'> <span class='str'>"""Report webpage download."""</span><span class='strut'> </span></p> -<p id='t3184' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3185' class='pln'><span class='strut'> </span></p> -<p id='t3186' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3187' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t3188' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3189' class='pln'><span class='strut'> </span></p> -<p id='t3190' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_gen_sid</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3191' class='stm run hide_run'> <span class='nam'>nowTime</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>*</span> <span class='num'>1000</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3192' class='stm run hide_run'> <span class='nam'>random1</span> <span class='op'>=</span> <span class='nam'>random</span><span class='op'>.</span><span class='nam'>randint</span><span class='op'>(</span><span class='num'>1000</span><span class='op'>,</span><span class='num'>1998</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3193' class='stm run hide_run'> <span class='nam'>random2</span> <span class='op'>=</span> <span class='nam'>random</span><span class='op'>.</span><span class='nam'>randint</span><span class='op'>(</span><span class='num'>1000</span><span class='op'>,</span><span class='num'>9999</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3194' class='pln'><span class='strut'> </span></p> -<p id='t3195' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>"%d%d%d"</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>nowTime</span><span class='op'>,</span><span class='nam'>random1</span><span class='op'>,</span><span class='nam'>random2</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3196' class='pln'><span class='strut'> </span></p> -<p id='t3197' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_get_file_ID_mix_string</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>seed</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3198' class='stm run hide_run'> <span class='nam'>mixed</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3199' class='stm run hide_run'> <span class='nam'>source</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='str'>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890"</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3200' class='stm run hide_run'> <span class='nam'>seed</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>seed</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3201' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3202' class='stm run hide_run'> <span class='nam'>seed</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>seed</span> <span class='op'>*</span> <span class='num'>211</span> <span class='op'>+</span> <span class='num'>30031</span> <span class='op'>)</span> <span class='op'>%</span> <span class='num'>65536</span><span class='strut'> </span></p> -<p id='t3203' class='stm run hide_run'> <span class='nam'>index</span> <span class='op'>=</span> <span class='nam'>math</span><span class='op'>.</span><span class='nam'>floor</span><span class='op'>(</span><span class='nam'>seed</span> <span class='op'>/</span> <span class='num'>65536</span> <span class='op'>*</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>)</span> <span class='op'>)</span><span class='strut'> </span></p> -<p id='t3204' class='stm run hide_run'> <span class='nam'>mixed</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>[</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>index</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3205' class='stm run hide_run'> <span class='nam'>source</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>[</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>index</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3206' class='pln'> <span class='com'>#return ''.join(mixed)</span><span class='strut'> </span></p> -<p id='t3207' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>mixed</span><span class='strut'> </span></p> -<p id='t3208' class='pln'><span class='strut'> </span></p> -<p id='t3209' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_get_file_id</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>fileId</span><span class='op'>,</span> <span class='nam'>seed</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3210' class='stm run hide_run'> <span class='nam'>mixed</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_get_file_ID_mix_string</span><span class='op'>(</span><span class='nam'>seed</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3211' class='stm run hide_run'> <span class='nam'>ids</span> <span class='op'>=</span> <span class='nam'>fileId</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'*'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3212' class='stm run hide_run'> <span class='nam'>realId</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3213' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>ch</span> <span class='key'>in</span> <span class='nam'>ids</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3214' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>ch</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3215' class='stm run hide_run'> <span class='nam'>realId</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mixed</span><span class='op'>[</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>ch</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3216' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>''</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>realId</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3217' class='pln'><span class='strut'> </span></p> -<p id='t3218' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3219' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3220' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3221' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3222' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3223' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'ID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3224' class='pln'><span class='strut'> </span></p> -<p id='t3225' class='stm run hide_run'> <span class='nam'>info_url</span> <span class='op'>=</span> <span class='str'>'http://v.youku.com/player/getPlayList/VideoIDS/'</span> <span class='op'>+</span> <span class='nam'>video_id</span><span class='strut'> </span></p> -<p id='t3226' class='pln'><span class='strut'> </span></p> -<p id='t3227' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>info_url</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>std_headers</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3228' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3229' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3230' class='stm run hide_run'> <span class='nam'>jsondata</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3231' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3232' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3233' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3234' class='pln'><span class='strut'> </span></p> -<p id='t3235' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3236' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3237' class='stm run hide_run'> <span class='nam'>jsonstr</span> <span class='op'>=</span> <span class='nam'>jsondata</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3238' class='stm run hide_run'> <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>jsonstr</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3239' class='pln'><span class='strut'> </span></p> -<p id='t3240' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'data'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3241' class='stm run hide_run'> <span class='nam'>seed</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'data'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'seed'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3242' class='pln'><span class='strut'> </span></p> -<p id='t3243' class='stm run hide_run'> <span class='nam'>format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'format'</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3244' class='stm run hide_run'> <span class='nam'>supported_format</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>config</span><span class='op'>[</span><span class='str'>'data'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'streamfileids'</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3245' class='pln'><span class='strut'> </span></p> -<p id='t3246' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>format</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>format</span> <span class='op'>==</span> <span class='str'>'best'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3247' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'hd2'</span> <span class='key'>in</span> <span class='nam'>supported_format</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3248' class='stm mis'> <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>'hd2'</span><span class='strut'> </span></p> -<p id='t3249' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3250' class='stm run hide_run'> <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>'flv'</span><span class='strut'> </span></p> -<p id='t3251' class='stm run hide_run'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='str'>u'flv'</span><span class='strut'> </span></p> -<p id='t3252' class='stm mis'> <span class='key'>elif</span> <span class='nam'>format</span> <span class='op'>==</span> <span class='str'>'worst'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3253' class='stm mis'> <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>'mp4'</span><span class='strut'> </span></p> -<p id='t3254' class='stm mis'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='str'>u'mp4'</span><span class='strut'> </span></p> -<p id='t3255' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3256' class='stm mis'> <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>'flv'</span><span class='strut'> </span></p> -<p id='t3257' class='stm mis'> <span class='nam'>ext</span> <span class='op'>=</span> <span class='str'>u'flv'</span><span class='strut'> </span></p> -<p id='t3258' class='pln'><span class='strut'> </span></p> -<p id='t3259' class='pln'><span class='strut'> </span></p> -<p id='t3260' class='stm run hide_run'> <span class='nam'>fileid</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'data'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'streamfileids'</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>format</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3261' class='stm run hide_run'> <span class='nam'>keys</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>s</span><span class='op'>[</span><span class='str'>'k'</span><span class='op'>]</span> <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>'data'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>'segs'</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>format</span><span class='op'>]</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3262' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>UnicodeDecodeError</span><span class='op'>,</span> <span class='nam'>ValueError</span><span class='op'>,</span> <span class='nam'>KeyError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3263' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract info section'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3264' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3265' class='pln'><span class='strut'> </span></p> -<p id='t3266' class='stm run hide_run'> <span class='nam'>files_info</span><span class='op'>=</span><span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3267' class='stm run hide_run'> <span class='nam'>sid</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_gen_sid</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3268' class='stm run hide_run'> <span class='nam'>fileid</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_get_file_id</span><span class='op'>(</span><span class='nam'>fileid</span><span class='op'>,</span> <span class='nam'>seed</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3269' class='pln'><span class='strut'> </span></p> -<p id='t3270' class='pln'> <span class='com'>#column 8,9 of fileid represent the segment number</span><span class='strut'> </span></p> -<p id='t3271' class='pln'> <span class='com'>#fileid[7:9] should be changed</span><span class='strut'> </span></p> -<p id='t3272' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>index</span><span class='op'>,</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='nam'>enumerate</span><span class='op'>(</span><span class='nam'>keys</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3273' class='pln'><span class='strut'> </span></p> -<p id='t3274' class='stm run hide_run'> <span class='nam'>temp_fileid</span> <span class='op'>=</span> <span class='str'>'%s%02X%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>fileid</span><span class='op'>[</span><span class='num'>0</span><span class='op'>:</span><span class='num'>8</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>index</span><span class='op'>,</span> <span class='nam'>fileid</span><span class='op'>[</span><span class='num'>10</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3275' class='stm run hide_run'> <span class='nam'>download_url</span> <span class='op'>=</span> <span class='str'>'http://f.youku.com/player/getFlvPath/sid/%s_%02X/st/flv/fileid/%s?k=%s'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>sid</span><span class='op'>,</span> <span class='nam'>index</span><span class='op'>,</span> <span class='nam'>temp_fileid</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3276' class='pln'><span class='strut'> </span></p> -<p id='t3277' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3278' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='str'>'%s_part%02d'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>index</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3279' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>download_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3280' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3281' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3282' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3283' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3284' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3285' class='stm run hide_run'> <span class='nam'>files_info</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3286' class='pln'><span class='strut'> </span></p> -<p id='t3287' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>files_info</span><span class='strut'> </span></p> -<p id='t3288' class='pln'><span class='strut'> </span></p> -<p id='t3289' class='pln'><span class='strut'> </span></p> -<p id='t3290' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>XNXXIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3291' class='pln'> <span class='str'>"""Information extractor for xnxx.com"""</span><span class='strut'> </span></p> -<p id='t3292' class='pln'><span class='strut'> </span></p> -<p id='t3293' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^http://video\.xnxx\.com/video([0-9]+)/(.*)'</span><span class='strut'> </span></p> -<p id='t3294' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'xnxx'</span><span class='strut'> </span></p> -<p id='t3295' class='stm run hide_run'> <span class='nam'>VIDEO_URL_RE</span> <span class='op'>=</span> <span class='str'>r'flv_url=(.*?)&amp;'</span><span class='strut'> </span></p> -<p id='t3296' class='stm run hide_run'> <span class='nam'>VIDEO_TITLE_RE</span> <span class='op'>=</span> <span class='str'>r'<title>(.*?)\s+-\s+XNXX.COM'</span><span class='strut'> </span></p> -<p id='t3297' class='stm run hide_run'> <span class='nam'>VIDEO_THUMB_RE</span> <span class='op'>=</span> <span class='str'>r'url_bigthumb=(.*?)&amp;'</span><span class='strut'> </span></p> -<p id='t3298' class='pln'><span class='strut'> </span></p> -<p id='t3299' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3300' class='pln'> <span class='str'>"""Report information extraction"""</span><span class='strut'> </span></p> -<p id='t3301' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Downloading webpage'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3302' class='pln'><span class='strut'> </span></p> -<p id='t3303' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3304' class='pln'> <span class='str'>"""Report information extraction"""</span><span class='strut'> </span></p> -<p id='t3305' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3306' class='pln'><span class='strut'> </span></p> -<p id='t3307' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3308' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3309' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3310' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3311' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3312' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3313' class='pln'><span class='strut'> </span></p> -<p id='t3314' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3315' class='pln'><span class='strut'> </span></p> -<p id='t3316' class='pln'> <span class='com'># Get webpage content</span><span class='strut'> </span></p> -<p id='t3317' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3318' class='stm run hide_run'> <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3319' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3320' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3321' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>err</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3322' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3323' class='pln'><span class='strut'> </span></p> -<p id='t3324' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>VIDEO_URL_RE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3325' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3326' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video url'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3327' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3328' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>result</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3329' class='pln'><span class='strut'> </span></p> -<p id='t3330' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>VIDEO_TITLE_RE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3331' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3332' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3333' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3334' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3335' class='pln'><span class='strut'> </span></p> -<p id='t3336' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>VIDEO_THUMB_RE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3337' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3338' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video thumbnail'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3339' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3340' class='stm run hide_run'> <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3341' class='pln'><span class='strut'> </span></p> -<p id='t3342' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t3343' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3344' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3345' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3346' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3347' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3348' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'flv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3349' class='pln'> <span class='str'>'thumbnail'</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3350' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3351' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3352' class='pln'><span class='strut'> </span></p> -<p id='t3353' class='pln'><span class='strut'> </span></p> -<p id='t3354' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>GooglePlusIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3355' class='pln'> <span class='str'>"""Information extractor for plus.google.com."""</span><span class='strut'> </span></p> -<p id='t3356' class='pln'><span class='strut'> </span></p> -<p id='t3357' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'(?:https://)?plus\.google\.com/(?:[^/]+/)*?posts/(\w+)'</span><span class='strut'> </span></p> -<p id='t3358' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'plus.google'</span><span class='strut'> </span></p> -<p id='t3359' class='pln'><span class='strut'> </span></p> -<p id='t3360' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3361' class='stm run hide_run'> <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3362' class='pln'><span class='strut'> </span></p> -<p id='t3363' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extract_entry</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3364' class='pln'> <span class='str'>"""Report downloading extry"""</span><span class='strut'> </span></p> -<p id='t3365' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[plus.google] Downloading entry: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3366' class='pln'><span class='strut'> </span></p> -<p id='t3367' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_date</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>upload_date</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3368' class='pln'> <span class='str'>"""Report downloading extry"""</span><span class='strut'> </span></p> -<p id='t3369' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[plus.google] Entry date: %s'</span> <span class='op'>%</span> <span class='nam'>upload_date</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3370' class='pln'><span class='strut'> </span></p> -<p id='t3371' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_uploader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>uploader</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3372' class='pln'> <span class='str'>"""Report downloading extry"""</span><span class='strut'> </span></p> -<p id='t3373' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[plus.google] Uploader: %s'</span> <span class='op'>%</span> <span class='nam'>uploader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3374' class='pln'><span class='strut'> </span></p> -<p id='t3375' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_title</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_title</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3376' class='pln'> <span class='str'>"""Report downloading extry"""</span><span class='strut'> </span></p> -<p id='t3377' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[plus.google] Title: %s'</span> <span class='op'>%</span> <span class='nam'>video_title</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3378' class='pln'><span class='strut'> </span></p> -<p id='t3379' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extract_vid_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3380' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t3381' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[plus.google] Extracting video page: %s'</span> <span class='op'>%</span> <span class='nam'>video_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3382' class='pln'><span class='strut'> </span></p> -<p id='t3383' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3384' class='pln'> <span class='com'># Extract id from URL</span><span class='strut'> </span></p> -<p id='t3385' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3386' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3387' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3388' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3389' class='pln'><span class='strut'> </span></p> -<p id='t3390' class='stm run hide_run'> <span class='nam'>post_url</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3391' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3392' class='pln'><span class='strut'> </span></p> -<p id='t3393' class='stm run hide_run'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>'flv'</span><span class='strut'> </span></p> -<p id='t3394' class='pln'><span class='strut'> </span></p> -<p id='t3395' class='pln'> <span class='com'># Step 1, Retrieve post webpage to extract further information</span><span class='strut'> </span></p> -<p id='t3396' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extract_entry</span><span class='op'>(</span><span class='nam'>post_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3397' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>post_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3398' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3399' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3400' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3401' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve entry webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3402' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3403' class='pln'><span class='strut'> </span></p> -<p id='t3404' class='pln'> <span class='com'># Extract update date</span><span class='strut'> </span></p> -<p id='t3405' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t3406' class='stm run hide_run'> <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>'title="Timestamp">(.*?)</a>'</span><span class='strut'> </span></p> -<p id='t3407' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3408' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3409' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3410' class='pln'> <span class='com'># Convert timestring to a format suitable for filename</span><span class='strut'> </span></p> -<p id='t3411' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>upload_date</span><span class='op'>,</span> <span class='str'>"%Y-%m-%d"</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3412' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>upload_date</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>'%Y%m%d'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3413' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_date</span><span class='op'>(</span><span class='nam'>upload_date</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3414' class='pln'><span class='strut'> </span></p> -<p id='t3415' class='pln'> <span class='com'># Extract uploader</span><span class='strut'> </span></p> -<p id='t3416' class='stm run hide_run'> <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t3417' class='stm run hide_run'> <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>r'rel\="author".*?>(.*?)</a>'</span><span class='strut'> </span></p> -<p id='t3418' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3419' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3420' class='stm run hide_run'> <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3421' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_uploader</span><span class='op'>(</span><span class='nam'>uploader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3422' class='pln'><span class='strut'> </span></p> -<p id='t3423' class='pln'> <span class='com'># Extract title</span><span class='strut'> </span></p> -<p id='t3424' class='pln'> <span class='com'># Get the first line for title</span><span class='strut'> </span></p> -<p id='t3425' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='str'>u'NA'</span><span class='strut'> </span></p> -<p id='t3426' class='stm run hide_run'> <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>r'<meta name\=\"Description\" content\=\"(.*?)[\n<"]'</span><span class='strut'> </span></p> -<p id='t3427' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3428' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3429' class='stm run hide_run'> <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3430' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_title</span><span class='op'>(</span><span class='nam'>video_title</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3431' class='pln'><span class='strut'> </span></p> -<p id='t3432' class='pln'> <span class='com'># Step 2, Stimulate clicking the image box to launch video</span><span class='strut'> </span></p> -<p id='t3433' class='stm run hide_run'> <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>'"(https\://plus\.google\.com/photos/.*?)",,"image/jpeg","video"\]'</span><span class='strut'> </span></p> -<p id='t3434' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3435' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3436' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video page URL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3437' class='pln'><span class='strut'> </span></p> -<p id='t3438' class='stm run hide_run'> <span class='nam'>video_page</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3439' class='stm run hide_run'> <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>video_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3440' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3441' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3442' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3443' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Unable to retrieve video webpage: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3444' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3445' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extract_vid_page</span><span class='op'>(</span><span class='nam'>video_page</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3446' class='pln'><span class='strut'> </span></p> -<p id='t3447' class='pln'><span class='strut'> </span></p> -<p id='t3448' class='pln'> <span class='com'># Extract video links on video page</span><span class='strut'> </span></p> -<p id='t3449' class='pln'> <span class='str'>"""Extract video links of all sizes"""</span><span class='strut'> </span></p> -<p id='t3450' class='stm run hide_run'> <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>'\d+,\d+,(\d+),"(http\://redirector\.googlevideo\.com.*?)"'</span><span class='strut'> </span></p> -<p id='t3451' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3452' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3453' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to extract video links'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3454' class='pln'><span class='strut'> </span></p> -<p id='t3455' class='pln'> <span class='com'># Sort in resolution</span><span class='strut'> </span></p> -<p id='t3456' class='stm run hide_run'> <span class='nam'>links</span> <span class='op'>=</span> <span class='nam'>sorted</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3457' class='pln'><span class='strut'> </span></p> -<p id='t3458' class='pln'> <span class='com'># Choose the lowest of the sort, i.e. highest resolution</span><span class='strut'> </span></p> -<p id='t3459' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>links</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3460' class='pln'> <span class='com'># Only get the url. The resolution part in the tuple has no use anymore</span><span class='strut'> </span></p> -<p id='t3461' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3462' class='pln'> <span class='com'># Treat escaped \u0026 style hex</span><span class='strut'> </span></p> -<p id='t3463' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3464' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>"unicode_escape"</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3465' class='stm mis'> <span class='key'>except</span> <span class='nam'>AttributeError</span><span class='op'>:</span> <span class='com'># Python 3</span><span class='strut'> </span></p> -<p id='t3466' class='stm mis'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>bytes</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>,</span> <span class='str'>'ascii'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'unicode-escape'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3467' class='pln'><span class='strut'> </span></p> -<p id='t3468' class='pln'><span class='strut'> </span></p> -<p id='t3469' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t3470' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3471' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3472' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3473' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3474' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3475' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3476' class='pln'> <span class='op'>}</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3477' class='pln'><span class='strut'> </span></p> -<p id='t3478' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>NBAIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3479' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:watch\.|www\.)?nba\.com/(?:nba/)?video(/[^?]*)(\?.*)?$'</span><span class='strut'> </span></p> -<p id='t3480' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'nba'</span><span class='strut'> </span></p> -<p id='t3481' class='pln'><span class='strut'> </span></p> -<p id='t3482' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3483' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3484' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3485' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3486' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3487' class='pln'><span class='strut'> </span></p> -<p id='t3488' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3489' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>endswith</span><span class='op'>(</span><span class='str'>'/index.html'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3490' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>video_id</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='nam'>len</span><span class='op'>(</span><span class='str'>'/index.html'</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3491' class='pln'><span class='strut'> </span></p> -<p id='t3492' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3493' class='pln'><span class='strut'> </span></p> -<p id='t3494' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>u'http://ht-mobile.cdn.turner.com/nba/big'</span> <span class='op'>+</span> <span class='nam'>video_id</span> <span class='op'>+</span> <span class='str'>'_nba_1280x720.mp4'</span><span class='strut'> </span></p> -<p id='t3495' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='nam'>rexp</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3496' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>rexp</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3497' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3498' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3499' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3500' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>default</span><span class='strut'> </span></p> -<p id='t3501' class='pln'><span class='strut'> </span></p> -<p id='t3502' class='stm run hide_run'> <span class='nam'>shortened_video_id</span> <span class='op'>=</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>rpartition</span><span class='op'>(</span><span class='str'>'/'</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3503' class='stm run hide_run'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='str'>r'<meta property="og:title" content="(.*?)"'</span><span class='op'>,</span> <span class='nam'>shortened_video_id</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'NBA.com: '</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3504' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3505' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>shortened_video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3506' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3507' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3508' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3509' class='pln'> <span class='str'>'uploader_date'</span><span class='op'>:</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='str'>r'<b>Date:</b> (.*?)</div>'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3510' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='str'>r'<div class="description">(.*?)</h1>'</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3511' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3512' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3513' class='pln'><span class='strut'> </span></p> -<p id='t3514' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>JustinTVIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3515' class='pln'> <span class='str'>"""Information extractor for justin.tv and twitch.tv"""</span><span class='strut'> </span></p> -<p id='t3516' class='pln'> <span class='com'># TODO: One broadcast may be split into multiple videos. The key</span><span class='strut'> </span></p> -<p id='t3517' class='pln'> <span class='com'># 'broadcast_id' is the same for all parts, and 'broadcast_part'</span><span class='strut'> </span></p> -<p id='t3518' class='pln'> <span class='com'># starts at 1 and increases. Can we treat all parts as one video?</span><span class='strut'> </span></p> -<p id='t3519' class='pln'><span class='strut'> </span></p> -<p id='t3520' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r"""(?x)^(?:http://)?(?:www\.)?(?:twitch|justin)\.tv/</span><span class='strut'> </span></p> -<p id='t3521' class='pln'><span class='str'> ([^/]+)(?:/b/([^/]+))?/?(?:\#.*)?$"""</span><span class='strut'> </span></p> -<p id='t3522' class='stm run hide_run'> <span class='nam'>_JUSTIN_PAGE_LIMIT</span> <span class='op'>=</span> <span class='num'>100</span><span class='strut'> </span></p> -<p id='t3523' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'justin.tv'</span><span class='strut'> </span></p> -<p id='t3524' class='pln'><span class='strut'> </span></p> -<p id='t3525' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3526' class='pln'> <span class='str'>"""Report information extraction."""</span><span class='strut'> </span></p> -<p id='t3527' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Extracting information'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3528' class='pln'><span class='strut'> </span></p> -<p id='t3529' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>channel</span><span class='op'>,</span> <span class='nam'>offset</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3530' class='pln'> <span class='str'>"""Report attempt to download a single page of videos."""</span><span class='strut'> </span></p> -<p id='t3531' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[%s] %s: Downloading video information from %d to %d'</span> <span class='op'>%</span><span class='strut'> </span></p> -<p id='t3532' class='pln'> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>channel</span><span class='op'>,</span> <span class='nam'>offset</span><span class='op'>,</span> <span class='nam'>offset</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_JUSTIN_PAGE_LIMIT</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3533' class='pln'><span class='strut'> </span></p> -<p id='t3534' class='pln'> <span class='com'># Return count of items, list of *valid* items</span><span class='strut'> </span></p> -<p id='t3535' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3536' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3537' class='stm run hide_run'> <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3538' class='stm run hide_run'> <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3539' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='str'>'ignore'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3540' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3541' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download video info JSON: %s'</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3542' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3543' class='pln'><span class='strut'> </span></p> -<p id='t3544' class='stm run hide_run'> <span class='nam'>response</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3545' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3546' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>clip</span> <span class='key'>in</span> <span class='nam'>response</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3547' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>'video_file_url'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3548' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>video_url</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3549' class='stm run hide_run'> <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3550' class='stm run hide_run'> <span class='nam'>video_date</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>'-'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>'created_on'</span><span class='op'>]</span><span class='op'>[</span><span class='op'>:</span><span class='num'>10</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3551' class='stm run hide_run'> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>{</span><span class='strut'> </span></p> -<p id='t3552' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>'id'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3553' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3554' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>'title'</span><span class='op'>]</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3555' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>clip</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'user_id'</span><span class='op'>,</span> <span class='nam'>clip</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'channel_id'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3556' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>video_date</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3557' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3558' class='pln'> <span class='op'>}</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3559' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>response</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3560' class='pln'><span class='strut'> </span></p> -<p id='t3561' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3562' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3563' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3564' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3565' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3566' class='pln'><span class='strut'> </span></p> -<p id='t3567' class='stm run hide_run'> <span class='nam'>api</span> <span class='op'>=</span> <span class='str'>'http://api.justin.tv'</span><span class='strut'> </span></p> -<p id='t3568' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>lastindex</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3569' class='stm run hide_run'> <span class='nam'>paged</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t3570' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>lastindex</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3571' class='stm mis'> <span class='nam'>paged</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t3572' class='stm mis'> <span class='nam'>api</span> <span class='op'>+=</span> <span class='str'>'/channel/archives/%s.json'</span><span class='strut'> </span></p> -<p id='t3573' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3574' class='stm run hide_run'> <span class='nam'>api</span> <span class='op'>+=</span> <span class='str'>'/clip/show/%s.json'</span><span class='strut'> </span></p> -<p id='t3575' class='stm run hide_run'> <span class='nam'>api</span> <span class='op'>=</span> <span class='nam'>api</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3576' class='pln'><span class='strut'> </span></p> -<p id='t3577' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3578' class='pln'><span class='strut'> </span></p> -<p id='t3579' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3580' class='stm run hide_run'> <span class='nam'>offset</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t3581' class='stm run hide_run'> <span class='nam'>limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_JUSTIN_PAGE_LIMIT</span><span class='strut'> </span></p> -<p id='t3582' class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3583' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>paged</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3584' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>offset</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3585' class='stm run hide_run'> <span class='nam'>page_url</span> <span class='op'>=</span> <span class='nam'>api</span> <span class='op'>+</span> <span class='op'>(</span><span class='str'>'?offset=%d&limit=%d'</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>offset</span><span class='op'>,</span> <span class='nam'>limit</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3586' class='stm run hide_run'> <span class='nam'>page_count</span><span class='op'>,</span> <span class='nam'>page_info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>page_url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3587' class='stm run hide_run'> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>page_info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3588' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>paged</span> <span class='key'>or</span> <span class='nam'>page_count</span> <span class='op'>!=</span> <span class='nam'>limit</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3589' class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p> -<p id='t3590' class='stm mis'> <span class='nam'>offset</span> <span class='op'>+=</span> <span class='nam'>limit</span><span class='strut'> </span></p> -<p id='t3591' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>info</span><span class='strut'> </span></p> -<p id='t3592' class='pln'><span class='strut'> </span></p> -<p id='t3593' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FunnyOrDieIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3594' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?funnyordie\.com/videos/(?P<id>[0-9a-f]+)/.*$'</span><span class='strut'> </span></p> -<p id='t3595' class='pln'><span class='strut'> </span></p> -<p id='t3596' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3597' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3598' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3599' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3600' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3601' class='pln'><span class='strut'> </span></p> -<p id='t3602' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'id'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3603' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3604' class='pln'><span class='strut'> </span></p> -<p id='t3605' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<video[^>]*>\s*<source[^>]*>\s*<source src="(?P<url>[^"]+)"'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3606' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3607' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: unable to find video information'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3608' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'url'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3609' class='pln'><span class='strut'> </span></p> -<p id='t3610' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r"class='player_page_h1'>\s+<a.*?>(?P<title>.*?)</a>"</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3611' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3612' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'Cannot find video title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3613' class='stm run hide_run'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'title'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3614' class='pln'><span class='strut'> </span></p> -<p id='t3615' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<meta property="og:description" content="(?P<desc>.*?)"'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3616' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3617' class='stm run hide_run'> <span class='nam'>desc</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'desc'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3618' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3619' class='stm mis'> <span class='nam'>desc</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t3620' class='pln'><span class='strut'> </span></p> -<p id='t3621' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3622' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3623' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3624' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'mp4'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3625' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3626' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>desc</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3627' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3628' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3629' class='pln'><span class='strut'> </span></p> -<p id='t3630' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>TweetReelIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3631' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'^(?:https?://)?(?:www\.)?tweetreel\.com/[?](?P<id>[0-9a-z]+)$'</span><span class='strut'> </span></p> -<p id='t3632' class='pln'><span class='strut'> </span></p> -<p id='t3633' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3634' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3635' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3636' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: invalid URL: %s'</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3637' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t3638' class='pln'><span class='strut'> </span></p> -<p id='t3639' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'id'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3640' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3641' class='pln'><span class='strut'> </span></p> -<p id='t3642' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<div id="left" status_id="([0-9]+)">'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3643' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3644' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot find status ID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3645' class='stm run hide_run'> <span class='nam'>status_id</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3646' class='pln'><span class='strut'> </span></p> -<p id='t3647' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<div class="tweet_text">(.*?)</div>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>flags</span><span class='op'>=</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3648' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3649' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'WARNING: Cannot find description'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3650' class='stm run hide_run'> <span class='nam'>desc</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>'<a.*?</a>'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3651' class='pln'><span class='strut'> </span></p> -<p id='t3652' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<div class="tweet_info">.*?from <a target="_blank" href="https?://twitter.com/(?P<uploader_id>.+?)">(?P<uploader>.+?)</a>'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>flags</span><span class='op'>=</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3653' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3654' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot find uploader'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3655' class='stm run hide_run'> <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'uploader'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3656' class='stm run hide_run'> <span class='nam'>uploader_id</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'uploader_id'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3657' class='pln'><span class='strut'> </span></p> -<p id='t3658' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<span unixtime="([0-9]+)"'</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3659' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3660' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot find upload date'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3661' class='stm run hide_run'> <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>fromtimestamp</span><span class='op'>(</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>'%Y%m%d'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3662' class='pln'><span class='strut'> </span></p> -<p id='t3663' class='stm run hide_run'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>desc</span><span class='strut'> </span></p> -<p id='t3664' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>'http://files.tweetreel.com/video/'</span> <span class='op'>+</span> <span class='nam'>status_id</span> <span class='op'>+</span> <span class='str'>'.mov'</span><span class='strut'> </span></p> -<p id='t3665' class='pln'><span class='strut'> </span></p> -<p id='t3666' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3667' class='pln'> <span class='str'>'id'</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3668' class='pln'> <span class='str'>'url'</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3669' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'mov'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3670' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3671' class='pln'> <span class='str'>'description'</span><span class='op'>:</span> <span class='nam'>desc</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3672' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3673' class='pln'> <span class='str'>'uploader_id'</span><span class='op'>:</span> <span class='nam'>uploader_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3674' class='pln'> <span class='str'>'internal_id'</span><span class='op'>:</span> <span class='nam'>status_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3675' class='pln'> <span class='str'>'upload_date'</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='strut'> </span></p> -<p id='t3676' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3677' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3678' class='pln'><span class='strut'> </span></p> -<p id='t3679' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>SteamIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3680' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r"""http://store.steampowered.com/ </span><span class='strut'> </span></p> -<p id='t3681' class='pln'><span class='str'> (?P<urltype>video|app)/ #If the page is only for videos or for a game</span><span class='strut'> </span></p> -<p id='t3682' class='pln'><span class='str'> (?P<gameID>\d+)/?</span><span class='strut'> </span></p> -<p id='t3683' class='pln'><span class='str'> (?P<videoID>\d*)(?P<extra>\??) #For urltype == video we sometimes get the videoID</span><span class='strut'> </span></p> -<p id='t3684' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t3685' class='pln'><span class='strut'> </span></p> -<p id='t3686' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3687' class='pln'> <span class='str'>"""Receives a URL and returns True if suitable for this IE."""</span><span class='strut'> </span></p> -<p id='t3688' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t3689' class='pln'><span class='strut'> </span></p> -<p id='t3690' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3691' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3692' class='stm run hide_run'> <span class='nam'>urlRE</span> <span class='op'>=</span> <span class='str'>r"'movie_(?P<videoID>\d+)': \{\s*FILENAME: \"(?P<videoURL>[\w:/\.\?=]+)\"(,\s*MOVIE_NAME: \"(?P<videoName>[\w:/\.\?=\+-]+)\")?\s*\},"</span><span class='strut'> </span></p> -<p id='t3693' class='stm run hide_run'> <span class='nam'>gameID</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'gameID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3694' class='stm run hide_run'> <span class='nam'>videourl</span> <span class='op'>=</span> <span class='str'>'http://store.steampowered.com/video/%s/'</span> <span class='op'>%</span> <span class='nam'>gameID</span><span class='strut'> </span></p> -<p id='t3695' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>videourl</span><span class='op'>,</span> <span class='nam'>gameID</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3696' class='stm run hide_run'> <span class='nam'>mweb</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>urlRE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3697' class='stm run hide_run'> <span class='nam'>namesRE</span> <span class='op'>=</span> <span class='str'>r'<span class=\"title\">(?P<videoName>[\w:/\.\?=\+\s-]+)</span>'</span><span class='strut'> </span></p> -<p id='t3698' class='stm run hide_run'> <span class='nam'>titles</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>namesRE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3699' class='stm run hide_run'> <span class='nam'>videos</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3700' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>vid</span><span class='op'>,</span><span class='nam'>vtitle</span> <span class='key'>in</span> <span class='nam'>zip</span><span class='op'>(</span><span class='nam'>mweb</span><span class='op'>,</span><span class='nam'>titles</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3701' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>vid</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'videoID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3702' class='stm run hide_run'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>vtitle</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'videoName'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3703' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>vid</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'videoURL'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3704' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>video_url</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3705' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u'ERROR: Cannot find video url for %s'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3706' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3707' class='pln'> <span class='str'>'id'</span><span class='op'>:</span><span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3708' class='pln'> <span class='str'>'url'</span><span class='op'>:</span><span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3709' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'flv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3710' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>title</span><span class='strut'> </span></p> -<p id='t3711' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3712' class='stm run hide_run'> <span class='nam'>videos</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3713' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>videos</span><span class='strut'> </span></p> -<p id='t3714' class='pln'><span class='strut'> </span></p> -<p id='t3715' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>UstreamIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3716' class='stm run hide_run'> <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r'http://www.ustream.tv/recorded/(?P<videoID>\d+)'</span><span class='strut'> </span></p> -<p id='t3717' class='stm run hide_run'> <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u'ustream'</span><span class='strut'> </span></p> -<p id='t3718' class='pln'><span class='strut'> </span></p> -<p id='t3719' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3720' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3721' class='stm run hide_run'> <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'videoID'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3722' class='stm run hide_run'> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>u'http://tcdn.ustream.tv/video/%s'</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='strut'> </span></p> -<p id='t3723' class='stm run hide_run'> <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3724' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'data-title="(?P<title>.+)"'</span><span class='op'>,</span><span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3725' class='stm run hide_run'> <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'title'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3726' class='stm run hide_run'> <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r'<a class="state" data-content-type="channel" data-content-id="(?P<uploader>\d+)"'</span><span class='op'>,</span><span class='nam'>webpage</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3727' class='stm run hide_run'> <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>'uploader'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3728' class='stm run hide_run'> <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t3729' class='pln'> <span class='str'>'id'</span><span class='op'>:</span><span class='nam'>video_id</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3730' class='pln'> <span class='str'>'url'</span><span class='op'>:</span><span class='nam'>video_url</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3731' class='pln'> <span class='str'>'ext'</span><span class='op'>:</span> <span class='str'>'flv'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3732' class='pln'> <span class='str'>'title'</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3733' class='pln'> <span class='str'>'uploader'</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='strut'> </span></p> -<p id='t3734' class='pln'> <span class='op'>}</span><span class='strut'> </span></p> -<p id='t3735' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t3736' class='pln'><span class='strut'> </span></p> -<p id='t3737' class='pln'><span class='strut'> </span></p> -<p id='t3738' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>gen_extractors</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t3739' class='pln'> <span class='str'>""" Return a list of an instance of every supported extractor.</span><span class='strut'> </span></p> -<p id='t3740' class='pln'><span class='str'> The order does matter; the first extractor matched is the one handling the URL.</span><span class='strut'> </span></p> -<p id='t3741' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t3742' class='stm mis'> <span class='key'>return</span> <span class='op'>[</span><span class='strut'> </span></p> -<p id='t3743' class='pln'> <span class='nam'>YoutubePlaylistIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3744' class='pln'> <span class='nam'>YoutubeChannelIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3745' class='pln'> <span class='nam'>YoutubeUserIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3746' class='pln'> <span class='nam'>YoutubeSearchIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3747' class='pln'> <span class='nam'>YoutubeIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3748' class='pln'> <span class='nam'>MetacafeIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3749' class='pln'> <span class='nam'>DailymotionIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3750' class='pln'> <span class='nam'>GoogleSearchIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3751' class='pln'> <span class='nam'>PhotobucketIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3752' class='pln'> <span class='nam'>YahooIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3753' class='pln'> <span class='nam'>YahooSearchIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3754' class='pln'> <span class='nam'>DepositFilesIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3755' class='pln'> <span class='nam'>FacebookIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3756' class='pln'> <span class='nam'>BlipTVUserIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3757' class='pln'> <span class='nam'>BlipTVIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3758' class='pln'> <span class='nam'>VimeoIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3759' class='pln'> <span class='nam'>MyVideoIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3760' class='pln'> <span class='nam'>ComedyCentralIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3761' class='pln'> <span class='nam'>EscapistIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3762' class='pln'> <span class='nam'>CollegeHumorIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3763' class='pln'> <span class='nam'>XVideosIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3764' class='pln'> <span class='nam'>SoundcloudIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3765' class='pln'> <span class='nam'>InfoQIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3766' class='pln'> <span class='nam'>MixcloudIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3767' class='pln'> <span class='nam'>StanfordOpenClassroomIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3768' class='pln'> <span class='nam'>MTVIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3769' class='pln'> <span class='nam'>YoukuIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3770' class='pln'> <span class='nam'>XNXXIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3771' class='pln'> <span class='nam'>GooglePlusIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3772' class='pln'> <span class='nam'>ArteTvIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3773' class='pln'> <span class='nam'>NBAIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3774' class='pln'> <span class='nam'>JustinTVIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3775' class='pln'> <span class='nam'>FunnyOrDieIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3776' class='pln'> <span class='nam'>TweetReelIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3777' class='pln'> <span class='nam'>SteamIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3778' class='pln'> <span class='nam'>UstreamIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t3779' class='pln'> <span class='nam'>GenericIE</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t3780' class='pln'> <span class='op'>]</span><span class='strut'> </span></p> -<p id='t3781' class='pln'><span class='strut'> </span></p> -<p id='t3782' class='pln'><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/youtube_dl_PostProcessor.html b/test_coverage/youtube_dl_PostProcessor.html deleted file mode 100644 index 421ce724e..000000000 --- a/test_coverage/youtube_dl_PostProcessor.html +++ /dev/null @@ -1,490 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl.PostProcessor: 14%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl.PostProcessor</b> : - <span class='pc_cov'>14%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 133 statements - <span class='run hide_run shortkey_r button_toggle_run'>19 run</span> - <span class='mis shortkey_m button_toggle_mis'>114 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='pln'><a href='#n1'>1</a></p> -<p id='n2' class='pln'><a href='#n2'>2</a></p> -<p id='n3' class='pln'><a href='#n3'>3</a></p> -<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p> -<p id='n5' class='pln'><a href='#n5'>5</a></p> -<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p> -<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p> -<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p> -<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p> -<p id='n10' class='pln'><a href='#n10'>10</a></p> -<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p> -<p id='n12' class='pln'><a href='#n12'>12</a></p> -<p id='n13' class='pln'><a href='#n13'>13</a></p> -<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p> -<p id='n15' class='pln'><a href='#n15'>15</a></p> -<p id='n16' class='pln'><a href='#n16'>16</a></p> -<p id='n17' class='pln'><a href='#n17'>17</a></p> -<p id='n18' class='pln'><a href='#n18'>18</a></p> -<p id='n19' class='pln'><a href='#n19'>19</a></p> -<p id='n20' class='pln'><a href='#n20'>20</a></p> -<p id='n21' class='pln'><a href='#n21'>21</a></p> -<p id='n22' class='pln'><a href='#n22'>22</a></p> -<p id='n23' class='pln'><a href='#n23'>23</a></p> -<p id='n24' class='pln'><a href='#n24'>24</a></p> -<p id='n25' class='pln'><a href='#n25'>25</a></p> -<p id='n26' class='pln'><a href='#n26'>26</a></p> -<p id='n27' class='pln'><a href='#n27'>27</a></p> -<p id='n28' class='pln'><a href='#n28'>28</a></p> -<p id='n29' class='pln'><a href='#n29'>29</a></p> -<p id='n30' class='pln'><a href='#n30'>30</a></p> -<p id='n31' class='stm run hide_run'><a href='#n31'>31</a></p> -<p id='n32' class='pln'><a href='#n32'>32</a></p> -<p id='n33' class='stm run hide_run'><a href='#n33'>33</a></p> -<p id='n34' class='stm mis'><a href='#n34'>34</a></p> -<p id='n35' class='pln'><a href='#n35'>35</a></p> -<p id='n36' class='stm run hide_run'><a href='#n36'>36</a></p> -<p id='n37' class='pln'><a href='#n37'>37</a></p> -<p id='n38' class='stm mis'><a href='#n38'>38</a></p> -<p id='n39' class='pln'><a href='#n39'>39</a></p> -<p id='n40' class='stm run hide_run'><a href='#n40'>40</a></p> -<p id='n41' class='pln'><a href='#n41'>41</a></p> -<p id='n42' class='pln'><a href='#n42'>42</a></p> -<p id='n43' class='pln'><a href='#n43'>43</a></p> -<p id='n44' class='pln'><a href='#n44'>44</a></p> -<p id='n45' class='pln'><a href='#n45'>45</a></p> -<p id='n46' class='pln'><a href='#n46'>46</a></p> -<p id='n47' class='pln'><a href='#n47'>47</a></p> -<p id='n48' class='pln'><a href='#n48'>48</a></p> -<p id='n49' class='pln'><a href='#n49'>49</a></p> -<p id='n50' class='pln'><a href='#n50'>50</a></p> -<p id='n51' class='pln'><a href='#n51'>51</a></p> -<p id='n52' class='pln'><a href='#n52'>52</a></p> -<p id='n53' class='pln'><a href='#n53'>53</a></p> -<p id='n54' class='pln'><a href='#n54'>54</a></p> -<p id='n55' class='pln'><a href='#n55'>55</a></p> -<p id='n56' class='pln'><a href='#n56'>56</a></p> -<p id='n57' class='pln'><a href='#n57'>57</a></p> -<p id='n58' class='stm mis'><a href='#n58'>58</a></p> -<p id='n59' class='pln'><a href='#n59'>59</a></p> -<p id='n60' class='stm run hide_run'><a href='#n60'>60</a></p> -<p id='n61' class='stm run hide_run'><a href='#n61'>61</a></p> -<p id='n62' class='stm mis'><a href='#n62'>62</a></p> -<p id='n63' class='pln'><a href='#n63'>63</a></p> -<p id='n64' class='stm run hide_run'><a href='#n64'>64</a></p> -<p id='n65' class='stm run hide_run'><a href='#n65'>65</a></p> -<p id='n66' class='stm mis'><a href='#n66'>66</a></p> -<p id='n67' class='stm mis'><a href='#n67'>67</a></p> -<p id='n68' class='stm mis'><a href='#n68'>68</a></p> -<p id='n69' class='stm mis'><a href='#n69'>69</a></p> -<p id='n70' class='stm mis'><a href='#n70'>70</a></p> -<p id='n71' class='stm mis'><a href='#n71'>71</a></p> -<p id='n72' class='stm mis'><a href='#n72'>72</a></p> -<p id='n73' class='stm mis'><a href='#n73'>73</a></p> -<p id='n74' class='pln'><a href='#n74'>74</a></p> -<p id='n75' class='stm run hide_run'><a href='#n75'>75</a></p> -<p id='n76' class='pln'><a href='#n76'>76</a></p> -<p id='n77' class='stm mis'><a href='#n77'>77</a></p> -<p id='n78' class='stm mis'><a href='#n78'>78</a></p> -<p id='n79' class='stm mis'><a href='#n79'>79</a></p> -<p id='n80' class='stm mis'><a href='#n80'>80</a></p> -<p id='n81' class='stm mis'><a href='#n81'>81</a></p> -<p id='n82' class='stm mis'><a href='#n82'>82</a></p> -<p id='n83' class='stm mis'><a href='#n83'>83</a></p> -<p id='n84' class='stm mis'><a href='#n84'>84</a></p> -<p id='n85' class='pln'><a href='#n85'>85</a></p> -<p id='n86' class='stm run hide_run'><a href='#n86'>86</a></p> -<p id='n87' class='stm mis'><a href='#n87'>87</a></p> -<p id='n88' class='stm mis'><a href='#n88'>88</a></p> -<p id='n89' class='stm mis'><a href='#n89'>89</a></p> -<p id='n90' class='stm mis'><a href='#n90'>90</a></p> -<p id='n91' class='stm mis'><a href='#n91'>91</a></p> -<p id='n92' class='stm mis'><a href='#n92'>92</a></p> -<p id='n93' class='stm mis'><a href='#n93'>93</a></p> -<p id='n94' class='stm mis'><a href='#n94'>94</a></p> -<p id='n95' class='stm mis'><a href='#n95'>95</a></p> -<p id='n96' class='stm mis'><a href='#n96'>96</a></p> -<p id='n97' class='stm mis'><a href='#n97'>97</a></p> -<p id='n98' class='stm mis'><a href='#n98'>98</a></p> -<p id='n99' class='stm mis'><a href='#n99'>99</a></p> -<p id='n100' class='stm mis'><a href='#n100'>100</a></p> -<p id='n101' class='stm mis'><a href='#n101'>101</a></p> -<p id='n102' class='stm mis'><a href='#n102'>102</a></p> -<p id='n103' class='pln'><a href='#n103'>103</a></p> -<p id='n104' class='stm run hide_run'><a href='#n104'>104</a></p> -<p id='n105' class='stm mis'><a href='#n105'>105</a></p> -<p id='n106' class='stm mis'><a href='#n106'>106</a></p> -<p id='n107' class='stm mis'><a href='#n107'>107</a></p> -<p id='n108' class='stm mis'><a href='#n108'>108</a></p> -<p id='n109' class='pln'><a href='#n109'>109</a></p> -<p id='n110' class='stm mis'><a href='#n110'>110</a></p> -<p id='n111' class='stm mis'><a href='#n111'>111</a></p> -<p id='n112' class='pln'><a href='#n112'>112</a></p> -<p id='n113' class='pln'><a href='#n113'>113</a></p> -<p id='n114' class='stm mis'><a href='#n114'>114</a></p> -<p id='n115' class='stm mis'><a href='#n115'>115</a></p> -<p id='n116' class='stm mis'><a href='#n116'>116</a></p> -<p id='n117' class='stm mis'><a href='#n117'>117</a></p> -<p id='n118' class='stm mis'><a href='#n118'>118</a></p> -<p id='n119' class='pln'><a href='#n119'>119</a></p> -<p id='n120' class='stm run hide_run'><a href='#n120'>120</a></p> -<p id='n121' class='stm mis'><a href='#n121'>121</a></p> -<p id='n122' class='pln'><a href='#n122'>122</a></p> -<p id='n123' class='stm mis'><a href='#n123'>123</a></p> -<p id='n124' class='stm mis'><a href='#n124'>124</a></p> -<p id='n125' class='stm mis'><a href='#n125'>125</a></p> -<p id='n126' class='stm mis'><a href='#n126'>126</a></p> -<p id='n127' class='pln'><a href='#n127'>127</a></p> -<p id='n128' class='stm mis'><a href='#n128'>128</a></p> -<p id='n129' class='stm mis'><a href='#n129'>129</a></p> -<p id='n130' class='stm mis'><a href='#n130'>130</a></p> -<p id='n131' class='pln'><a href='#n131'>131</a></p> -<p id='n132' class='stm mis'><a href='#n132'>132</a></p> -<p id='n133' class='stm mis'><a href='#n133'>133</a></p> -<p id='n134' class='stm mis'><a href='#n134'>134</a></p> -<p id='n135' class='stm mis'><a href='#n135'>135</a></p> -<p id='n136' class='pln'><a href='#n136'>136</a></p> -<p id='n137' class='stm mis'><a href='#n137'>137</a></p> -<p id='n138' class='stm mis'><a href='#n138'>138</a></p> -<p id='n139' class='stm mis'><a href='#n139'>139</a></p> -<p id='n140' class='stm mis'><a href='#n140'>140</a></p> -<p id='n141' class='stm mis'><a href='#n141'>141</a></p> -<p id='n142' class='stm mis'><a href='#n142'>142</a></p> -<p id='n143' class='pln'><a href='#n143'>143</a></p> -<p id='n144' class='pln'><a href='#n144'>144</a></p> -<p id='n145' class='stm mis'><a href='#n145'>145</a></p> -<p id='n146' class='stm mis'><a href='#n146'>146</a></p> -<p id='n147' class='stm mis'><a href='#n147'>147</a></p> -<p id='n148' class='stm mis'><a href='#n148'>148</a></p> -<p id='n149' class='stm mis'><a href='#n149'>149</a></p> -<p id='n150' class='stm mis'><a href='#n150'>150</a></p> -<p id='n151' class='pln'><a href='#n151'>151</a></p> -<p id='n152' class='stm mis'><a href='#n152'>152</a></p> -<p id='n153' class='pln'><a href='#n153'>153</a></p> -<p id='n154' class='pln'><a href='#n154'>154</a></p> -<p id='n155' class='stm mis'><a href='#n155'>155</a></p> -<p id='n156' class='stm mis'><a href='#n156'>156</a></p> -<p id='n157' class='stm mis'><a href='#n157'>157</a></p> -<p id='n158' class='stm mis'><a href='#n158'>158</a></p> -<p id='n159' class='stm mis'><a href='#n159'>159</a></p> -<p id='n160' class='stm mis'><a href='#n160'>160</a></p> -<p id='n161' class='pln'><a href='#n161'>161</a></p> -<p id='n162' class='stm mis'><a href='#n162'>162</a></p> -<p id='n163' class='stm mis'><a href='#n163'>163</a></p> -<p id='n164' class='stm mis'><a href='#n164'>164</a></p> -<p id='n165' class='stm mis'><a href='#n165'>165</a></p> -<p id='n166' class='stm mis'><a href='#n166'>166</a></p> -<p id='n167' class='stm mis'><a href='#n167'>167</a></p> -<p id='n168' class='stm mis'><a href='#n168'>168</a></p> -<p id='n169' class='stm mis'><a href='#n169'>169</a></p> -<p id='n170' class='stm mis'><a href='#n170'>170</a></p> -<p id='n171' class='stm mis'><a href='#n171'>171</a></p> -<p id='n172' class='pln'><a href='#n172'>172</a></p> -<p id='n173' class='stm mis'><a href='#n173'>173</a></p> -<p id='n174' class='stm mis'><a href='#n174'>174</a></p> -<p id='n175' class='stm mis'><a href='#n175'>175</a></p> -<p id='n176' class='stm mis'><a href='#n176'>176</a></p> -<p id='n177' class='stm mis'><a href='#n177'>177</a></p> -<p id='n178' class='pln'><a href='#n178'>178</a></p> -<p id='n179' class='stm mis'><a href='#n179'>179</a></p> -<p id='n180' class='stm mis'><a href='#n180'>180</a></p> -<p id='n181' class='stm mis'><a href='#n181'>181</a></p> -<p id='n182' class='stm mis'><a href='#n182'>182</a></p> -<p id='n183' class='stm mis'><a href='#n183'>183</a></p> -<p id='n184' class='stm mis'><a href='#n184'>184</a></p> -<p id='n185' class='pln'><a href='#n185'>185</a></p> -<p id='n186' class='stm mis'><a href='#n186'>186</a></p> -<p id='n187' class='stm mis'><a href='#n187'>187</a></p> -<p id='n188' class='pln'><a href='#n188'>188</a></p> -<p id='n189' class='pln'><a href='#n189'>189</a></p> -<p id='n190' class='stm mis'><a href='#n190'>190</a></p> -<p id='n191' class='stm mis'><a href='#n191'>191</a></p> -<p id='n192' class='stm mis'><a href='#n192'>192</a></p> -<p id='n193' class='stm mis'><a href='#n193'>193</a></p> -<p id='n194' class='stm mis'><a href='#n194'>194</a></p> -<p id='n195' class='pln'><a href='#n195'>195</a></p> -<p id='n196' class='stm mis'><a href='#n196'>196</a></p> -<p id='n197' class='stm mis'><a href='#n197'>197</a></p> -<p id='n198' class='stm mis'><a href='#n198'>198</a></p> -<p id='n199' class='stm mis'><a href='#n199'>199</a></p> -<p id='n200' class='stm mis'><a href='#n200'>200</a></p> -<p id='n201' class='stm mis'><a href='#n201'>201</a></p> -<p id='n202' class='pln'><a href='#n202'>202</a></p> -<p id='n203' class='stm mis'><a href='#n203'>203</a></p> -<p id='n204' class='stm mis'><a href='#n204'>204</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='pln'><span class='com'>#!/usr/bin/env python</span><span class='strut'> </span></p> -<p id='t2' class='pln'><span class='com'># -*- coding: utf-8 -*-</span><span class='strut'> </span></p> -<p id='t3' class='pln'><span class='strut'> </span></p> -<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>absolute_import</span><span class='strut'> </span></p> -<p id='t5' class='pln'><span class='strut'> </span></p> -<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='strut'> </span></p> -<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>subprocess</span><span class='strut'> </span></p> -<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>sys</span><span class='strut'> </span></p> -<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>time</span><span class='strut'> </span></p> -<p id='t10' class='pln'><span class='strut'> </span></p> -<p id='t11' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>utils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t12' class='pln'><span class='strut'> </span></p> -<p id='t13' class='pln'><span class='strut'> </span></p> -<p id='t14' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>PostProcessor</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t15' class='pln'> <span class='str'>"""Post Processor class.</span><span class='strut'> </span></p> -<p id='t16' class='pln'><span class='strut'> </span></p> -<p id='t17' class='pln'><span class='str'> PostProcessor objects can be added to downloaders with their</span><span class='strut'> </span></p> -<p id='t18' class='pln'><span class='str'> add_post_processor() method. When the downloader has finished a</span><span class='strut'> </span></p> -<p id='t19' class='pln'><span class='str'> successful download, it will take its internal chain of PostProcessors</span><span class='strut'> </span></p> -<p id='t20' class='pln'><span class='str'> and start calling the run() method on each one of them, first with</span><span class='strut'> </span></p> -<p id='t21' class='pln'><span class='str'> an initial argument and then with the returned value of the previous</span><span class='strut'> </span></p> -<p id='t22' class='pln'><span class='str'> PostProcessor.</span><span class='strut'> </span></p> -<p id='t23' class='pln'><span class='strut'> </span></p> -<p id='t24' class='pln'><span class='str'> The chain will be stopped if one of them ever returns None or the end</span><span class='strut'> </span></p> -<p id='t25' class='pln'><span class='str'> of the chain is reached.</span><span class='strut'> </span></p> -<p id='t26' class='pln'><span class='strut'> </span></p> -<p id='t27' class='pln'><span class='str'> PostProcessor objects follow a "mutual registration" process similar</span><span class='strut'> </span></p> -<p id='t28' class='pln'><span class='str'> to InfoExtractor objects.</span><span class='strut'> </span></p> -<p id='t29' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t30' class='pln'><span class='strut'> </span></p> -<p id='t31' class='stm run hide_run'> <span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t32' class='pln'><span class='strut'> </span></p> -<p id='t33' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t34' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>downloader</span><span class='strut'> </span></p> -<p id='t35' class='pln'><span class='strut'> </span></p> -<p id='t36' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t37' class='pln'> <span class='str'>"""Sets the downloader for this PP."""</span><span class='strut'> </span></p> -<p id='t38' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>downloader</span><span class='strut'> </span></p> -<p id='t39' class='pln'><span class='strut'> </span></p> -<p id='t40' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>run</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>information</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t41' class='pln'> <span class='str'>"""Run the PostProcessor.</span><span class='strut'> </span></p> -<p id='t42' class='pln'><span class='strut'> </span></p> -<p id='t43' class='pln'><span class='str'> The "information" argument is a dictionary like the ones</span><span class='strut'> </span></p> -<p id='t44' class='pln'><span class='str'> composed by InfoExtractors. The only difference is that this</span><span class='strut'> </span></p> -<p id='t45' class='pln'><span class='str'> one has an extra field called "filepath" that points to the</span><span class='strut'> </span></p> -<p id='t46' class='pln'><span class='str'> downloaded file.</span><span class='strut'> </span></p> -<p id='t47' class='pln'><span class='strut'> </span></p> -<p id='t48' class='pln'><span class='str'> When this method returns None, the postprocessing chain is</span><span class='strut'> </span></p> -<p id='t49' class='pln'><span class='str'> stopped. However, this method may return an information</span><span class='strut'> </span></p> -<p id='t50' class='pln'><span class='str'> dictionary that will be passed to the next postprocessing</span><span class='strut'> </span></p> -<p id='t51' class='pln'><span class='str'> object in the chain. It can be the one it received after</span><span class='strut'> </span></p> -<p id='t52' class='pln'><span class='str'> changing some fields.</span><span class='strut'> </span></p> -<p id='t53' class='pln'><span class='strut'> </span></p> -<p id='t54' class='pln'><span class='str'> In addition, this method may raise a PostProcessingError</span><span class='strut'> </span></p> -<p id='t55' class='pln'><span class='str'> exception that will be taken into account by the downloader</span><span class='strut'> </span></p> -<p id='t56' class='pln'><span class='str'> it was called from.</span><span class='strut'> </span></p> -<p id='t57' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t58' class='stm mis'> <span class='key'>return</span> <span class='nam'>information</span> <span class='com'># by default, do nothing</span><span class='strut'> </span></p> -<p id='t59' class='pln'><span class='strut'> </span></p> -<p id='t60' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>AudioConversionError</span><span class='op'>(</span><span class='nam'>BaseException</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t61' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t62' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>message</span> <span class='op'>=</span> <span class='nam'>message</span><span class='strut'> </span></p> -<p id='t63' class='pln'><span class='strut'> </span></p> -<p id='t64' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FFmpegExtractAudioPP</span><span class='op'>(</span><span class='nam'>PostProcessor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t65' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>preferredcodec</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>preferredquality</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>keepvideo</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>nopostoverwrites</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t66' class='stm mis'> <span class='nam'>PostProcessor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t67' class='stm mis'> <span class='key'>if</span> <span class='nam'>preferredcodec</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t68' class='stm mis'> <span class='nam'>preferredcodec</span> <span class='op'>=</span> <span class='str'>'best'</span><span class='strut'> </span></p> -<p id='t69' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>=</span> <span class='nam'>preferredcodec</span><span class='strut'> </span></p> -<p id='t70' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span> <span class='op'>=</span> <span class='nam'>preferredquality</span><span class='strut'> </span></p> -<p id='t71' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_keepvideo</span> <span class='op'>=</span> <span class='nam'>keepvideo</span><span class='strut'> </span></p> -<p id='t72' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_nopostoverwrites</span> <span class='op'>=</span> <span class='nam'>nopostoverwrites</span><span class='strut'> </span></p> -<p id='t73' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>detect_executables</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t74' class='pln'><span class='strut'> </span></p> -<p id='t75' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t76' class='pln'> <span class='key'>def</span> <span class='nam'>detect_executables</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t77' class='stm mis'> <span class='key'>def</span> <span class='nam'>executable</span><span class='op'>(</span><span class='nam'>exe</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t78' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t79' class='stm mis'> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>Popen</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>exe</span><span class='op'>,</span> <span class='str'>'-version'</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>communicate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t80' class='stm mis'> <span class='key'>except</span> <span class='nam'>OSError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t81' class='stm mis'> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t82' class='stm mis'> <span class='key'>return</span> <span class='nam'>exe</span><span class='strut'> </span></p> -<p id='t83' class='stm mis'> <span class='nam'>programs</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'avprobe'</span><span class='op'>,</span> <span class='str'>'avconv'</span><span class='op'>,</span> <span class='str'>'ffmpeg'</span><span class='op'>,</span> <span class='str'>'ffprobe'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t84' class='stm mis'> <span class='key'>return</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>program</span><span class='op'>,</span> <span class='nam'>executable</span><span class='op'>(</span><span class='nam'>program</span><span class='op'>)</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>program</span> <span class='key'>in</span> <span class='nam'>programs</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t85' class='pln'><span class='strut'> </span></p> -<p id='t86' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>get_audio_codec</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>path</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t87' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'ffprobe'</span><span class='op'>]</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avprobe'</span><span class='op'>]</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t88' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t89' class='stm mis'> <span class='nam'>cmd</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avprobe'</span><span class='op'>]</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'ffprobe'</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>'-show_streams'</span><span class='op'>,</span> <span class='str'>'--'</span><span class='op'>,</span> <span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t90' class='stm mis'> <span class='nam'>handle</span> <span class='op'>=</span> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>Popen</span><span class='op'>(</span><span class='nam'>cmd</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>compat_subprocess_get_DEVNULL</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t91' class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>handle</span><span class='op'>.</span><span class='nam'>communicate</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t92' class='stm mis'> <span class='key'>if</span> <span class='nam'>handle</span><span class='op'>.</span><span class='nam'>wait</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>!=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t93' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t94' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t95' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t96' class='stm mis'> <span class='nam'>audio_codec</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t97' class='stm mis'> <span class='key'>for</span> <span class='nam'>line</span> <span class='key'>in</span> <span class='nam'>output</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'ascii'</span><span class='op'>,</span> <span class='str'>'ignore'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t98' class='stm mis'> <span class='key'>if</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>'codec_name='</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t99' class='stm mis'> <span class='nam'>audio_codec</span> <span class='op'>=</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'='</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t100' class='stm mis'> <span class='key'>elif</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>'codec_type=audio'</span> <span class='key'>and</span> <span class='nam'>audio_codec</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t101' class='stm mis'> <span class='key'>return</span> <span class='nam'>audio_codec</span><span class='strut'> </span></p> -<p id='t102' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t103' class='pln'><span class='strut'> </span></p> -<p id='t104' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>run_ffmpeg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>path</span><span class='op'>,</span> <span class='nam'>out_path</span><span class='op'>,</span> <span class='nam'>codec</span><span class='op'>,</span> <span class='nam'>more_opts</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t105' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'ffmpeg'</span><span class='op'>]</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t106' class='stm mis'> <span class='key'>raise</span> <span class='nam'>AudioConversionError</span><span class='op'>(</span><span class='str'>'ffmpeg or avconv not found. Please install one.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t107' class='stm mis'> <span class='key'>if</span> <span class='nam'>codec</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t108' class='stm mis'> <span class='nam'>acodec_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t109' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t110' class='stm mis'> <span class='nam'>acodec_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'-acodec'</span><span class='op'>,</span> <span class='nam'>codec</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t111' class='stm mis'> <span class='nam'>cmd</span> <span class='op'>=</span> <span class='op'>(</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'ffmpeg'</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>'-y'</span><span class='op'>,</span> <span class='str'>'-i'</span><span class='op'>,</span> <span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'-vn'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t112' class='pln'> <span class='op'>+</span> <span class='nam'>acodec_opts</span> <span class='op'>+</span> <span class='nam'>more_opts</span> <span class='op'>+</span><span class='strut'> </span></p> -<p id='t113' class='pln'> <span class='op'>[</span><span class='str'>'--'</span><span class='op'>,</span> <span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>out_path</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t114' class='stm mis'> <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>Popen</span><span class='op'>(</span><span class='nam'>cmd</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>subprocess</span><span class='op'>.</span><span class='nam'>PIPE</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t115' class='stm mis'> <span class='nam'>stdout</span><span class='op'>,</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>communicate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t116' class='stm mis'> <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>returncode</span> <span class='op'>!=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t117' class='stm mis'> <span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t118' class='stm mis'> <span class='key'>raise</span> <span class='nam'>AudioConversionError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t119' class='pln'><span class='strut'> </span></p> -<p id='t120' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>run</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>information</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t121' class='stm mis'> <span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>information</span><span class='op'>[</span><span class='str'>'filepath'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t122' class='pln'><span class='strut'> </span></p> -<p id='t123' class='stm mis'> <span class='nam'>filecodec</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_audio_codec</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t124' class='stm mis'> <span class='key'>if</span> <span class='nam'>filecodec</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t125' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: unable to obtain file audio codec with ffprobe'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t126' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t127' class='pln'><span class='strut'> </span></p> -<p id='t128' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t129' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'best'</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='nam'>filecodec</span> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'m4a'</span> <span class='key'>and</span> <span class='nam'>filecodec</span> <span class='op'>==</span> <span class='str'>'aac'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t130' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'m4a'</span> <span class='key'>and</span> <span class='nam'>filecodec</span> <span class='op'>==</span> <span class='str'>'aac'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t131' class='pln'> <span class='com'># Lossless, but in another container</span><span class='strut'> </span></p> -<p id='t132' class='stm mis'> <span class='nam'>acodec</span> <span class='op'>=</span> <span class='str'>'copy'</span><span class='strut'> </span></p> -<p id='t133' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span><span class='strut'> </span></p> -<p id='t134' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'-bsf:a'</span> <span class='key'>or</span> <span class='str'>'-absf'</span><span class='op'>,</span> <span class='str'>'aac_adtstoasc'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t135' class='stm mis'> <span class='key'>elif</span> <span class='nam'>filecodec</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>'aac'</span><span class='op'>,</span> <span class='str'>'mp3'</span><span class='op'>,</span> <span class='str'>'vorbis'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t136' class='pln'> <span class='com'># Lossless if possible</span><span class='strut'> </span></p> -<p id='t137' class='stm mis'> <span class='nam'>acodec</span> <span class='op'>=</span> <span class='str'>'copy'</span><span class='strut'> </span></p> -<p id='t138' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='nam'>filecodec</span><span class='strut'> </span></p> -<p id='t139' class='stm mis'> <span class='key'>if</span> <span class='nam'>filecodec</span> <span class='op'>==</span> <span class='str'>'aac'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t140' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'-f'</span><span class='op'>,</span> <span class='str'>'adts'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t141' class='stm mis'> <span class='key'>if</span> <span class='nam'>filecodec</span> <span class='op'>==</span> <span class='str'>'vorbis'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t142' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='str'>'ogg'</span><span class='strut'> </span></p> -<p id='t143' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t144' class='pln'> <span class='com'># MP3 otherwise.</span><span class='strut'> </span></p> -<p id='t145' class='stm mis'> <span class='nam'>acodec</span> <span class='op'>=</span> <span class='str'>'libmp3lame'</span><span class='strut'> </span></p> -<p id='t146' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='str'>'mp3'</span><span class='strut'> </span></p> -<p id='t147' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t148' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t149' class='stm mis'> <span class='key'>if</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>10</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t150' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'-q:a'</span> <span class='key'>or</span> <span class='str'>'-aq'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t151' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t152' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'-b:a'</span> <span class='key'>or</span> <span class='str'>'-ab'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span> <span class='op'>+</span> <span class='str'>'k'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t153' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t154' class='pln'> <span class='com'># We convert the audio (lossy)</span><span class='strut'> </span></p> -<p id='t155' class='stm mis'> <span class='nam'>acodec</span> <span class='op'>=</span> <span class='op'>{</span><span class='str'>'mp3'</span><span class='op'>:</span> <span class='str'>'libmp3lame'</span><span class='op'>,</span> <span class='str'>'aac'</span><span class='op'>:</span> <span class='str'>'aac'</span><span class='op'>,</span> <span class='str'>'m4a'</span><span class='op'>:</span> <span class='str'>'aac'</span><span class='op'>,</span> <span class='str'>'vorbis'</span><span class='op'>:</span> <span class='str'>'libvorbis'</span><span class='op'>,</span> <span class='str'>'wav'</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>}</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t156' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span><span class='strut'> </span></p> -<p id='t157' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t158' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t159' class='stm mis'> <span class='key'>if</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>10</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t160' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'-q:a'</span> <span class='key'>or</span> <span class='str'>'-aq'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t161' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t162' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'-b:a'</span> <span class='key'>or</span> <span class='str'>'-ab'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredquality</span> <span class='op'>+</span> <span class='str'>'k'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t163' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'aac'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t164' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='str'>'-f'</span><span class='op'>,</span> <span class='str'>'adts'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t165' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'m4a'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t166' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'-bsf:a'</span> <span class='key'>or</span> <span class='str'>'-absf'</span><span class='op'>,</span> <span class='str'>'aac_adtstoasc'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t167' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'vorbis'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t168' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='str'>'ogg'</span><span class='strut'> </span></p> -<p id='t169' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_preferredcodec</span> <span class='op'>==</span> <span class='str'>'wav'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t170' class='stm mis'> <span class='nam'>extension</span> <span class='op'>=</span> <span class='str'>'wav'</span><span class='strut'> </span></p> -<p id='t171' class='stm mis'> <span class='nam'>more_opts</span> <span class='op'>+=</span> <span class='op'>[</span><span class='str'>'-f'</span><span class='op'>,</span> <span class='str'>'wav'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t172' class='pln'><span class='strut'> </span></p> -<p id='t173' class='stm mis'> <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>sep</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>rpartition</span><span class='op'>(</span><span class='str'>u'.'</span><span class='op'>)</span> <span class='com'># not os.path.splitext, since the latter does not work on unicode in all setups</span><span class='strut'> </span></p> -<p id='t174' class='stm mis'> <span class='nam'>new_path</span> <span class='op'>=</span> <span class='nam'>prefix</span> <span class='op'>+</span> <span class='nam'>sep</span> <span class='op'>+</span> <span class='nam'>extension</span><span class='strut'> </span></p> -<p id='t175' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t176' class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_nopostoverwrites</span> <span class='key'>and</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>exists</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>new_path</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t177' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'[youtube] Post-process file %s exists, skipping'</span> <span class='op'>%</span> <span class='nam'>new_path</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t178' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t179' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'['</span> <span class='op'>+</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'avconv'</span> <span class='key'>or</span> <span class='str'>'ffmpeg'</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>'] Destination: '</span> <span class='op'>+</span> <span class='nam'>new_path</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t180' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>run_ffmpeg</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>,</span> <span class='nam'>new_path</span><span class='op'>,</span> <span class='nam'>acodec</span><span class='op'>,</span> <span class='nam'>more_opts</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t181' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t182' class='stm mis'> <span class='nam'>etype</span><span class='op'>,</span><span class='nam'>e</span><span class='op'>,</span><span class='nam'>tb</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exc_info</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t183' class='stm mis'> <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>e</span><span class='op'>,</span> <span class='nam'>AudioConversionError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t184' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'ERROR: audio conversion failed: '</span> <span class='op'>+</span> <span class='nam'>e</span><span class='op'>.</span><span class='nam'>message</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t185' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t186' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'ERROR: error running '</span> <span class='op'>+</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_exes</span><span class='op'>[</span><span class='str'>'avconv'</span><span class='op'>]</span> <span class='key'>and</span> <span class='str'>'avconv'</span> <span class='key'>or</span> <span class='str'>'ffmpeg'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t187' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t188' class='pln'><span class='strut'> </span></p> -<p id='t189' class='pln'> <span class='com'># Try to update the date time for extracted audio file.</span><span class='strut'> </span></p> -<p id='t190' class='stm mis'> <span class='key'>if</span> <span class='nam'>information</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'filetime'</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t191' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t192' class='stm mis'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>utime</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>new_path</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>information</span><span class='op'>[</span><span class='str'>'filetime'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t193' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t194' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: Cannot update utime of audio file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t195' class='pln'><span class='strut'> </span></p> -<p id='t196' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_keepvideo</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t197' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t198' class='stm mis'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t199' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t200' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u'WARNING: Unable to remove downloaded video file'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t201' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t202' class='pln'><span class='strut'> </span></p> -<p id='t203' class='stm mis'> <span class='nam'>information</span><span class='op'>[</span><span class='str'>'filepath'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>new_path</span><span class='strut'> </span></p> -<p id='t204' class='stm mis'> <span class='key'>return</span> <span class='nam'>information</span><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/youtube_dl_update.html b/test_coverage/youtube_dl_update.html deleted file mode 100644 index e630d2c2a..000000000 --- a/test_coverage/youtube_dl_update.html +++ /dev/null @@ -1,402 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl.update: 6%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl.update</b> : - <span class='pc_cov'>6%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 130 statements - <span class='run hide_run shortkey_r button_toggle_run'>8 run</span> - <span class='mis shortkey_m button_toggle_mis'>122 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p> -<p id='n2' class='stm run hide_run'><a href='#n2'>2</a></p> -<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p> -<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p> -<p id='n5' class='pln'><a href='#n5'>5</a></p> -<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p> -<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p> -<p id='n8' class='pln'><a href='#n8'>8</a></p> -<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p> -<p id='n10' class='stm mis'><a href='#n10'>10</a></p> -<p id='n11' class='stm mis'><a href='#n11'>11</a></p> -<p id='n12' class='stm mis'><a href='#n12'>12</a></p> -<p id='n13' class='stm mis'><a href='#n13'>13</a></p> -<p id='n14' class='stm mis'><a href='#n14'>14</a></p> -<p id='n15' class='stm mis'><a href='#n15'>15</a></p> -<p id='n16' class='stm mis'><a href='#n16'>16</a></p> -<p id='n17' class='stm mis'><a href='#n17'>17</a></p> -<p id='n18' class='stm mis'><a href='#n18'>18</a></p> -<p id='n19' class='stm mis'><a href='#n19'>19</a></p> -<p id='n20' class='stm mis'><a href='#n20'>20</a></p> -<p id='n21' class='stm mis'><a href='#n21'>21</a></p> -<p id='n22' class='stm mis'><a href='#n22'>22</a></p> -<p id='n23' class='stm mis'><a href='#n23'>23</a></p> -<p id='n24' class='stm mis'><a href='#n24'>24</a></p> -<p id='n25' class='stm mis'><a href='#n25'>25</a></p> -<p id='n26' class='stm mis'><a href='#n26'>26</a></p> -<p id='n27' class='stm mis'><a href='#n27'>27</a></p> -<p id='n28' class='stm mis'><a href='#n28'>28</a></p> -<p id='n29' class='stm mis'><a href='#n29'>29</a></p> -<p id='n30' class='stm mis'><a href='#n30'>30</a></p> -<p id='n31' class='stm mis'><a href='#n31'>31</a></p> -<p id='n32' class='stm mis'><a href='#n32'>32</a></p> -<p id='n33' class='stm mis'><a href='#n33'>33</a></p> -<p id='n34' class='stm mis'><a href='#n34'>34</a></p> -<p id='n35' class='stm mis'><a href='#n35'>35</a></p> -<p id='n36' class='pln'><a href='#n36'>36</a></p> -<p id='n37' class='stm run hide_run'><a href='#n37'>37</a></p> -<p id='n38' class='pln'><a href='#n38'>38</a></p> -<p id='n39' class='pln'><a href='#n39'>39</a></p> -<p id='n40' class='stm mis'><a href='#n40'>40</a></p> -<p id='n41' class='stm mis'><a href='#n41'>41</a></p> -<p id='n42' class='stm mis'><a href='#n42'>42</a></p> -<p id='n43' class='stm mis'><a href='#n43'>43</a></p> -<p id='n44' class='pln'><a href='#n44'>44</a></p> -<p id='n45' class='pln'><a href='#n45'>45</a></p> -<p id='n46' class='stm mis'><a href='#n46'>46</a></p> -<p id='n47' class='stm mis'><a href='#n47'>47</a></p> -<p id='n48' class='stm mis'><a href='#n48'>48</a></p> -<p id='n49' class='pln'><a href='#n49'>49</a></p> -<p id='n50' class='pln'><a href='#n50'>50</a></p> -<p id='n51' class='stm mis'><a href='#n51'>51</a></p> -<p id='n52' class='stm mis'><a href='#n52'>52</a></p> -<p id='n53' class='stm mis'><a href='#n53'>53</a></p> -<p id='n54' class='stm mis'><a href='#n54'>54</a></p> -<p id='n55' class='stm mis'><a href='#n55'>55</a></p> -<p id='n56' class='stm mis'><a href='#n56'>56</a></p> -<p id='n57' class='stm mis'><a href='#n57'>57</a></p> -<p id='n58' class='stm mis'><a href='#n58'>58</a></p> -<p id='n59' class='stm mis'><a href='#n59'>59</a></p> -<p id='n60' class='pln'><a href='#n60'>60</a></p> -<p id='n61' class='pln'><a href='#n61'>61</a></p> -<p id='n62' class='stm mis'><a href='#n62'>62</a></p> -<p id='n63' class='stm mis'><a href='#n63'>63</a></p> -<p id='n64' class='stm mis'><a href='#n64'>64</a></p> -<p id='n65' class='stm mis'><a href='#n65'>65</a></p> -<p id='n66' class='stm mis'><a href='#n66'>66</a></p> -<p id='n67' class='stm mis'><a href='#n67'>67</a></p> -<p id='n68' class='stm mis'><a href='#n68'>68</a></p> -<p id='n69' class='stm mis'><a href='#n69'>69</a></p> -<p id='n70' class='stm mis'><a href='#n70'>70</a></p> -<p id='n71' class='stm mis'><a href='#n71'>71</a></p> -<p id='n72' class='stm mis'><a href='#n72'>72</a></p> -<p id='n73' class='stm mis'><a href='#n73'>73</a></p> -<p id='n74' class='stm mis'><a href='#n74'>74</a></p> -<p id='n75' class='stm mis'><a href='#n75'>75</a></p> -<p id='n76' class='stm mis'><a href='#n76'>76</a></p> -<p id='n77' class='pln'><a href='#n77'>77</a></p> -<p id='n78' class='stm mis'><a href='#n78'>78</a></p> -<p id='n79' class='stm mis'><a href='#n79'>79</a></p> -<p id='n80' class='stm mis'><a href='#n80'>80</a></p> -<p id='n81' class='stm mis'><a href='#n81'>81</a></p> -<p id='n82' class='stm mis'><a href='#n82'>82</a></p> -<p id='n83' class='stm mis'><a href='#n83'>83</a></p> -<p id='n84' class='pln'><a href='#n84'>84</a></p> -<p id='n85' class='stm mis'><a href='#n85'>85</a></p> -<p id='n86' class='stm mis'><a href='#n86'>86</a></p> -<p id='n87' class='stm mis'><a href='#n87'>87</a></p> -<p id='n88' class='pln'><a href='#n88'>88</a></p> -<p id='n89' class='pln'><a href='#n89'>89</a></p> -<p id='n90' class='stm mis'><a href='#n90'>90</a></p> -<p id='n91' class='stm mis'><a href='#n91'>91</a></p> -<p id='n92' class='stm mis'><a href='#n92'>92</a></p> -<p id='n93' class='stm mis'><a href='#n93'>93</a></p> -<p id='n94' class='stm mis'><a href='#n94'>94</a></p> -<p id='n95' class='stm mis'><a href='#n95'>95</a></p> -<p id='n96' class='pln'><a href='#n96'>96</a></p> -<p id='n97' class='stm mis'><a href='#n97'>97</a></p> -<p id='n98' class='stm mis'><a href='#n98'>98</a></p> -<p id='n99' class='stm mis'><a href='#n99'>99</a></p> -<p id='n100' class='stm mis'><a href='#n100'>100</a></p> -<p id='n101' class='stm mis'><a href='#n101'>101</a></p> -<p id='n102' class='stm mis'><a href='#n102'>102</a></p> -<p id='n103' class='stm mis'><a href='#n103'>103</a></p> -<p id='n104' class='stm mis'><a href='#n104'>104</a></p> -<p id='n105' class='pln'><a href='#n105'>105</a></p> -<p id='n106' class='stm mis'><a href='#n106'>106</a></p> -<p id='n107' class='stm mis'><a href='#n107'>107</a></p> -<p id='n108' class='stm mis'><a href='#n108'>108</a></p> -<p id='n109' class='stm mis'><a href='#n109'>109</a></p> -<p id='n110' class='pln'><a href='#n110'>110</a></p> -<p id='n111' class='stm mis'><a href='#n111'>111</a></p> -<p id='n112' class='stm mis'><a href='#n112'>112</a></p> -<p id='n113' class='stm mis'><a href='#n113'>113</a></p> -<p id='n114' class='stm mis'><a href='#n114'>114</a></p> -<p id='n115' class='stm mis'><a href='#n115'>115</a></p> -<p id='n116' class='stm mis'><a href='#n116'>116</a></p> -<p id='n117' class='stm mis'><a href='#n117'>117</a></p> -<p id='n118' class='pln'><a href='#n118'>118</a></p> -<p id='n119' class='stm mis'><a href='#n119'>119</a></p> -<p id='n120' class='stm mis'><a href='#n120'>120</a></p> -<p id='n121' class='stm mis'><a href='#n121'>121</a></p> -<p id='n122' class='stm mis'><a href='#n122'>122</a></p> -<p id='n123' class='pln'><a href='#n123'>123</a></p> -<p id='n124' class='pln'><a href='#n124'>124</a></p> -<p id='n125' class='pln'><a href='#n125'>125</a></p> -<p id='n126' class='pln'><a href='#n126'>126</a></p> -<p id='n127' class='pln'><a href='#n127'>127</a></p> -<p id='n128' class='stm mis'><a href='#n128'>128</a></p> -<p id='n129' class='pln'><a href='#n129'>129</a></p> -<p id='n130' class='stm mis'><a href='#n130'>130</a></p> -<p id='n131' class='stm mis'><a href='#n131'>131</a></p> -<p id='n132' class='stm mis'><a href='#n132'>132</a></p> -<p id='n133' class='stm mis'><a href='#n133'>133</a></p> -<p id='n134' class='stm mis'><a href='#n134'>134</a></p> -<p id='n135' class='pln'><a href='#n135'>135</a></p> -<p id='n136' class='pln'><a href='#n136'>136</a></p> -<p id='n137' class='stm mis'><a href='#n137'>137</a></p> -<p id='n138' class='stm mis'><a href='#n138'>138</a></p> -<p id='n139' class='stm mis'><a href='#n139'>139</a></p> -<p id='n140' class='stm mis'><a href='#n140'>140</a></p> -<p id='n141' class='stm mis'><a href='#n141'>141</a></p> -<p id='n142' class='stm mis'><a href='#n142'>142</a></p> -<p id='n143' class='stm mis'><a href='#n143'>143</a></p> -<p id='n144' class='stm mis'><a href='#n144'>144</a></p> -<p id='n145' class='stm mis'><a href='#n145'>145</a></p> -<p id='n146' class='pln'><a href='#n146'>146</a></p> -<p id='n147' class='stm mis'><a href='#n147'>147</a></p> -<p id='n148' class='stm mis'><a href='#n148'>148</a></p> -<p id='n149' class='stm mis'><a href='#n149'>149</a></p> -<p id='n150' class='stm mis'><a href='#n150'>150</a></p> -<p id='n151' class='pln'><a href='#n151'>151</a></p> -<p id='n152' class='stm mis'><a href='#n152'>152</a></p> -<p id='n153' class='stm mis'><a href='#n153'>153</a></p> -<p id='n154' class='stm mis'><a href='#n154'>154</a></p> -<p id='n155' class='stm mis'><a href='#n155'>155</a></p> -<p id='n156' class='stm mis'><a href='#n156'>156</a></p> -<p id='n157' class='stm mis'><a href='#n157'>157</a></p> -<p id='n158' class='stm mis'><a href='#n158'>158</a></p> -<p id='n159' class='pln'><a href='#n159'>159</a></p> -<p id='n160' class='stm mis'><a href='#n160'>160</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'> </span></p> -<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>traceback</span><span class='strut'> </span></p> -<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>hashlib</span><span class='strut'> </span></p> -<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>zipimport</span> <span class='key'>import</span> <span class='nam'>zipimporter</span><span class='strut'> </span></p> -<p id='t5' class='pln'><span class='strut'> </span></p> -<p id='t6' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>utils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p> -<p id='t7' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>version</span> <span class='key'>import</span> <span class='nam'>__version__</span><span class='strut'> </span></p> -<p id='t8' class='pln'><span class='strut'> </span></p> -<p id='t9' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>rsa_verify</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>,</span> <span class='nam'>signature</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t10' class='stm mis'> <span class='key'>from</span> <span class='nam'>struct</span> <span class='key'>import</span> <span class='nam'>pack</span><span class='strut'> </span></p> -<p id='t11' class='stm mis'> <span class='key'>from</span> <span class='nam'>hashlib</span> <span class='key'>import</span> <span class='nam'>sha256</span><span class='strut'> </span></p> -<p id='t12' class='stm mis'> <span class='key'>from</span> <span class='nam'>sys</span> <span class='key'>import</span> <span class='nam'>version_info</span><span class='strut'> </span></p> -<p id='t13' class='stm mis'> <span class='key'>def</span> <span class='nam'>b</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t14' class='stm mis'> <span class='key'>if</span> <span class='nam'>version_info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>==</span> <span class='num'>2</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>x</span><span class='strut'> </span></p> -<p id='t15' class='stm mis'> <span class='key'>else</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>x</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>'latin1'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t16' class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>type</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>b</span><span class='op'>(</span><span class='str'>''</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t17' class='stm mis'> <span class='nam'>block_size</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t18' class='stm mis'> <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>key</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t19' class='stm mis'> <span class='key'>while</span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t20' class='stm mis'> <span class='nam'>block_size</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t21' class='stm mis'> <span class='nam'>n</span> <span class='op'>>>=</span> <span class='num'>8</span><span class='strut'> </span></p> -<p id='t22' class='stm mis'> <span class='nam'>signature</span> <span class='op'>=</span> <span class='nam'>pow</span><span class='op'>(</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>signature</span><span class='op'>,</span> <span class='num'>16</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t23' class='stm mis'> <span class='nam'>raw_bytes</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t24' class='stm mis'> <span class='key'>while</span> <span class='nam'>signature</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t25' class='stm mis'> <span class='nam'>raw_bytes</span><span class='op'>.</span><span class='nam'>insert</span><span class='op'>(</span><span class='num'>0</span><span class='op'>,</span> <span class='nam'>pack</span><span class='op'>(</span><span class='str'>"B"</span><span class='op'>,</span> <span class='nam'>signature</span> <span class='op'>&</span> <span class='num'>0xFF</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t26' class='stm mis'> <span class='nam'>signature</span> <span class='op'>>>=</span> <span class='num'>8</span><span class='strut'> </span></p> -<p id='t27' class='stm mis'> <span class='nam'>signature</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>block_size</span> <span class='op'>-</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>raw_bytes</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>*</span> <span class='nam'>b</span><span class='op'>(</span><span class='str'>'\x00'</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>b</span><span class='op'>(</span><span class='str'>''</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>raw_bytes</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t28' class='stm mis'> <span class='key'>if</span> <span class='nam'>signature</span><span class='op'>[</span><span class='num'>0</span><span class='op'>:</span><span class='num'>2</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>b</span><span class='op'>(</span><span class='str'>'\x00\x01'</span><span class='op'>)</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t29' class='stm mis'> <span class='nam'>signature</span> <span class='op'>=</span> <span class='nam'>signature</span><span class='op'>[</span><span class='num'>2</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t30' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>b</span><span class='op'>(</span><span class='str'>'\x00'</span><span class='op'>)</span> <span class='key'>in</span> <span class='nam'>signature</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t31' class='stm mis'> <span class='nam'>signature</span> <span class='op'>=</span> <span class='nam'>signature</span><span class='op'>[</span><span class='nam'>signature</span><span class='op'>.</span><span class='nam'>index</span><span class='op'>(</span><span class='nam'>b</span><span class='op'>(</span><span class='str'>'\x00'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>+</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t32' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>signature</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='nam'>b</span><span class='op'>(</span><span class='str'>'\x30\x31\x30\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20'</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t33' class='stm mis'> <span class='nam'>signature</span> <span class='op'>=</span> <span class='nam'>signature</span><span class='op'>[</span><span class='num'>19</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t34' class='stm mis'> <span class='key'>if</span> <span class='nam'>signature</span> <span class='op'>!=</span> <span class='nam'>sha256</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>digest</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span> <span class='key'>return</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t35' class='stm mis'> <span class='key'>return</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t36' class='pln'><span class='strut'> </span></p> -<p id='t37' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>update_self</span><span class='op'>(</span><span class='nam'>to_screen</span><span class='op'>,</span> <span class='nam'>verbose</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t38' class='pln'> <span class='str'>"""Update the program file with the latest version from the repository"""</span><span class='strut'> </span></p> -<p id='t39' class='pln'><span class='strut'> </span></p> -<p id='t40' class='stm mis'> <span class='nam'>UPDATE_URL</span> <span class='op'>=</span> <span class='str'>"http://rg3.github.com/youtube-dl/update/"</span><span class='strut'> </span></p> -<p id='t41' class='stm mis'> <span class='nam'>VERSION_URL</span> <span class='op'>=</span> <span class='nam'>UPDATE_URL</span> <span class='op'>+</span> <span class='str'>'LATEST_VERSION'</span><span class='strut'> </span></p> -<p id='t42' class='stm mis'> <span class='nam'>JSON_URL</span> <span class='op'>=</span> <span class='nam'>UPDATE_URL</span> <span class='op'>+</span> <span class='str'>'versions.json'</span><span class='strut'> </span></p> -<p id='t43' class='stm mis'> <span class='nam'>UPDATES_RSA_KEY</span> <span class='op'>=</span> <span class='op'>(</span><span class='num'>0x9d60ee4d8f805312fdb15a62f87b95bd66177b91df176765d13514a0f1754bcd2057295c5b6f1d35daa6742c3ffc9a82d3e118861c207995a8031e151d863c9927e304576bc80692bc8e094896fcf11b66f3e29e04e3a71e9a11558558acea1840aec37fc396fb6b65dc81a1c4144e03bd1c011de62e3f1357b327d08426fe93</span><span class='op'>,</span> <span class='num'>65537</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t44' class='pln'><span class='strut'> </span></p> -<p id='t45' class='pln'><span class='strut'> </span></p> -<p id='t46' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>globals</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'__loader__'</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>zipimporter</span><span class='op'>)</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>,</span> <span class='str'>"frozen"</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t47' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'It looks like you installed youtube-dl with pip, setup.py or a tarball. Please use that to update.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t48' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t49' class='pln'><span class='strut'> </span></p> -<p id='t50' class='pln'> <span class='com'># Check if there is a new version</span><span class='strut'> </span></p> -<p id='t51' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t52' class='stm mis'> <span class='nam'>newversion</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>VERSION_URL</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t53' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t54' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t55' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: can\'t find the current version. Please try again later.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t56' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t57' class='stm mis'> <span class='key'>if</span> <span class='nam'>newversion</span> <span class='op'>==</span> <span class='nam'>__version__</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t58' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'youtube-dl is up-to-date ('</span> <span class='op'>+</span> <span class='nam'>__version__</span> <span class='op'>+</span> <span class='str'>')'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t59' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t60' class='pln'><span class='strut'> </span></p> -<p id='t61' class='pln'> <span class='com'># Download and check versions info</span><span class='strut'> </span></p> -<p id='t62' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t63' class='stm mis'> <span class='nam'>versions_info</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>JSON_URL</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t64' class='stm mis'> <span class='nam'>versions_info</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>versions_info</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t65' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t66' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t67' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: can\'t obtain versions info. Please try again later.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t68' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t69' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='str'>'signature'</span> <span class='key'>in</span> <span class='nam'>versions_info</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t70' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: the versions file is not signed or corrupted. Aborting.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t71' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t72' class='stm mis'> <span class='nam'>signature</span> <span class='op'>=</span> <span class='nam'>versions_info</span><span class='op'>[</span><span class='str'>'signature'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t73' class='stm mis'> <span class='key'>del</span> <span class='nam'>versions_info</span><span class='op'>[</span><span class='str'>'signature'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t74' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>rsa_verify</span><span class='op'>(</span><span class='nam'>json</span><span class='op'>.</span><span class='nam'>dumps</span><span class='op'>(</span><span class='nam'>versions_info</span><span class='op'>,</span> <span class='nam'>sort_keys</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>'utf-8'</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>signature</span><span class='op'>,</span> <span class='nam'>UPDATES_RSA_KEY</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t75' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: the versions file signature is invalid. Aborting.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t76' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t77' class='pln'><span class='strut'> </span></p> -<p id='t78' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'Updating to version '</span> <span class='op'>+</span> <span class='nam'>versions_info</span><span class='op'>[</span><span class='str'>'latest'</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>'...'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t79' class='stm mis'> <span class='nam'>version</span> <span class='op'>=</span> <span class='nam'>versions_info</span><span class='op'>[</span><span class='str'>'versions'</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>versions_info</span><span class='op'>[</span><span class='str'>'latest'</span><span class='op'>]</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t80' class='stm mis'> <span class='key'>if</span> <span class='nam'>version</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'notes'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t81' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'PLEASE NOTE:'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t82' class='stm mis'> <span class='key'>for</span> <span class='nam'>note</span> <span class='key'>in</span> <span class='nam'>version</span><span class='op'>[</span><span class='str'>'notes'</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t83' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>note</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t84' class='pln'><span class='strut'> </span></p> -<p id='t85' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t86' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: no write permissions on %s'</span> <span class='op'>%</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t87' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t88' class='pln'><span class='strut'> </span></p> -<p id='t89' class='pln'> <span class='com'># Py2EXE</span><span class='strut'> </span></p> -<p id='t90' class='stm mis'> <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>,</span> <span class='str'>"frozen"</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t91' class='stm mis'> <span class='nam'>exe</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t92' class='stm mis'> <span class='nam'>directory</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>exe</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t93' class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>directory</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t94' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: no write permissions on %s'</span> <span class='op'>%</span> <span class='nam'>directory</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t95' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t96' class='pln'><span class='strut'> </span></p> -<p id='t97' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t98' class='stm mis'> <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>version</span><span class='op'>[</span><span class='str'>'exe'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t99' class='stm mis'> <span class='nam'>newcontent</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t100' class='stm mis'> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t101' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t102' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t103' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download latest version'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t104' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t105' class='pln'><span class='strut'> </span></p> -<p id='t106' class='stm mis'> <span class='nam'>newcontent_hash</span> <span class='op'>=</span> <span class='nam'>hashlib</span><span class='op'>.</span><span class='nam'>sha256</span><span class='op'>(</span><span class='nam'>newcontent</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t107' class='stm mis'> <span class='key'>if</span> <span class='nam'>newcontent_hash</span> <span class='op'>!=</span> <span class='nam'>version</span><span class='op'>[</span><span class='str'>'exe'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t108' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: the downloaded file hash does not match. Aborting.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t109' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t110' class='pln'><span class='strut'> </span></p> -<p id='t111' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t112' class='stm mis'> <span class='key'>with</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>exe</span> <span class='op'>+</span> <span class='str'>'.new'</span><span class='op'>,</span> <span class='str'>'wb'</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>outf</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t113' class='stm mis'> <span class='nam'>outf</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>newcontent</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t114' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t115' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t116' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: unable to write the new version'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t117' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t118' class='pln'><span class='strut'> </span></p> -<p id='t119' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t120' class='stm mis'> <span class='nam'>bat</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>directory</span><span class='op'>,</span> <span class='str'>'youtube-dl-updater.bat'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t121' class='stm mis'> <span class='nam'>b</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>bat</span><span class='op'>,</span> <span class='str'>'w'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t122' class='stm mis'> <span class='nam'>b</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='str'>"""</span><span class='strut'> </span></p> -<p id='t123' class='pln'><span class='str'>echo Updating youtube-dl...</span><span class='strut'> </span></p> -<p id='t124' class='pln'><span class='str'>ping 127.0.0.1 -n 5 -w 1000 > NUL</span><span class='strut'> </span></p> -<p id='t125' class='pln'><span class='str'>move /Y "%s.new" "%s"</span><span class='strut'> </span></p> -<p id='t126' class='pln'><span class='str'>del "%s"</span><span class='strut'> </span></p> -<p id='t127' class='pln'><span class='str'> \n"""</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>exe</span><span class='op'>,</span> <span class='nam'>exe</span><span class='op'>,</span> <span class='nam'>bat</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t128' class='stm mis'> <span class='nam'>b</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t129' class='pln'><span class='strut'> </span></p> -<p id='t130' class='stm mis'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>startfile</span><span class='op'>(</span><span class='nam'>bat</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t131' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t132' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t133' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: unable to overwrite current version'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t134' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t135' class='pln'><span class='strut'> </span></p> -<p id='t136' class='pln'> <span class='com'># Zip unix package</span><span class='strut'> </span></p> -<p id='t137' class='stm mis'> <span class='key'>elif</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>globals</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'__loader__'</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>zipimporter</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t138' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t139' class='stm mis'> <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>version</span><span class='op'>[</span><span class='str'>'bin'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t140' class='stm mis'> <span class='nam'>newcontent</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t141' class='stm mis'> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t142' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t143' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t144' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: unable to download latest version'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t145' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t146' class='pln'><span class='strut'> </span></p> -<p id='t147' class='stm mis'> <span class='nam'>newcontent_hash</span> <span class='op'>=</span> <span class='nam'>hashlib</span><span class='op'>.</span><span class='nam'>sha256</span><span class='op'>(</span><span class='nam'>newcontent</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t148' class='stm mis'> <span class='key'>if</span> <span class='nam'>newcontent_hash</span> <span class='op'>!=</span> <span class='nam'>version</span><span class='op'>[</span><span class='str'>'bin'</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t149' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: the downloaded file hash does not match. Aborting.'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t150' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t151' class='pln'><span class='strut'> </span></p> -<p id='t152' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t153' class='stm mis'> <span class='key'>with</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='str'>'wb'</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>outf</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t154' class='stm mis'> <span class='nam'>outf</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>newcontent</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t155' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t156' class='stm mis'> <span class='key'>if</span> <span class='nam'>verbose</span><span class='op'>:</span> <span class='nam'>to_screen</span><span class='op'>(</span><span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>format_exc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t157' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'ERROR: unable to overwrite current version'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t158' class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p> -<p id='t159' class='pln'><span class='strut'> </span></p> -<p id='t160' class='stm mis'> <span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u'Updated youtube-dl. Restart youtube-dl to use the new version.'</span><span class='op'>)</span><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/youtube_dl_utils.html b/test_coverage/youtube_dl_utils.html deleted file mode 100644 index 90bd46ddc..000000000 --- a/test_coverage/youtube_dl_utils.html +++ /dev/null @@ -1,1160 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl.utils: 83%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl.utils</b> : - <span class='pc_cov'>83%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 340 statements - <span class='run hide_run shortkey_r button_toggle_run'>282 run</span> - <span class='mis shortkey_m button_toggle_mis'>58 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='pln'><a href='#n1'>1</a></p> -<p id='n2' class='pln'><a href='#n2'>2</a></p> -<p id='n3' class='pln'><a href='#n3'>3</a></p> -<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p> -<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p> -<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p> -<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p> -<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p> -<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p> -<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p> -<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p> -<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p> -<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p> -<p id='n14' class='pln'><a href='#n14'>14</a></p> -<p id='n15' class='stm run hide_run'><a href='#n15'>15</a></p> -<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p> -<p id='n17' class='stm run hide_run'><a href='#n17'>17</a></p> -<p id='n18' class='stm run hide_run'><a href='#n18'>18</a></p> -<p id='n19' class='pln'><a href='#n19'>19</a></p> -<p id='n20' class='stm run hide_run'><a href='#n20'>20</a></p> -<p id='n21' class='stm run hide_run'><a href='#n21'>21</a></p> -<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p> -<p id='n23' class='stm run hide_run'><a href='#n23'>23</a></p> -<p id='n24' class='pln'><a href='#n24'>24</a></p> -<p id='n25' class='stm run hide_run'><a href='#n25'>25</a></p> -<p id='n26' class='stm run hide_run'><a href='#n26'>26</a></p> -<p id='n27' class='stm run hide_run'><a href='#n27'>27</a></p> -<p id='n28' class='stm run hide_run'><a href='#n28'>28</a></p> -<p id='n29' class='pln'><a href='#n29'>29</a></p> -<p id='n30' class='stm run hide_run'><a href='#n30'>30</a></p> -<p id='n31' class='stm run hide_run'><a href='#n31'>31</a></p> -<p id='n32' class='stm run hide_run'><a href='#n32'>32</a></p> -<p id='n33' class='stm run hide_run'><a href='#n33'>33</a></p> -<p id='n34' class='pln'><a href='#n34'>34</a></p> -<p id='n35' class='stm run hide_run'><a href='#n35'>35</a></p> -<p id='n36' class='stm run hide_run'><a href='#n36'>36</a></p> -<p id='n37' class='stm run hide_run'><a href='#n37'>37</a></p> -<p id='n38' class='stm run hide_run'><a href='#n38'>38</a></p> -<p id='n39' class='pln'><a href='#n39'>39</a></p> -<p id='n40' class='stm run hide_run'><a href='#n40'>40</a></p> -<p id='n41' class='stm run hide_run'><a href='#n41'>41</a></p> -<p id='n42' class='stm run hide_run'><a href='#n42'>42</a></p> -<p id='n43' class='stm run hide_run'><a href='#n43'>43</a></p> -<p id='n44' class='pln'><a href='#n44'>44</a></p> -<p id='n45' class='stm run hide_run'><a href='#n45'>45</a></p> -<p id='n46' class='stm run hide_run'><a href='#n46'>46</a></p> -<p id='n47' class='stm run hide_run'><a href='#n47'>47</a></p> -<p id='n48' class='stm run hide_run'><a href='#n48'>48</a></p> -<p id='n49' class='pln'><a href='#n49'>49</a></p> -<p id='n50' class='stm run hide_run'><a href='#n50'>50</a></p> -<p id='n51' class='stm run hide_run'><a href='#n51'>51</a></p> -<p id='n52' class='stm run hide_run'><a href='#n52'>52</a></p> -<p id='n53' class='stm run hide_run'><a href='#n53'>53</a></p> -<p id='n54' class='pln'><a href='#n54'>54</a></p> -<p id='n55' class='stm run hide_run'><a href='#n55'>55</a></p> -<p id='n56' class='stm run hide_run'><a href='#n56'>56</a></p> -<p id='n57' class='stm mis'><a href='#n57'>57</a></p> -<p id='n58' class='stm run hide_run'><a href='#n58'>58</a></p> -<p id='n59' class='stm run hide_run'><a href='#n59'>59</a></p> -<p id='n60' class='pln'><a href='#n60'>60</a></p> -<p id='n61' class='stm run hide_run'><a href='#n61'>61</a></p> -<p id='n62' class='stm run hide_run'><a href='#n62'>62</a></p> -<p id='n63' class='stm run hide_run'><a href='#n63'>63</a></p> -<p id='n64' class='pln'><a href='#n64'>64</a></p> -<p id='n65' class='pln'><a href='#n65'>65</a></p> -<p id='n66' class='stm run hide_run'><a href='#n66'>66</a></p> -<p id='n67' class='stm run hide_run'><a href='#n67'>67</a></p> -<p id='n68' class='stm mis'><a href='#n68'>68</a></p> -<p id='n69' class='stm run hide_run'><a href='#n69'>69</a></p> -<p id='n70' class='stm run hide_run'><a href='#n70'>70</a></p> -<p id='n71' class='stm run hide_run'><a href='#n71'>71</a></p> -<p id='n72' class='stm run hide_run'><a href='#n72'>72</a></p> -<p id='n73' class='stm mis'><a href='#n73'>73</a></p> -<p id='n74' class='stm run hide_run'><a href='#n74'>74</a></p> -<p id='n75' class='stm mis'><a href='#n75'>75</a></p> -<p id='n76' class='pln'><a href='#n76'>76</a></p> -<p id='n77' class='stm run hide_run'><a href='#n77'>77</a></p> -<p id='n78' class='stm run hide_run'><a href='#n78'>78</a></p> -<p id='n79' class='stm run hide_run'><a href='#n79'>79</a></p> -<p id='n80' class='stm run hide_run'><a href='#n80'>80</a></p> -<p id='n81' class='stm run hide_run'><a href='#n81'>81</a></p> -<p id='n82' class='stm mis'><a href='#n82'>82</a></p> -<p id='n83' class='stm run hide_run'><a href='#n83'>83</a></p> -<p id='n84' class='stm run hide_run'><a href='#n84'>84</a></p> -<p id='n85' class='stm run hide_run'><a href='#n85'>85</a></p> -<p id='n86' class='pln'><a href='#n86'>86</a></p> -<p id='n87' class='pln'><a href='#n87'>87</a></p> -<p id='n88' class='pln'><a href='#n88'>88</a></p> -<p id='n89' class='stm run hide_run'><a href='#n89'>89</a></p> -<p id='n90' class='stm mis'><a href='#n90'>90</a></p> -<p id='n91' class='stm mis'><a href='#n91'>91</a></p> -<p id='n92' class='pln'><a href='#n92'>92</a></p> -<p id='n93' class='pln'><a href='#n93'>93</a></p> -<p id='n94' class='stm run hide_run'><a href='#n94'>94</a></p> -<p id='n95' class='stm run hide_run'><a href='#n95'>95</a></p> -<p id='n96' class='stm run hide_run'><a href='#n96'>96</a></p> -<p id='n97' class='pln'><a href='#n97'>97</a></p> -<p id='n98' class='stm run hide_run'><a href='#n98'>98</a></p> -<p id='n99' class='stm run hide_run'><a href='#n99'>99</a></p> -<p id='n100' class='pln'><a href='#n100'>100</a></p> -<p id='n101' class='stm run hide_run'><a href='#n101'>101</a></p> -<p id='n102' class='pln'><a href='#n102'>102</a></p> -<p id='n103' class='stm run hide_run'><a href='#n103'>103</a></p> -<p id='n104' class='stm run hide_run'><a href='#n104'>104</a></p> -<p id='n105' class='stm run hide_run'><a href='#n105'>105</a></p> -<p id='n106' class='stm run hide_run'><a href='#n106'>106</a></p> -<p id='n107' class='stm run hide_run'><a href='#n107'>107</a></p> -<p id='n108' class='stm mis'><a href='#n108'>108</a></p> -<p id='n109' class='stm run hide_run'><a href='#n109'>109</a></p> -<p id='n110' class='stm run hide_run'><a href='#n110'>110</a></p> -<p id='n111' class='stm mis'><a href='#n111'>111</a></p> -<p id='n112' class='stm mis'><a href='#n112'>112</a></p> -<p id='n113' class='pln'><a href='#n113'>113</a></p> -<p id='n114' class='stm mis'><a href='#n114'>114</a></p> -<p id='n115' class='stm mis'><a href='#n115'>115</a></p> -<p id='n116' class='pln'><a href='#n116'>116</a></p> -<p id='n117' class='stm mis'><a href='#n117'>117</a></p> -<p id='n118' class='stm run hide_run'><a href='#n118'>118</a></p> -<p id='n119' class='stm run hide_run'><a href='#n119'>119</a></p> -<p id='n120' class='stm run hide_run'><a href='#n120'>120</a></p> -<p id='n121' class='stm run hide_run'><a href='#n121'>121</a></p> -<p id='n122' class='stm run hide_run'><a href='#n122'>122</a></p> -<p id='n123' class='stm run hide_run'><a href='#n123'>123</a></p> -<p id='n124' class='stm run hide_run'><a href='#n124'>124</a></p> -<p id='n125' class='stm run hide_run'><a href='#n125'>125</a></p> -<p id='n126' class='stm run hide_run'><a href='#n126'>126</a></p> -<p id='n127' class='pln'><a href='#n127'>127</a></p> -<p id='n128' class='stm run hide_run'><a href='#n128'>128</a></p> -<p id='n129' class='pln'><a href='#n129'>129</a></p> -<p id='n130' class='stm run hide_run'><a href='#n130'>130</a></p> -<p id='n131' class='stm run hide_run'><a href='#n131'>131</a></p> -<p id='n132' class='pln'><a href='#n132'>132</a></p> -<p id='n133' class='stm run hide_run'><a href='#n133'>133</a></p> -<p id='n134' class='stm run hide_run'><a href='#n134'>134</a></p> -<p id='n135' class='stm mis'><a href='#n135'>135</a></p> -<p id='n136' class='pln'><a href='#n136'>136</a></p> -<p id='n137' class='stm run hide_run'><a href='#n137'>137</a></p> -<p id='n138' class='stm run hide_run'><a href='#n138'>138</a></p> -<p id='n139' class='pln'><a href='#n139'>139</a></p> -<p id='n140' class='stm run hide_run'><a href='#n140'>140</a></p> -<p id='n141' class='stm run hide_run'><a href='#n141'>141</a></p> -<p id='n142' class='stm mis'><a href='#n142'>142</a></p> -<p id='n143' class='stm mis'><a href='#n143'>143</a></p> -<p id='n144' class='pln'><a href='#n144'>144</a></p> -<p id='n145' class='stm run hide_run'><a href='#n145'>145</a></p> -<p id='n146' class='stm run hide_run'><a href='#n146'>146</a></p> -<p id='n147' class='stm mis'><a href='#n147'>147</a></p> -<p id='n148' class='stm mis'><a href='#n148'>148</a></p> -<p id='n149' class='pln'><a href='#n149'>149</a></p> -<p id='n150' class='stm run hide_run'><a href='#n150'>150</a></p> -<p id='n151' class='pln'><a href='#n151'>151</a></p> -<p id='n152' class='pln'><a href='#n152'>152</a></p> -<p id='n153' class='pln'><a href='#n153'>153</a></p> -<p id='n154' class='pln'><a href='#n154'>154</a></p> -<p id='n155' class='pln'><a href='#n155'>155</a></p> -<p id='n156' class='pln'><a href='#n156'>156</a></p> -<p id='n157' class='pln'><a href='#n157'>157</a></p> -<p id='n158' class='stm run hide_run'><a href='#n158'>158</a></p> -<p id='n159' class='pln'><a href='#n159'>159</a></p> -<p id='n160' class='pln'><a href='#n160'>160</a></p> -<p id='n161' class='pln'><a href='#n161'>161</a></p> -<p id='n162' class='pln'><a href='#n162'>162</a></p> -<p id='n163' class='pln'><a href='#n163'>163</a></p> -<p id='n164' class='stm run hide_run'><a href='#n164'>164</a></p> -<p id='n165' class='stm run hide_run'><a href='#n165'>165</a></p> -<p id='n166' class='stm run hide_run'><a href='#n166'>166</a></p> -<p id='n167' class='stm mis'><a href='#n167'>167</a></p> -<p id='n168' class='stm mis'><a href='#n168'>168</a></p> -<p id='n169' class='pln'><a href='#n169'>169</a></p> -<p id='n170' class='stm run hide_run'><a href='#n170'>170</a></p> -<p id='n171' class='pln'><a href='#n171'>171</a></p> -<p id='n172' class='stm run hide_run'><a href='#n172'>172</a></p> -<p id='n173' class='stm run hide_run'><a href='#n173'>173</a></p> -<p id='n174' class='stm mis'><a href='#n174'>174</a></p> -<p id='n175' class='pln'><a href='#n175'>175</a></p> -<p id='n176' class='stm mis'><a href='#n176'>176</a></p> -<p id='n177' class='stm mis'><a href='#n177'>177</a></p> -<p id='n178' class='stm mis'><a href='#n178'>178</a></p> -<p id='n179' class='pln'><a href='#n179'>179</a></p> -<p id='n180' class='pln'><a href='#n180'>180</a></p> -<p id='n181' class='pln'><a href='#n181'>181</a></p> -<p id='n182' class='stm run hide_run'><a href='#n182'>182</a></p> -<p id='n183' class='stm run hide_run'><a href='#n183'>183</a></p> -<p id='n184' class='stm run hide_run'><a href='#n184'>184</a></p> -<p id='n185' class='stm run hide_run'><a href='#n185'>185</a></p> -<p id='n186' class='pln'><a href='#n186'>186</a></p> -<p id='n187' class='stm mis'><a href='#n187'>187</a></p> -<p id='n188' class='stm mis'><a href='#n188'>188</a></p> -<p id='n189' class='stm mis'><a href='#n189'>189</a></p> -<p id='n190' class='pln'><a href='#n190'>190</a></p> -<p id='n191' class='stm run hide_run'><a href='#n191'>191</a></p> -<p id='n192' class='pln'><a href='#n192'>192</a></p> -<p id='n193' class='pln'><a href='#n193'>193</a></p> -<p id='n194' class='pln'><a href='#n194'>194</a></p> -<p id='n195' class='pln'><a href='#n195'>195</a></p> -<p id='n196' class='pln'><a href='#n196'>196</a></p> -<p id='n197' class='stm run hide_run'><a href='#n197'>197</a></p> -<p id='n198' class='pln'><a href='#n198'>198</a></p> -<p id='n199' class='pln'><a href='#n199'>199</a></p> -<p id='n200' class='stm run hide_run'><a href='#n200'>200</a></p> -<p id='n201' class='stm run hide_run'><a href='#n201'>201</a></p> -<p id='n202' class='pln'><a href='#n202'>202</a></p> -<p id='n203' class='stm run hide_run'><a href='#n203'>203</a></p> -<p id='n204' class='stm run hide_run'><a href='#n204'>204</a></p> -<p id='n205' class='stm run hide_run'><a href='#n205'>205</a></p> -<p id='n206' class='stm run hide_run'><a href='#n206'>206</a></p> -<p id='n207' class='stm mis'><a href='#n207'>207</a></p> -<p id='n208' class='stm mis'><a href='#n208'>208</a></p> -<p id='n209' class='pln'><a href='#n209'>209</a></p> -<p id='n210' class='stm run hide_run'><a href='#n210'>210</a></p> -<p id='n211' class='stm run hide_run'><a href='#n211'>211</a></p> -<p id='n212' class='pln'><a href='#n212'>212</a></p> -<p id='n213' class='pln'><a href='#n213'>213</a></p> -<p id='n214' class='stm mis'><a href='#n214'>214</a></p> -<p id='n215' class='pln'><a href='#n215'>215</a></p> -<p id='n216' class='stm run hide_run'><a href='#n216'>216</a></p> -<p id='n217' class='stm run hide_run'><a href='#n217'>217</a></p> -<p id='n218' class='pln'><a href='#n218'>218</a></p> -<p id='n219' class='stm run hide_run'><a href='#n219'>219</a></p> -<p id='n220' class='stm run hide_run'><a href='#n220'>220</a></p> -<p id='n221' class='stm run hide_run'><a href='#n221'>221</a></p> -<p id='n222' class='stm run hide_run'><a href='#n222'>222</a></p> -<p id='n223' class='stm run hide_run'><a href='#n223'>223</a></p> -<p id='n224' class='stm run hide_run'><a href='#n224'>224</a></p> -<p id='n225' class='stm run hide_run'><a href='#n225'>225</a></p> -<p id='n226' class='stm run hide_run'><a href='#n226'>226</a></p> -<p id='n227' class='stm run hide_run'><a href='#n227'>227</a></p> -<p id='n228' class='stm run hide_run'><a href='#n228'>228</a></p> -<p id='n229' class='pln'><a href='#n229'>229</a></p> -<p id='n230' class='stm run hide_run'><a href='#n230'>230</a></p> -<p id='n231' class='stm run hide_run'><a href='#n231'>231</a></p> -<p id='n232' class='stm run hide_run'><a href='#n232'>232</a></p> -<p id='n233' class='stm run hide_run'><a href='#n233'>233</a></p> -<p id='n234' class='stm run hide_run'><a href='#n234'>234</a></p> -<p id='n235' class='stm run hide_run'><a href='#n235'>235</a></p> -<p id='n236' class='pln'><a href='#n236'>236</a></p> -<p id='n237' class='stm run hide_run'><a href='#n237'>237</a></p> -<p id='n238' class='stm run hide_run'><a href='#n238'>238</a></p> -<p id='n239' class='stm run hide_run'><a href='#n239'>239</a></p> -<p id='n240' class='stm run hide_run'><a href='#n240'>240</a></p> -<p id='n241' class='pln'><a href='#n241'>241</a></p> -<p id='n242' class='stm run hide_run'><a href='#n242'>242</a></p> -<p id='n243' class='stm run hide_run'><a href='#n243'>243</a></p> -<p id='n244' class='stm run hide_run'><a href='#n244'>244</a></p> -<p id='n245' class='stm run hide_run'><a href='#n245'>245</a></p> -<p id='n246' class='stm run hide_run'><a href='#n246'>246</a></p> -<p id='n247' class='stm run hide_run'><a href='#n247'>247</a></p> -<p id='n248' class='stm run hide_run'><a href='#n248'>248</a></p> -<p id='n249' class='stm run hide_run'><a href='#n249'>249</a></p> -<p id='n250' class='stm run hide_run'><a href='#n250'>250</a></p> -<p id='n251' class='stm run hide_run'><a href='#n251'>251</a></p> -<p id='n252' class='stm run hide_run'><a href='#n252'>252</a></p> -<p id='n253' class='pln'><a href='#n253'>253</a></p> -<p id='n254' class='stm run hide_run'><a href='#n254'>254</a></p> -<p id='n255' class='stm run hide_run'><a href='#n255'>255</a></p> -<p id='n256' class='stm run hide_run'><a href='#n256'>256</a></p> -<p id='n257' class='stm run hide_run'><a href='#n257'>257</a></p> -<p id='n258' class='stm run hide_run'><a href='#n258'>258</a></p> -<p id='n259' class='stm run hide_run'><a href='#n259'>259</a></p> -<p id='n260' class='pln'><a href='#n260'>260</a></p> -<p id='n261' class='stm run hide_run'><a href='#n261'>261</a></p> -<p id='n262' class='pln'><a href='#n262'>262</a></p> -<p id='n263' class='pln'><a href='#n263'>263</a></p> -<p id='n264' class='stm run hide_run'><a href='#n264'>264</a></p> -<p id='n265' class='stm run hide_run'><a href='#n265'>265</a></p> -<p id='n266' class='stm run hide_run'><a href='#n266'>266</a></p> -<p id='n267' class='stm run hide_run'><a href='#n267'>267</a></p> -<p id='n268' class='pln'><a href='#n268'>268</a></p> -<p id='n269' class='pln'><a href='#n269'>269</a></p> -<p id='n270' class='stm run hide_run'><a href='#n270'>270</a></p> -<p id='n271' class='stm run hide_run'><a href='#n271'>271</a></p> -<p id='n272' class='stm mis'><a href='#n272'>272</a></p> -<p id='n273' class='stm run hide_run'><a href='#n273'>273</a></p> -<p id='n274' class='stm mis'><a href='#n274'>274</a></p> -<p id='n275' class='stm run hide_run'><a href='#n275'>275</a></p> -<p id='n276' class='stm run hide_run'><a href='#n276'>276</a></p> -<p id='n277' class='stm run hide_run'><a href='#n277'>277</a></p> -<p id='n278' class='stm run hide_run'><a href='#n278'>278</a></p> -<p id='n279' class='stm run hide_run'><a href='#n279'>279</a></p> -<p id='n280' class='stm run hide_run'><a href='#n280'>280</a></p> -<p id='n281' class='stm run hide_run'><a href='#n281'>281</a></p> -<p id='n282' class='pln'><a href='#n282'>282</a></p> -<p id='n283' class='stm run hide_run'><a href='#n283'>283</a></p> -<p id='n284' class='pln'><a href='#n284'>284</a></p> -<p id='n285' class='stm run hide_run'><a href='#n285'>285</a></p> -<p id='n286' class='pln'><a href='#n286'>286</a></p> -<p id='n287' class='stm run hide_run'><a href='#n287'>287</a></p> -<p id='n288' class='pln'><a href='#n288'>288</a></p> -<p id='n289' class='stm run hide_run'><a href='#n289'>289</a></p> -<p id='n290' class='stm run hide_run'><a href='#n290'>290</a></p> -<p id='n291' class='stm run hide_run'><a href='#n291'>291</a></p> -<p id='n292' class='stm run hide_run'><a href='#n292'>292</a></p> -<p id='n293' class='stm run hide_run'><a href='#n293'>293</a></p> -<p id='n294' class='stm run hide_run'><a href='#n294'>294</a></p> -<p id='n295' class='pln'><a href='#n295'>295</a></p> -<p id='n296' class='pln'><a href='#n296'>296</a></p> -<p id='n297' class='stm run hide_run'><a href='#n297'>297</a></p> -<p id='n298' class='pln'><a href='#n298'>298</a></p> -<p id='n299' class='pln'><a href='#n299'>299</a></p> -<p id='n300' class='stm run hide_run'><a href='#n300'>300</a></p> -<p id='n301' class='stm run hide_run'><a href='#n301'>301</a></p> -<p id='n302' class='stm run hide_run'><a href='#n302'>302</a></p> -<p id='n303' class='pln'><a href='#n303'>303</a></p> -<p id='n304' class='stm run hide_run'><a href='#n304'>304</a></p> -<p id='n305' class='pln'><a href='#n305'>305</a></p> -<p id='n306' class='stm run hide_run'><a href='#n306'>306</a></p> -<p id='n307' class='stm run hide_run'><a href='#n307'>307</a></p> -<p id='n308' class='pln'><a href='#n308'>308</a></p> -<p id='n309' class='pln'><a href='#n309'>309</a></p> -<p id='n310' class='stm run hide_run'><a href='#n310'>310</a></p> -<p id='n311' class='pln'><a href='#n311'>311</a></p> -<p id='n312' class='pln'><a href='#n312'>312</a></p> -<p id='n313' class='pln'><a href='#n313'>313</a></p> -<p id='n314' class='pln'><a href='#n314'>314</a></p> -<p id='n315' class='pln'><a href='#n315'>315</a></p> -<p id='n316' class='pln'><a href='#n316'>316</a></p> -<p id='n317' class='pln'><a href='#n317'>317</a></p> -<p id='n318' class='pln'><a href='#n318'>318</a></p> -<p id='n319' class='pln'><a href='#n319'>319</a></p> -<p id='n320' class='stm run hide_run'><a href='#n320'>320</a></p> -<p id='n321' class='stm run hide_run'><a href='#n321'>321</a></p> -<p id='n322' class='stm mis'><a href='#n322'>322</a></p> -<p id='n323' class='stm mis'><a href='#n323'>323</a></p> -<p id='n324' class='stm mis'><a href='#n324'>324</a></p> -<p id='n325' class='stm mis'><a href='#n325'>325</a></p> -<p id='n326' class='stm run hide_run'><a href='#n326'>326</a></p> -<p id='n327' class='stm run hide_run'><a href='#n327'>327</a></p> -<p id='n328' class='stm mis'><a href='#n328'>328</a></p> -<p id='n329' class='pln'><a href='#n329'>329</a></p> -<p id='n330' class='stm mis'><a href='#n330'>330</a></p> -<p id='n331' class='pln'><a href='#n331'>331</a></p> -<p id='n332' class='pln'><a href='#n332'>332</a></p> -<p id='n333' class='stm mis'><a href='#n333'>333</a></p> -<p id='n334' class='stm mis'><a href='#n334'>334</a></p> -<p id='n335' class='pln'><a href='#n335'>335</a></p> -<p id='n336' class='pln'><a href='#n336'>336</a></p> -<p id='n337' class='stm run hide_run'><a href='#n337'>337</a></p> -<p id='n338' class='pln'><a href='#n338'>338</a></p> -<p id='n339' class='stm run hide_run'><a href='#n339'>339</a></p> -<p id='n340' class='stm run hide_run'><a href='#n340'>340</a></p> -<p id='n341' class='stm run hide_run'><a href='#n341'>341</a></p> -<p id='n342' class='stm run hide_run'><a href='#n342'>342</a></p> -<p id='n343' class='stm run hide_run'><a href='#n343'>343</a></p> -<p id='n344' class='pln'><a href='#n344'>344</a></p> -<p id='n345' class='stm run hide_run'><a href='#n345'>345</a></p> -<p id='n346' class='pln'><a href='#n346'>346</a></p> -<p id='n347' class='pln'><a href='#n347'>347</a></p> -<p id='n348' class='pln'><a href='#n348'>348</a></p> -<p id='n349' class='pln'><a href='#n349'>349</a></p> -<p id='n350' class='stm run hide_run'><a href='#n350'>350</a></p> -<p id='n351' class='stm run hide_run'><a href='#n351'>351</a></p> -<p id='n352' class='stm run hide_run'><a href='#n352'>352</a></p> -<p id='n353' class='stm run hide_run'><a href='#n353'>353</a></p> -<p id='n354' class='stm run hide_run'><a href='#n354'>354</a></p> -<p id='n355' class='stm run hide_run'><a href='#n355'>355</a></p> -<p id='n356' class='stm run hide_run'><a href='#n356'>356</a></p> -<p id='n357' class='stm run hide_run'><a href='#n357'>357</a></p> -<p id='n358' class='stm run hide_run'><a href='#n358'>358</a></p> -<p id='n359' class='stm run hide_run'><a href='#n359'>359</a></p> -<p id='n360' class='stm run hide_run'><a href='#n360'>360</a></p> -<p id='n361' class='stm run hide_run'><a href='#n361'>361</a></p> -<p id='n362' class='stm run hide_run'><a href='#n362'>362</a></p> -<p id='n363' class='stm run hide_run'><a href='#n363'>363</a></p> -<p id='n364' class='pln'><a href='#n364'>364</a></p> -<p id='n365' class='stm run hide_run'><a href='#n365'>365</a></p> -<p id='n366' class='stm run hide_run'><a href='#n366'>366</a></p> -<p id='n367' class='stm run hide_run'><a href='#n367'>367</a></p> -<p id='n368' class='stm run hide_run'><a href='#n368'>368</a></p> -<p id='n369' class='stm run hide_run'><a href='#n369'>369</a></p> -<p id='n370' class='pln'><a href='#n370'>370</a></p> -<p id='n371' class='stm run hide_run'><a href='#n371'>371</a></p> -<p id='n372' class='stm run hide_run'><a href='#n372'>372</a></p> -<p id='n373' class='stm run hide_run'><a href='#n373'>373</a></p> -<p id='n374' class='stm run hide_run'><a href='#n374'>374</a></p> -<p id='n375' class='stm run hide_run'><a href='#n375'>375</a></p> -<p id='n376' class='pln'><a href='#n376'>376</a></p> -<p id='n377' class='stm run hide_run'><a href='#n377'>377</a></p> -<p id='n378' class='pln'><a href='#n378'>378</a></p> -<p id='n379' class='stm run hide_run'><a href='#n379'>379</a></p> -<p id='n380' class='stm run hide_run'><a href='#n380'>380</a></p> -<p id='n381' class='stm run hide_run'><a href='#n381'>381</a></p> -<p id='n382' class='stm run hide_run'><a href='#n382'>382</a></p> -<p id='n383' class='stm run hide_run'><a href='#n383'>383</a></p> -<p id='n384' class='pln'><a href='#n384'>384</a></p> -<p id='n385' class='stm run hide_run'><a href='#n385'>385</a></p> -<p id='n386' class='pln'><a href='#n386'>386</a></p> -<p id='n387' class='pln'><a href='#n387'>387</a></p> -<p id='n388' class='pln'><a href='#n388'>388</a></p> -<p id='n389' class='stm run hide_run'><a href='#n389'>389</a></p> -<p id='n390' class='pln'><a href='#n390'>390</a></p> -<p id='n391' class='stm run hide_run'><a href='#n391'>391</a></p> -<p id='n392' class='stm run hide_run'><a href='#n392'>392</a></p> -<p id='n393' class='pln'><a href='#n393'>393</a></p> -<p id='n394' class='stm run hide_run'><a href='#n394'>394</a></p> -<p id='n395' class='pln'><a href='#n395'>395</a></p> -<p id='n396' class='pln'><a href='#n396'>396</a></p> -<p id='n397' class='pln'><a href='#n397'>397</a></p> -<p id='n398' class='pln'><a href='#n398'>398</a></p> -<p id='n399' class='stm run hide_run'><a href='#n399'>399</a></p> -<p id='n400' class='pln'><a href='#n400'>400</a></p> -<p id='n401' class='pln'><a href='#n401'>401</a></p> -<p id='n402' class='stm run hide_run'><a href='#n402'>402</a></p> -<p id='n403' class='stm mis'><a href='#n403'>403</a></p> -<p id='n404' class='pln'><a href='#n404'>404</a></p> -<p id='n405' class='stm run hide_run'><a href='#n405'>405</a></p> -<p id='n406' class='pln'><a href='#n406'>406</a></p> -<p id='n407' class='pln'><a href='#n407'>407</a></p> -<p id='n408' class='pln'><a href='#n408'>408</a></p> -<p id='n409' class='stm mis'><a href='#n409'>409</a></p> -<p id='n410' class='pln'><a href='#n410'>410</a></p> -<p id='n411' class='stm run hide_run'><a href='#n411'>411</a></p> -<p id='n412' class='pln'><a href='#n412'>412</a></p> -<p id='n413' class='pln'><a href='#n413'>413</a></p> -<p id='n414' class='stm run hide_run'><a href='#n414'>414</a></p> -<p id='n415' class='pln'><a href='#n415'>415</a></p> -<p id='n416' class='stm run hide_run'><a href='#n416'>416</a></p> -<p id='n417' class='pln'><a href='#n417'>417</a></p> -<p id='n418' class='stm mis'><a href='#n418'>418</a></p> -<p id='n419' class='stm mis'><a href='#n419'>419</a></p> -<p id='n420' class='stm mis'><a href='#n420'>420</a></p> -<p id='n421' class='stm mis'><a href='#n421'>421</a></p> -<p id='n422' class='pln'><a href='#n422'>422</a></p> -<p id='n423' class='pln'><a href='#n423'>423</a></p> -<p id='n424' class='stm run hide_run'><a href='#n424'>424</a></p> -<p id='n425' class='pln'><a href='#n425'>425</a></p> -<p id='n426' class='pln'><a href='#n426'>426</a></p> -<p id='n427' class='pln'><a href='#n427'>427</a></p> -<p id='n428' class='pln'><a href='#n428'>428</a></p> -<p id='n429' class='pln'><a href='#n429'>429</a></p> -<p id='n430' class='pln'><a href='#n430'>430</a></p> -<p id='n431' class='stm run hide_run'><a href='#n431'>431</a></p> -<p id='n432' class='pln'><a href='#n432'>432</a></p> -<p id='n433' class='pln'><a href='#n433'>433</a></p> -<p id='n434' class='stm run hide_run'><a href='#n434'>434</a></p> -<p id='n435' class='pln'><a href='#n435'>435</a></p> -<p id='n436' class='pln'><a href='#n436'>436</a></p> -<p id='n437' class='pln'><a href='#n437'>437</a></p> -<p id='n438' class='pln'><a href='#n438'>438</a></p> -<p id='n439' class='pln'><a href='#n439'>439</a></p> -<p id='n440' class='stm run hide_run'><a href='#n440'>440</a></p> -<p id='n441' class='pln'><a href='#n441'>441</a></p> -<p id='n442' class='pln'><a href='#n442'>442</a></p> -<p id='n443' class='stm run hide_run'><a href='#n443'>443</a></p> -<p id='n444' class='pln'><a href='#n444'>444</a></p> -<p id='n445' class='pln'><a href='#n445'>445</a></p> -<p id='n446' class='pln'><a href='#n446'>446</a></p> -<p id='n447' class='pln'><a href='#n447'>447</a></p> -<p id='n448' class='pln'><a href='#n448'>448</a></p> -<p id='n449' class='stm run hide_run'><a href='#n449'>449</a></p> -<p id='n450' class='pln'><a href='#n450'>450</a></p> -<p id='n451' class='stm run hide_run'><a href='#n451'>451</a></p> -<p id='n452' class='pln'><a href='#n452'>452</a></p> -<p id='n453' class='stm run hide_run'><a href='#n453'>453</a></p> -<p id='n454' class='pln'><a href='#n454'>454</a></p> -<p id='n455' class='pln'><a href='#n455'>455</a></p> -<p id='n456' class='stm run hide_run'><a href='#n456'>456</a></p> -<p id='n457' class='pln'><a href='#n457'>457</a></p> -<p id='n458' class='pln'><a href='#n458'>458</a></p> -<p id='n459' class='pln'><a href='#n459'>459</a></p> -<p id='n460' class='pln'><a href='#n460'>460</a></p> -<p id='n461' class='pln'><a href='#n461'>461</a></p> -<p id='n462' class='stm run hide_run'><a href='#n462'>462</a></p> -<p id='n463' class='pln'><a href='#n463'>463</a></p> -<p id='n464' class='pln'><a href='#n464'>464</a></p> -<p id='n465' class='stm run hide_run'><a href='#n465'>465</a></p> -<p id='n466' class='pln'><a href='#n466'>466</a></p> -<p id='n467' class='pln'><a href='#n467'>467</a></p> -<p id='n468' class='pln'><a href='#n468'>468</a></p> -<p id='n469' class='pln'><a href='#n469'>469</a></p> -<p id='n470' class='pln'><a href='#n470'>470</a></p> -<p id='n471' class='pln'><a href='#n471'>471</a></p> -<p id='n472' class='pln'><a href='#n472'>472</a></p> -<p id='n473' class='stm run hide_run'><a href='#n473'>473</a></p> -<p id='n474' class='stm run hide_run'><a href='#n474'>474</a></p> -<p id='n475' class='pln'><a href='#n475'>475</a></p> -<p id='n476' class='stm run hide_run'><a href='#n476'>476</a></p> -<p id='n477' class='stm mis'><a href='#n477'>477</a></p> -<p id='n478' class='stm mis'><a href='#n478'>478</a></p> -<p id='n479' class='pln'><a href='#n479'>479</a></p> -<p id='n480' class='stm run hide_run'><a href='#n480'>480</a></p> -<p id='n481' class='pln'><a href='#n481'>481</a></p> -<p id='n482' class='pln'><a href='#n482'>482</a></p> -<p id='n483' class='pln'><a href='#n483'>483</a></p> -<p id='n484' class='pln'><a href='#n484'>484</a></p> -<p id='n485' class='pln'><a href='#n485'>485</a></p> -<p id='n486' class='pln'><a href='#n486'>486</a></p> -<p id='n487' class='pln'><a href='#n487'>487</a></p> -<p id='n488' class='pln'><a href='#n488'>488</a></p> -<p id='n489' class='pln'><a href='#n489'>489</a></p> -<p id='n490' class='pln'><a href='#n490'>490</a></p> -<p id='n491' class='pln'><a href='#n491'>491</a></p> -<p id='n492' class='pln'><a href='#n492'>492</a></p> -<p id='n493' class='pln'><a href='#n493'>493</a></p> -<p id='n494' class='pln'><a href='#n494'>494</a></p> -<p id='n495' class='pln'><a href='#n495'>495</a></p> -<p id='n496' class='pln'><a href='#n496'>496</a></p> -<p id='n497' class='pln'><a href='#n497'>497</a></p> -<p id='n498' class='stm run hide_run'><a href='#n498'>498</a></p> -<p id='n499' class='pln'><a href='#n499'>499</a></p> -<p id='n500' class='stm mis'><a href='#n500'>500</a></p> -<p id='n501' class='stm mis'><a href='#n501'>501</a></p> -<p id='n502' class='stm mis'><a href='#n502'>502</a></p> -<p id='n503' class='stm mis'><a href='#n503'>503</a></p> -<p id='n504' class='pln'><a href='#n504'>504</a></p> -<p id='n505' class='stm run hide_run'><a href='#n505'>505</a></p> -<p id='n506' class='pln'><a href='#n506'>506</a></p> -<p id='n507' class='stm run hide_run'><a href='#n507'>507</a></p> -<p id='n508' class='stm run hide_run'><a href='#n508'>508</a></p> -<p id='n509' class='stm mis'><a href='#n509'>509</a></p> -<p id='n510' class='stm mis'><a href='#n510'>510</a></p> -<p id='n511' class='stm mis'><a href='#n511'>511</a></p> -<p id='n512' class='pln'><a href='#n512'>512</a></p> -<p id='n513' class='stm run hide_run'><a href='#n513'>513</a></p> -<p id='n514' class='stm run hide_run'><a href='#n514'>514</a></p> -<p id='n515' class='stm run hide_run'><a href='#n515'>515</a></p> -<p id='n516' class='stm run hide_run'><a href='#n516'>516</a></p> -<p id='n517' class='stm run hide_run'><a href='#n517'>517</a></p> -<p id='n518' class='stm run hide_run'><a href='#n518'>518</a></p> -<p id='n519' class='stm run hide_run'><a href='#n519'>519</a></p> -<p id='n520' class='stm run hide_run'><a href='#n520'>520</a></p> -<p id='n521' class='stm run hide_run'><a href='#n521'>521</a></p> -<p id='n522' class='stm run hide_run'><a href='#n522'>522</a></p> -<p id='n523' class='pln'><a href='#n523'>523</a></p> -<p id='n524' class='stm run hide_run'><a href='#n524'>524</a></p> -<p id='n525' class='stm run hide_run'><a href='#n525'>525</a></p> -<p id='n526' class='pln'><a href='#n526'>526</a></p> -<p id='n527' class='stm run hide_run'><a href='#n527'>527</a></p> -<p id='n528' class='stm run hide_run'><a href='#n528'>528</a></p> -<p id='n529' class='stm run hide_run'><a href='#n529'>529</a></p> -<p id='n530' class='stm run hide_run'><a href='#n530'>530</a></p> -<p id='n531' class='pln'><a href='#n531'>531</a></p> -<p id='n532' class='stm run hide_run'><a href='#n532'>532</a></p> -<p id='n533' class='stm mis'><a href='#n533'>533</a></p> -<p id='n534' class='stm mis'><a href='#n534'>534</a></p> -<p id='n535' class='stm mis'><a href='#n535'>535</a></p> -<p id='n536' class='stm run hide_run'><a href='#n536'>536</a></p> -<p id='n537' class='pln'><a href='#n537'>537</a></p> -<p id='n538' class='stm run hide_run'><a href='#n538'>538</a></p> -<p id='n539' class='stm run hide_run'><a href='#n539'>539</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='pln'><span class='com'>#!/usr/bin/env python</span><span class='strut'> </span></p> -<p id='t2' class='pln'><span class='com'># -*- coding: utf-8 -*-</span><span class='strut'> </span></p> -<p id='t3' class='pln'><span class='strut'> </span></p> -<p id='t4' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>gzip</span><span class='strut'> </span></p> -<p id='t5' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>io</span><span class='strut'> </span></p> -<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'> </span></p> -<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>locale</span><span class='strut'> </span></p> -<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='strut'> </span></p> -<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>re</span><span class='strut'> </span></p> -<p id='t10' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>sys</span><span class='strut'> </span></p> -<p id='t11' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>zlib</span><span class='strut'> </span></p> -<p id='t12' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='strut'> </span></p> -<p id='t13' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'> </span></p> -<p id='t14' class='pln'><span class='strut'> </span></p> -<p id='t15' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t16' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>urllib</span><span class='op'>.</span><span class='nam'>request</span> <span class='key'>as</span> <span class='nam'>compat_urllib_request</span><span class='strut'> </span></p> -<p id='t17' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t18' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>urllib2</span> <span class='key'>as</span> <span class='nam'>compat_urllib_request</span><span class='strut'> </span></p> -<p id='t19' class='pln'><span class='strut'> </span></p> -<p id='t20' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t21' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>urllib</span><span class='op'>.</span><span class='nam'>error</span> <span class='key'>as</span> <span class='nam'>compat_urllib_error</span><span class='strut'> </span></p> -<p id='t22' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t23' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>urllib2</span> <span class='key'>as</span> <span class='nam'>compat_urllib_error</span><span class='strut'> </span></p> -<p id='t24' class='pln'><span class='strut'> </span></p> -<p id='t25' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t26' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>urllib</span><span class='op'>.</span><span class='nam'>parse</span> <span class='key'>as</span> <span class='nam'>compat_urllib_parse</span><span class='strut'> </span></p> -<p id='t27' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t28' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>urllib</span> <span class='key'>as</span> <span class='nam'>compat_urllib_parse</span><span class='strut'> </span></p> -<p id='t29' class='pln'><span class='strut'> </span></p> -<p id='t30' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t31' class='stm run hide_run'> <span class='key'>from</span> <span class='nam'>urllib</span><span class='op'>.</span><span class='nam'>parse</span> <span class='key'>import</span> <span class='nam'>urlparse</span> <span class='key'>as</span> <span class='nam'>compat_urllib_parse_urlparse</span><span class='strut'> </span></p> -<p id='t32' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t33' class='stm run hide_run'> <span class='key'>from</span> <span class='nam'>urlparse</span> <span class='key'>import</span> <span class='nam'>urlparse</span> <span class='key'>as</span> <span class='nam'>compat_urllib_parse_urlparse</span><span class='strut'> </span></p> -<p id='t34' class='pln'><span class='strut'> </span></p> -<p id='t35' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t36' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>http</span><span class='op'>.</span><span class='nam'>cookiejar</span> <span class='key'>as</span> <span class='nam'>compat_cookiejar</span><span class='strut'> </span></p> -<p id='t37' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t38' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>cookielib</span> <span class='key'>as</span> <span class='nam'>compat_cookiejar</span><span class='strut'> </span></p> -<p id='t39' class='pln'><span class='strut'> </span></p> -<p id='t40' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t41' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>html</span><span class='op'>.</span><span class='nam'>entities</span> <span class='key'>as</span> <span class='nam'>compat_html_entities</span><span class='strut'> </span></p> -<p id='t42' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t43' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>htmlentitydefs</span> <span class='key'>as</span> <span class='nam'>compat_html_entities</span><span class='strut'> </span></p> -<p id='t44' class='pln'><span class='strut'> </span></p> -<p id='t45' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t46' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>html</span><span class='op'>.</span><span class='nam'>parser</span> <span class='key'>as</span> <span class='nam'>compat_html_parser</span><span class='strut'> </span></p> -<p id='t47' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t48' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>HTMLParser</span> <span class='key'>as</span> <span class='nam'>compat_html_parser</span><span class='strut'> </span></p> -<p id='t49' class='pln'><span class='strut'> </span></p> -<p id='t50' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t51' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>http</span><span class='op'>.</span><span class='nam'>client</span> <span class='key'>as</span> <span class='nam'>compat_http_client</span><span class='strut'> </span></p> -<p id='t52' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t53' class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>httplib</span> <span class='key'>as</span> <span class='nam'>compat_http_client</span><span class='strut'> </span></p> -<p id='t54' class='pln'><span class='strut'> </span></p> -<p id='t55' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t56' class='stm run hide_run'> <span class='key'>from</span> <span class='nam'>subprocess</span> <span class='key'>import</span> <span class='nam'>DEVNULL</span><span class='strut'> </span></p> -<p id='t57' class='stm mis'> <span class='nam'>compat_subprocess_get_DEVNULL</span> <span class='op'>=</span> <span class='key'>lambda</span><span class='op'>:</span> <span class='nam'>DEVNULL</span><span class='strut'> </span></p> -<p id='t58' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t59' class='stm run hide_run'> <span class='nam'>compat_subprocess_get_DEVNULL</span> <span class='op'>=</span> <span class='key'>lambda</span><span class='op'>:</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>devnull</span><span class='op'>,</span> <span class='str'>'w'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t60' class='pln'><span class='strut'> </span></p> -<p id='t61' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t62' class='stm run hide_run'> <span class='key'>from</span> <span class='nam'>urllib</span><span class='op'>.</span><span class='nam'>parse</span> <span class='key'>import</span> <span class='nam'>parse_qs</span> <span class='key'>as</span> <span class='nam'>compat_parse_qs</span><span class='strut'> </span></p> -<p id='t63' class='stm run hide_run'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t64' class='pln'> <span class='com'># HACK: The following is the correct parse_qs implementation from cpython 3's stdlib.</span><span class='strut'> </span></p> -<p id='t65' class='pln'> <span class='com'># Python 2's version is apparently totally broken</span><span class='strut'> </span></p> -<p id='t66' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_unquote</span><span class='op'>(</span><span class='nam'>string</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>'replace'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t67' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>string</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t68' class='stm mis'> <span class='key'>return</span> <span class='nam'>string</span><span class='strut'> </span></p> -<p id='t69' class='stm run hide_run'> <span class='nam'>res</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'%'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t70' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>res</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t71' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>string</span><span class='strut'> </span></p> -<p id='t72' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t73' class='stm mis'> <span class='nam'>encoding</span> <span class='op'>=</span> <span class='str'>'utf-8'</span><span class='strut'> </span></p> -<p id='t74' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>errors</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t75' class='stm mis'> <span class='nam'>errors</span> <span class='op'>=</span> <span class='str'>'replace'</span><span class='strut'> </span></p> -<p id='t76' class='pln'> <span class='com'># pct_sequence: contiguous sequence of percent-encoded bytes, decoded</span><span class='strut'> </span></p> -<p id='t77' class='stm run hide_run'> <span class='nam'>pct_sequence</span> <span class='op'>=</span> <span class='nam'>b</span><span class='str'>''</span><span class='strut'> </span></p> -<p id='t78' class='stm run hide_run'> <span class='nam'>string</span> <span class='op'>=</span> <span class='nam'>res</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t79' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>item</span> <span class='key'>in</span> <span class='nam'>res</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t80' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t81' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>item</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t82' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ValueError</span><span class='strut'> </span></p> -<p id='t83' class='stm run hide_run'> <span class='nam'>pct_sequence</span> <span class='op'>+=</span> <span class='nam'>item</span><span class='op'>[</span><span class='op'>:</span><span class='num'>2</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>'hex'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t84' class='stm run hide_run'> <span class='nam'>rest</span> <span class='op'>=</span> <span class='nam'>item</span><span class='op'>[</span><span class='num'>2</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t85' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>rest</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t86' class='pln'> <span class='com'># This segment was just a single percent-encoded character.</span><span class='strut'> </span></p> -<p id='t87' class='pln'> <span class='com'># May be part of a sequence of code units, so delay decoding.</span><span class='strut'> </span></p> -<p id='t88' class='pln'> <span class='com'># (Stored in pct_sequence).</span><span class='strut'> </span></p> -<p id='t89' class='stm run hide_run'> <span class='key'>continue</span><span class='strut'> </span></p> -<p id='t90' class='stm mis'> <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t91' class='stm mis'> <span class='nam'>rest</span> <span class='op'>=</span> <span class='str'>'%'</span> <span class='op'>+</span> <span class='nam'>item</span><span class='strut'> </span></p> -<p id='t92' class='pln'> <span class='com'># Encountered non-percent-encoded characters. Flush the current</span><span class='strut'> </span></p> -<p id='t93' class='pln'> <span class='com'># pct_sequence.</span><span class='strut'> </span></p> -<p id='t94' class='stm run hide_run'> <span class='nam'>string</span> <span class='op'>+=</span> <span class='nam'>pct_sequence</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>rest</span><span class='strut'> </span></p> -<p id='t95' class='stm run hide_run'> <span class='nam'>pct_sequence</span> <span class='op'>=</span> <span class='nam'>b</span><span class='str'>''</span><span class='strut'> </span></p> -<p id='t96' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>pct_sequence</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t97' class='pln'> <span class='com'># Flush the final pct_sequence</span><span class='strut'> </span></p> -<p id='t98' class='stm run hide_run'> <span class='nam'>string</span> <span class='op'>+=</span> <span class='nam'>pct_sequence</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t99' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>string</span><span class='strut'> </span></p> -<p id='t100' class='pln'><span class='strut'> </span></p> -<p id='t101' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>_parse_qsl</span><span class='op'>(</span><span class='nam'>qs</span><span class='op'>,</span> <span class='nam'>keep_blank_values</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>strict_parsing</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t102' class='pln'> <span class='nam'>encoding</span><span class='op'>=</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>'replace'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t103' class='stm run hide_run'> <span class='nam'>qs</span><span class='op'>,</span> <span class='nam'>_coerce_result</span> <span class='op'>=</span> <span class='nam'>qs</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='strut'> </span></p> -<p id='t104' class='stm run hide_run'> <span class='nam'>pairs</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>s2</span> <span class='key'>for</span> <span class='nam'>s1</span> <span class='key'>in</span> <span class='nam'>qs</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'&'</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>s2</span> <span class='key'>in</span> <span class='nam'>s1</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>';'</span><span class='op'>)</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t105' class='stm run hide_run'> <span class='nam'>r</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t106' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>name_value</span> <span class='key'>in</span> <span class='nam'>pairs</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t107' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>name_value</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>strict_parsing</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t108' class='stm mis'> <span class='key'>continue</span><span class='strut'> </span></p> -<p id='t109' class='stm run hide_run'> <span class='nam'>nv</span> <span class='op'>=</span> <span class='nam'>name_value</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'='</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t110' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>nv</span><span class='op'>)</span> <span class='op'>!=</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t111' class='stm mis'> <span class='key'>if</span> <span class='nam'>strict_parsing</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t112' class='stm mis'> <span class='key'>raise</span> <span class='nam'>ValueError</span><span class='op'>(</span><span class='str'>"bad query field: %r"</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>name_value</span><span class='op'>,</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t113' class='pln'> <span class='com'># Handle case of a control-name with no equal sign</span><span class='strut'> </span></p> -<p id='t114' class='stm mis'> <span class='key'>if</span> <span class='nam'>keep_blank_values</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t115' class='stm mis'> <span class='nam'>nv</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='str'>''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t116' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t117' class='stm mis'> <span class='key'>continue</span><span class='strut'> </span></p> -<p id='t118' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>nv</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>keep_blank_values</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t119' class='stm run hide_run'> <span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>nv</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'+'</span><span class='op'>,</span> <span class='str'>' '</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t120' class='stm run hide_run'> <span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>_unquote</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='nam'>errors</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t121' class='stm run hide_run'> <span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>_coerce_result</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t122' class='stm run hide_run'> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>nv</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'+'</span><span class='op'>,</span> <span class='str'>' '</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t123' class='stm run hide_run'> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>_unquote</span><span class='op'>(</span><span class='nam'>value</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='nam'>errors</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t124' class='stm run hide_run'> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>_coerce_result</span><span class='op'>(</span><span class='nam'>value</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t125' class='stm run hide_run'> <span class='nam'>r</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>value</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t126' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>r</span><span class='strut'> </span></p> -<p id='t127' class='pln'><span class='strut'> </span></p> -<p id='t128' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>qs</span><span class='op'>,</span> <span class='nam'>keep_blank_values</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>strict_parsing</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t129' class='pln'> <span class='nam'>encoding</span><span class='op'>=</span><span class='str'>'utf-8'</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>'replace'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t130' class='stm run hide_run'> <span class='nam'>parsed_result</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t131' class='stm run hide_run'> <span class='nam'>pairs</span> <span class='op'>=</span> <span class='nam'>_parse_qsl</span><span class='op'>(</span><span class='nam'>qs</span><span class='op'>,</span> <span class='nam'>keep_blank_values</span><span class='op'>,</span> <span class='nam'>strict_parsing</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t132' class='pln'> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='nam'>errors</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t133' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>value</span> <span class='key'>in</span> <span class='nam'>pairs</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t134' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>name</span> <span class='key'>in</span> <span class='nam'>parsed_result</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t135' class='stm mis'> <span class='nam'>parsed_result</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>value</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t136' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t137' class='stm run hide_run'> <span class='nam'>parsed_result</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>value</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t138' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>parsed_result</span><span class='strut'> </span></p> -<p id='t139' class='pln'><span class='strut'> </span></p> -<p id='t140' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t141' class='stm run hide_run'> <span class='nam'>compat_str</span> <span class='op'>=</span> <span class='nam'>unicode</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t142' class='stm mis'><span class='key'>except</span> <span class='nam'>NameError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t143' class='stm mis'> <span class='nam'>compat_str</span> <span class='op'>=</span> <span class='nam'>str</span><span class='strut'> </span></p> -<p id='t144' class='pln'><span class='strut'> </span></p> -<p id='t145' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t146' class='stm run hide_run'> <span class='nam'>compat_chr</span> <span class='op'>=</span> <span class='nam'>unichr</span> <span class='com'># Python 2</span><span class='strut'> </span></p> -<p id='t147' class='stm mis'><span class='key'>except</span> <span class='nam'>NameError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t148' class='stm mis'> <span class='nam'>compat_chr</span> <span class='op'>=</span> <span class='nam'>chr</span><span class='strut'> </span></p> -<p id='t149' class='pln'><span class='strut'> </span></p> -<p id='t150' class='stm run hide_run'><span class='nam'>std_headers</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'> </span></p> -<p id='t151' class='pln'> <span class='str'>'User-Agent'</span><span class='op'>:</span> <span class='str'>'Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t152' class='pln'> <span class='str'>'Accept-Charset'</span><span class='op'>:</span> <span class='str'>'ISO-8859-1,utf-8;q=0.7,*;q=0.7'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t153' class='pln'> <span class='str'>'Accept'</span><span class='op'>:</span> <span class='str'>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t154' class='pln'> <span class='str'>'Accept-Encoding'</span><span class='op'>:</span> <span class='str'>'gzip, deflate'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t155' class='pln'> <span class='str'>'Accept-Language'</span><span class='op'>:</span> <span class='str'>'en-us,en;q=0.5'</span><span class='op'>,</span><span class='strut'> </span></p> -<p id='t156' class='pln'><span class='op'>}</span><span class='strut'> </span></p> -<p id='t157' class='pln'><span class='strut'> </span></p> -<p id='t158' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t159' class='pln'> <span class='str'>"""Get preferred encoding.</span><span class='strut'> </span></p> -<p id='t160' class='pln'><span class='strut'> </span></p> -<p id='t161' class='pln'><span class='str'> Returns the best encoding scheme for the system, based on</span><span class='strut'> </span></p> -<p id='t162' class='pln'><span class='str'> locale.getpreferredencoding() and some further tweaks.</span><span class='strut'> </span></p> -<p id='t163' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t164' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t165' class='stm run hide_run'> <span class='nam'>pref</span> <span class='op'>=</span> <span class='nam'>locale</span><span class='op'>.</span><span class='nam'>getpreferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t166' class='stm run hide_run'> <span class='str'>u'TEST'</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>pref</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t167' class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t168' class='stm mis'> <span class='nam'>pref</span> <span class='op'>=</span> <span class='str'>'UTF-8'</span><span class='strut'> </span></p> -<p id='t169' class='pln'><span class='strut'> </span></p> -<p id='t170' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>pref</span><span class='strut'> </span></p> -<p id='t171' class='pln'><span class='strut'> </span></p> -<p id='t172' class='stm run hide_run'><span class='key'>if</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>version_info</span> <span class='op'><</span> <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t173' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t174' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'xmlcharrefreplace'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t175' class='pln'><span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t176' class='stm mis'> <span class='key'>def</span> <span class='nam'>compat_print</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t177' class='stm mis'> <span class='key'>assert</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>type</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t178' class='stm mis'> <span class='key'>print</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t179' class='pln'><span class='strut'> </span></p> -<p id='t180' class='pln'><span class='com'># In Python 2.x, json.dump expects a bytestream.</span><span class='strut'> </span></p> -<p id='t181' class='pln'><span class='com'># In Python 3.x, it writes to a character stream</span><span class='strut'> </span></p> -<p id='t182' class='stm run hide_run'><span class='key'>if</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>version_info</span> <span class='op'><</span> <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t183' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>write_json_file</span><span class='op'>(</span><span class='nam'>obj</span><span class='op'>,</span> <span class='nam'>fn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t184' class='stm run hide_run'> <span class='key'>with</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fn</span><span class='op'>,</span> <span class='str'>'wb'</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>f</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t185' class='stm run hide_run'> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>dump</span><span class='op'>(</span><span class='nam'>obj</span><span class='op'>,</span> <span class='nam'>f</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t186' class='pln'><span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t187' class='stm mis'> <span class='key'>def</span> <span class='nam'>write_json_file</span><span class='op'>(</span><span class='nam'>obj</span><span class='op'>,</span> <span class='nam'>fn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t188' class='stm mis'> <span class='key'>with</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fn</span><span class='op'>,</span> <span class='str'>'w'</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='str'>'utf-8'</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>f</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t189' class='stm mis'> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>dump</span><span class='op'>(</span><span class='nam'>obj</span><span class='op'>,</span> <span class='nam'>f</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t190' class='pln'><span class='strut'> </span></p> -<p id='t191' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>htmlentity_transform</span><span class='op'>(</span><span class='nam'>matchobj</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t192' class='pln'> <span class='str'>"""Transforms an HTML entity to a character.</span><span class='strut'> </span></p> -<p id='t193' class='pln'><span class='strut'> </span></p> -<p id='t194' class='pln'><span class='str'> This function receives a match object and is intended to be used with</span><span class='strut'> </span></p> -<p id='t195' class='pln'><span class='str'> the re.sub() function.</span><span class='strut'> </span></p> -<p id='t196' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t197' class='stm run hide_run'> <span class='nam'>entity</span> <span class='op'>=</span> <span class='nam'>matchobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t198' class='pln'><span class='strut'> </span></p> -<p id='t199' class='pln'> <span class='com'># Known non-numeric HTML entity</span><span class='strut'> </span></p> -<p id='t200' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>entity</span> <span class='key'>in</span> <span class='nam'>compat_html_entities</span><span class='op'>.</span><span class='nam'>name2codepoint</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t201' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>compat_chr</span><span class='op'>(</span><span class='nam'>compat_html_entities</span><span class='op'>.</span><span class='nam'>name2codepoint</span><span class='op'>[</span><span class='nam'>entity</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t202' class='pln'><span class='strut'> </span></p> -<p id='t203' class='stm run hide_run'> <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>u'(?u)#(x?\\d+)'</span><span class='op'>,</span> <span class='nam'>entity</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t204' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t205' class='stm run hide_run'> <span class='nam'>numstr</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t206' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>numstr</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>u'x'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t207' class='stm mis'> <span class='nam'>base</span> <span class='op'>=</span> <span class='num'>16</span><span class='strut'> </span></p> -<p id='t208' class='stm mis'> <span class='nam'>numstr</span> <span class='op'>=</span> <span class='str'>u'0%s'</span> <span class='op'>%</span> <span class='nam'>numstr</span><span class='strut'> </span></p> -<p id='t209' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t210' class='stm run hide_run'> <span class='nam'>base</span> <span class='op'>=</span> <span class='num'>10</span><span class='strut'> </span></p> -<p id='t211' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>compat_chr</span><span class='op'>(</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>numstr</span><span class='op'>,</span> <span class='nam'>base</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t212' class='pln'><span class='strut'> </span></p> -<p id='t213' class='pln'> <span class='com'># Unknown entity in name, return its literal representation</span><span class='strut'> </span></p> -<p id='t214' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='str'>u'&%s;'</span> <span class='op'>%</span> <span class='nam'>entity</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t215' class='pln'><span class='strut'> </span></p> -<p id='t216' class='stm run hide_run'><span class='nam'>compat_html_parser</span><span class='op'>.</span><span class='nam'>locatestarttagend</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>r"""<[a-zA-Z][-.a-zA-Z0-9:_]*(?:\s+(?:(?<=['"\s])[^\s/>][^\s/=>]*(?:\s*=+\s*(?:'[^']*'|"[^"]*"|(?!['"])[^>\s]*))?\s*)*)?\s*"""</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='com'># backport bugfix</span><span class='strut'> </span></p> -<p id='t217' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>AttrParser</span><span class='op'>(</span><span class='nam'>compat_html_parser</span><span class='op'>.</span><span class='nam'>HTMLParser</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t218' class='pln'> <span class='str'>"""Modified HTMLParser that isolates a tag with the specified attribute"""</span><span class='strut'> </span></p> -<p id='t219' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>attribute</span><span class='op'>,</span> <span class='nam'>value</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t220' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>attribute</span> <span class='op'>=</span> <span class='nam'>attribute</span><span class='strut'> </span></p> -<p id='t221' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>value</span><span class='strut'> </span></p> -<p id='t222' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t223' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t224' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p> -<p id='t225' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t226' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>watch_startpos</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t227' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error_count</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t228' class='stm run hide_run'> <span class='nam'>compat_html_parser</span><span class='op'>.</span><span class='nam'>HTMLParser</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t229' class='pln'><span class='strut'> </span></p> -<p id='t230' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>error</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t231' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error_count</span> <span class='op'>></span> <span class='num'>10</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t232' class='stm run hide_run'> <span class='key'>raise</span> <span class='nam'>compat_html_parser</span><span class='op'>.</span><span class='nam'>HTMLParseError</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>getpos</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t233' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>rawdata</span> <span class='op'>=</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>html</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>getpos</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span> <span class='com'># skip one line</span><span class='strut'> </span></p> -<p id='t234' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t235' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>goahead</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t236' class='pln'><span class='strut'> </span></p> -<p id='t237' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>loads</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t238' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>html</span><span class='strut'> </span></p> -<p id='t239' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>(</span><span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t240' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t241' class='pln'><span class='strut'> </span></p> -<p id='t242' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>handle_starttag</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>tag</span><span class='op'>,</span> <span class='nam'>attrs</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t243' class='stm run hide_run'> <span class='nam'>attrs</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='nam'>attrs</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t244' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t245' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>find_startpos</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t246' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>attribute</span> <span class='key'>in</span> <span class='nam'>attrs</span> <span class='key'>and</span> <span class='nam'>attrs</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>attribute</span><span class='op'>]</span> <span class='op'>==</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>value</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t247' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>tag</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t248' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t249' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>watch_startpos</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p> -<p id='t250' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t251' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>tag</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span><span class='op'>:</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span><span class='op'>[</span><span class='nam'>tag</span><span class='op'>]</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p> -<p id='t252' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span><span class='op'>[</span><span class='nam'>tag</span><span class='op'>]</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t253' class='pln'><span class='strut'> </span></p> -<p id='t254' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>handle_endtag</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>tag</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t255' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t256' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>tag</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span><span class='op'>:</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span><span class='op'>[</span><span class='nam'>tag</span><span class='op'>]</span> <span class='op'>-=</span> <span class='num'>1</span><span class='strut'> </span></p> -<p id='t257' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>depth</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>]</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t258' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>started</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t259' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>getpos</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t260' class='pln'><span class='strut'> </span></p> -<p id='t261' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>find_startpos</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>x</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t262' class='pln'> <span class='str'>"""Needed to put the start position of the result (self.result[1])</span><span class='strut'> </span></p> -<p id='t263' class='pln'><span class='str'> after the opening tag with the requested id"""</span><span class='strut'> </span></p> -<p id='t264' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>watch_startpos</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t265' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>watch_startpos</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p> -<p id='t266' class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>getpos</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t267' class='stm run hide_run'> <span class='nam'>handle_entityref</span> <span class='op'>=</span> <span class='nam'>handle_charref</span> <span class='op'>=</span> <span class='nam'>handle_data</span> <span class='op'>=</span> <span class='nam'>handle_comment</span> <span class='op'>=</span> <span class='xx'>\</span><span class='strut'> </span></p> -<p id='t268' class='pln'> <span class='nam'>handle_decl</span> <span class='op'>=</span> <span class='nam'>handle_pi</span> <span class='op'>=</span> <span class='nam'>unknown_decl</span> <span class='op'>=</span> <span class='nam'>find_startpos</span><span class='strut'> </span></p> -<p id='t269' class='pln'><span class='strut'> </span></p> -<p id='t270' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>get_result</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t271' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t272' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t273' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>)</span> <span class='op'>!=</span> <span class='num'>3</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t274' class='stm mis'> <span class='key'>return</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t275' class='stm run hide_run'> <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>html</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t276' class='stm run hide_run'> <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>lines</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t277' class='stm run hide_run'> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t278' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t279' class='stm run hide_run'> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>-</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t280' class='stm run hide_run'> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t281' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t282' class='pln'><span class='strut'> </span></p> -<p id='t283' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>get_element_by_id</span><span class='op'>(</span><span class='nam'>id</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t284' class='pln'> <span class='str'>"""Return the content of the tag with the specified ID in the passed HTML document"""</span><span class='strut'> </span></p> -<p id='t285' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>get_element_by_attribute</span><span class='op'>(</span><span class='str'>"id"</span><span class='op'>,</span> <span class='nam'>id</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t286' class='pln'><span class='strut'> </span></p> -<p id='t287' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>get_element_by_attribute</span><span class='op'>(</span><span class='nam'>attribute</span><span class='op'>,</span> <span class='nam'>value</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t288' class='pln'> <span class='str'>"""Return the content of the tag with the specified attribute in the passed HTML document"""</span><span class='strut'> </span></p> -<p id='t289' class='stm run hide_run'> <span class='nam'>parser</span> <span class='op'>=</span> <span class='nam'>AttrParser</span><span class='op'>(</span><span class='nam'>attribute</span><span class='op'>,</span> <span class='nam'>value</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t290' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t291' class='stm run hide_run'> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t292' class='stm run hide_run'> <span class='key'>except</span> <span class='nam'>compat_html_parser</span><span class='op'>.</span><span class='nam'>HTMLParseError</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t293' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t294' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>parser</span><span class='op'>.</span><span class='nam'>get_result</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t295' class='pln'><span class='strut'> </span></p> -<p id='t296' class='pln'><span class='strut'> </span></p> -<p id='t297' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>clean_html</span><span class='op'>(</span><span class='nam'>html</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t298' class='pln'> <span class='str'>"""Clean an HTML snippet into a readable string"""</span><span class='strut'> </span></p> -<p id='t299' class='pln'> <span class='com'># Newline vs <br /></span><span class='strut'> </span></p> -<p id='t300' class='stm run hide_run'> <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>html</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>,</span> <span class='str'>' '</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t301' class='stm run hide_run'> <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>r'\s*<\s*br\s*/?\s*>\s*'</span><span class='op'>,</span> <span class='str'>'\n'</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t302' class='stm run hide_run'> <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>r'<\s*/\s*p\s*>\s*<\s*p[^>]*>'</span><span class='op'>,</span> <span class='str'>'\n'</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t303' class='pln'> <span class='com'># Strip html tags</span><span class='strut'> </span></p> -<p id='t304' class='stm run hide_run'> <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>'<.*?>'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t305' class='pln'> <span class='com'># Replace html entities</span><span class='strut'> </span></p> -<p id='t306' class='stm run hide_run'> <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>html</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t307' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>html</span><span class='strut'> </span></p> -<p id='t308' class='pln'><span class='strut'> </span></p> -<p id='t309' class='pln'><span class='strut'> </span></p> -<p id='t310' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>sanitize_open</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>open_mode</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t311' class='pln'> <span class='str'>"""Try to open the given filename, and slightly tweak it if this fails.</span><span class='strut'> </span></p> -<p id='t312' class='pln'><span class='strut'> </span></p> -<p id='t313' class='pln'><span class='str'> Attempts to open the given filename. If this fails, it tries to change</span><span class='strut'> </span></p> -<p id='t314' class='pln'><span class='str'> the filename slightly, step by step, until it's either able to open it</span><span class='strut'> </span></p> -<p id='t315' class='pln'><span class='str'> or it fails and raises a final exception, like the standard open()</span><span class='strut'> </span></p> -<p id='t316' class='pln'><span class='str'> function.</span><span class='strut'> </span></p> -<p id='t317' class='pln'><span class='strut'> </span></p> -<p id='t318' class='pln'><span class='str'> It returns the tuple (stream, definitive_file_name).</span><span class='strut'> </span></p> -<p id='t319' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t320' class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t321' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>filename</span> <span class='op'>==</span> <span class='str'>u'-'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t322' class='stm mis'> <span class='key'>if</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>platform</span> <span class='op'>==</span> <span class='str'>'win32'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t323' class='stm mis'> <span class='key'>import</span> <span class='nam'>msvcrt</span><span class='strut'> </span></p> -<p id='t324' class='stm mis'> <span class='nam'>msvcrt</span><span class='op'>.</span><span class='nam'>setmode</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>.</span><span class='nam'>fileno</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>O_BINARY</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t325' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t326' class='stm run hide_run'> <span class='nam'>stream</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>open_mode</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t327' class='stm run hide_run'> <span class='key'>return</span> <span class='op'>(</span><span class='nam'>stream</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t328' class='stm mis'> <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>OSError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t329' class='pln'> <span class='com'># In case of error, try to remove win32 forbidden chars</span><span class='strut'> </span></p> -<p id='t330' class='stm mis'> <span class='nam'>filename</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>u'[/<>:"\\|\\\\?\\*]'</span><span class='op'>,</span> <span class='str'>u'#'</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t331' class='pln'><span class='strut'> </span></p> -<p id='t332' class='pln'> <span class='com'># An exception here should be caught in the caller</span><span class='strut'> </span></p> -<p id='t333' class='stm mis'> <span class='nam'>stream</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>open_mode</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t334' class='stm mis'> <span class='key'>return</span> <span class='op'>(</span><span class='nam'>stream</span><span class='op'>,</span> <span class='nam'>filename</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t335' class='pln'><span class='strut'> </span></p> -<p id='t336' class='pln'><span class='strut'> </span></p> -<p id='t337' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>timeconvert</span><span class='op'>(</span><span class='nam'>timestr</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t338' class='pln'> <span class='str'>"""Convert RFC 2822 defined time string into system timestamp"""</span><span class='strut'> </span></p> -<p id='t339' class='stm run hide_run'> <span class='nam'>timestamp</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t340' class='stm run hide_run'> <span class='nam'>timetuple</span> <span class='op'>=</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='op'>.</span><span class='nam'>parsedate_tz</span><span class='op'>(</span><span class='nam'>timestr</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t341' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>timetuple</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t342' class='stm run hide_run'> <span class='nam'>timestamp</span> <span class='op'>=</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='op'>.</span><span class='nam'>mktime_tz</span><span class='op'>(</span><span class='nam'>timetuple</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t343' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>timestamp</span><span class='strut'> </span></p> -<p id='t344' class='pln'><span class='strut'> </span></p> -<p id='t345' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>sanitize_filename</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>restricted</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>is_id</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t346' class='pln'> <span class='str'>"""Sanitizes a string so it could be used as part of a filename.</span><span class='strut'> </span></p> -<p id='t347' class='pln'><span class='str'> If restricted is set, use a stricter subset of allowed characters.</span><span class='strut'> </span></p> -<p id='t348' class='pln'><span class='str'> Set is_id if this is not an arbitrary string, but an ID that should be kept if possible</span><span class='strut'> </span></p> -<p id='t349' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t350' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>replace_insane</span><span class='op'>(</span><span class='nam'>char</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t351' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>char</span> <span class='op'>==</span> <span class='str'>'?'</span> <span class='key'>or</span> <span class='nam'>ord</span><span class='op'>(</span><span class='nam'>char</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>32</span> <span class='key'>or</span> <span class='nam'>ord</span><span class='op'>(</span><span class='nam'>char</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>127</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t352' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>''</span><span class='strut'> </span></p> -<p id='t353' class='stm run hide_run'> <span class='key'>elif</span> <span class='nam'>char</span> <span class='op'>==</span> <span class='str'>'"'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t354' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>''</span> <span class='key'>if</span> <span class='nam'>restricted</span> <span class='key'>else</span> <span class='str'>'\''</span><span class='strut'> </span></p> -<p id='t355' class='stm run hide_run'> <span class='key'>elif</span> <span class='nam'>char</span> <span class='op'>==</span> <span class='str'>':'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t356' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'_-'</span> <span class='key'>if</span> <span class='nam'>restricted</span> <span class='key'>else</span> <span class='str'>' -'</span><span class='strut'> </span></p> -<p id='t357' class='stm run hide_run'> <span class='key'>elif</span> <span class='nam'>char</span> <span class='key'>in</span> <span class='str'>'\\/|*<>'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t358' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'_'</span><span class='strut'> </span></p> -<p id='t359' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>restricted</span> <span class='key'>and</span> <span class='op'>(</span><span class='nam'>char</span> <span class='key'>in</span> <span class='str'>'!&\'()[]{}$;`^,#'</span> <span class='key'>or</span> <span class='nam'>char</span><span class='op'>.</span><span class='nam'>isspace</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t360' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'_'</span><span class='strut'> </span></p> -<p id='t361' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>restricted</span> <span class='key'>and</span> <span class='nam'>ord</span><span class='op'>(</span><span class='nam'>char</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>127</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t362' class='stm run hide_run'> <span class='key'>return</span> <span class='str'>'_'</span><span class='strut'> </span></p> -<p id='t363' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>char</span><span class='strut'> </span></p> -<p id='t364' class='pln'><span class='strut'> </span></p> -<p id='t365' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='str'>u''</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>map</span><span class='op'>(</span><span class='nam'>replace_insane</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t366' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>is_id</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t367' class='stm run hide_run'> <span class='key'>while</span> <span class='str'>'__'</span> <span class='key'>in</span> <span class='nam'>result</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t368' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'__'</span><span class='op'>,</span> <span class='str'>'_'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t369' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>'_'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t370' class='pln'> <span class='com'># Common case of "Foreign band name - English song title"</span><span class='strut'> </span></p> -<p id='t371' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>restricted</span> <span class='key'>and</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>'-_'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t372' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>[</span><span class='num'>2</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t373' class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>result</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t374' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='str'>'_'</span><span class='strut'> </span></p> -<p id='t375' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>result</span><span class='strut'> </span></p> -<p id='t376' class='pln'><span class='strut'> </span></p> -<p id='t377' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>orderedSet</span><span class='op'>(</span><span class='nam'>iterable</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t378' class='pln'> <span class='str'>""" Remove all duplicates from the input iterable """</span><span class='strut'> </span></p> -<p id='t379' class='stm run hide_run'> <span class='nam'>res</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t380' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>el</span> <span class='key'>in</span> <span class='nam'>iterable</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t381' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>el</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>res</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t382' class='stm run hide_run'> <span class='nam'>res</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>el</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t383' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>res</span><span class='strut'> </span></p> -<p id='t384' class='pln'><span class='strut'> </span></p> -<p id='t385' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t386' class='pln'> <span class='str'>"""</span><span class='strut'> </span></p> -<p id='t387' class='pln'><span class='str'> @param s a string</span><span class='strut'> </span></p> -<p id='t388' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t389' class='stm run hide_run'> <span class='key'>assert</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>type</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t390' class='pln'><span class='strut'> </span></p> -<p id='t391' class='stm run hide_run'> <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>u'(?u)&(.+?);'</span><span class='op'>,</span> <span class='nam'>htmlentity_transform</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t392' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>result</span><span class='strut'> </span></p> -<p id='t393' class='pln'><span class='strut'> </span></p> -<p id='t394' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>encodeFilename</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t395' class='pln'> <span class='str'>"""</span><span class='strut'> </span></p> -<p id='t396' class='pln'><span class='str'> @param s The name of the file</span><span class='strut'> </span></p> -<p id='t397' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t398' class='pln'><span class='strut'> </span></p> -<p id='t399' class='stm run hide_run'> <span class='key'>assert</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>type</span><span class='op'>(</span><span class='str'>u''</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t400' class='pln'><span class='strut'> </span></p> -<p id='t401' class='pln'> <span class='com'># Python 3 has a Unicode API</span><span class='strut'> </span></p> -<p id='t402' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>version_info</span> <span class='op'>>=</span> <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span> <span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t403' class='stm mis'> <span class='key'>return</span> <span class='nam'>s</span><span class='strut'> </span></p> -<p id='t404' class='pln'><span class='strut'> </span></p> -<p id='t405' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>platform</span> <span class='op'>==</span> <span class='str'>'win32'</span> <span class='key'>and</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>getwindowsversion</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>>=</span> <span class='num'>5</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t406' class='pln'> <span class='com'># Pass u'' directly to use Unicode APIs on Windows 2000 and up</span><span class='strut'> </span></p> -<p id='t407' class='pln'> <span class='com'># (Detecting Windows NT 4 is tricky because 'major >= 4' would</span><span class='strut'> </span></p> -<p id='t408' class='pln'> <span class='com'># match Windows 9x series as well. Besides, NT 4 is obsolete.)</span><span class='strut'> </span></p> -<p id='t409' class='stm mis'> <span class='key'>return</span> <span class='nam'>s</span><span class='strut'> </span></p> -<p id='t410' class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t411' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>s</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>getfilesystemencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'ignore'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t412' class='pln'><span class='strut'> </span></p> -<p id='t413' class='pln'><span class='strut'> </span></p> -<p id='t414' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ExtractorError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t415' class='pln'> <span class='str'>"""Error during info extraction."""</span><span class='strut'> </span></p> -<p id='t416' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>tb</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t417' class='pln'> <span class='str'>""" tb is the original traceback (so that it can be printed out) """</span><span class='strut'> </span></p> -<p id='t418' class='stm mis'> <span class='nam'>super</span><span class='op'>(</span><span class='nam'>ExtractorError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t419' class='stm mis'> <span class='key'>if</span> <span class='nam'>tb</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t420' class='stm mis'> <span class='nam'>tb</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>exc_info</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t421' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>traceback</span> <span class='op'>=</span> <span class='nam'>tb</span><span class='strut'> </span></p> -<p id='t422' class='pln'><span class='strut'> </span></p> -<p id='t423' class='pln'><span class='strut'> </span></p> -<p id='t424' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DownloadError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t425' class='pln'> <span class='str'>"""Download Error exception.</span><span class='strut'> </span></p> -<p id='t426' class='pln'><span class='strut'> </span></p> -<p id='t427' class='pln'><span class='str'> This exception may be thrown by FileDownloader objects if they are not</span><span class='strut'> </span></p> -<p id='t428' class='pln'><span class='str'> configured to continue on errors. They will contain the appropriate</span><span class='strut'> </span></p> -<p id='t429' class='pln'><span class='str'> error message.</span><span class='strut'> </span></p> -<p id='t430' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t431' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t432' class='pln'><span class='strut'> </span></p> -<p id='t433' class='pln'><span class='strut'> </span></p> -<p id='t434' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>SameFileError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t435' class='pln'> <span class='str'>"""Same File exception.</span><span class='strut'> </span></p> -<p id='t436' class='pln'><span class='strut'> </span></p> -<p id='t437' class='pln'><span class='str'> This exception will be thrown by FileDownloader objects if they detect</span><span class='strut'> </span></p> -<p id='t438' class='pln'><span class='str'> multiple files would have to be downloaded to the same file on disk.</span><span class='strut'> </span></p> -<p id='t439' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t440' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t441' class='pln'><span class='strut'> </span></p> -<p id='t442' class='pln'><span class='strut'> </span></p> -<p id='t443' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>PostProcessingError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t444' class='pln'> <span class='str'>"""Post Processing exception.</span><span class='strut'> </span></p> -<p id='t445' class='pln'><span class='strut'> </span></p> -<p id='t446' class='pln'><span class='str'> This exception may be raised by PostProcessor's .run() method to</span><span class='strut'> </span></p> -<p id='t447' class='pln'><span class='str'> indicate an error in the postprocessing task.</span><span class='strut'> </span></p> -<p id='t448' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t449' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t450' class='pln'><span class='strut'> </span></p> -<p id='t451' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MaxDownloadsReached</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t452' class='pln'> <span class='str'>""" --max-downloads limit has been reached. """</span><span class='strut'> </span></p> -<p id='t453' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t454' class='pln'><span class='strut'> </span></p> -<p id='t455' class='pln'><span class='strut'> </span></p> -<p id='t456' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>UnavailableVideoError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t457' class='pln'> <span class='str'>"""Unavailable Format exception.</span><span class='strut'> </span></p> -<p id='t458' class='pln'><span class='strut'> </span></p> -<p id='t459' class='pln'><span class='str'> This exception will be thrown when a video is requested</span><span class='strut'> </span></p> -<p id='t460' class='pln'><span class='str'> in a format that is not available for that video.</span><span class='strut'> </span></p> -<p id='t461' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t462' class='stm run hide_run'> <span class='key'>pass</span><span class='strut'> </span></p> -<p id='t463' class='pln'><span class='strut'> </span></p> -<p id='t464' class='pln'><span class='strut'> </span></p> -<p id='t465' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ContentTooShortError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t466' class='pln'> <span class='str'>"""Content Too Short exception.</span><span class='strut'> </span></p> -<p id='t467' class='pln'><span class='strut'> </span></p> -<p id='t468' class='pln'><span class='str'> This exception may be raised by FileDownloader objects when a file they</span><span class='strut'> </span></p> -<p id='t469' class='pln'><span class='str'> download is too small for what the server announced first, indicating</span><span class='strut'> </span></p> -<p id='t470' class='pln'><span class='str'> the connection was probably interrupted.</span><span class='strut'> </span></p> -<p id='t471' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t472' class='pln'> <span class='com'># Both in bytes</span><span class='strut'> </span></p> -<p id='t473' class='stm run hide_run'> <span class='nam'>downloaded</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t474' class='stm run hide_run'> <span class='nam'>expected</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p> -<p id='t475' class='pln'><span class='strut'> </span></p> -<p id='t476' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloaded</span><span class='op'>,</span> <span class='nam'>expected</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t477' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>downloaded</span> <span class='op'>=</span> <span class='nam'>downloaded</span><span class='strut'> </span></p> -<p id='t478' class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>expected</span> <span class='op'>=</span> <span class='nam'>expected</span><span class='strut'> </span></p> -<p id='t479' class='pln'><span class='strut'> </span></p> -<p id='t480' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeDLHandler</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPHandler</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t481' class='pln'> <span class='str'>"""Handler for HTTP requests and responses.</span><span class='strut'> </span></p> -<p id='t482' class='pln'><span class='strut'> </span></p> -<p id='t483' class='pln'><span class='str'> This class, when installed with an OpenerDirector, automatically adds</span><span class='strut'> </span></p> -<p id='t484' class='pln'><span class='str'> the standard headers to every HTTP request and handles gzipped and</span><span class='strut'> </span></p> -<p id='t485' class='pln'><span class='str'> deflated responses from web servers. If compression is to be avoided in</span><span class='strut'> </span></p> -<p id='t486' class='pln'><span class='str'> a particular request, the original request in the program code only has</span><span class='strut'> </span></p> -<p id='t487' class='pln'><span class='str'> to include the HTTP header "Youtubedl-No-Compression", which will be</span><span class='strut'> </span></p> -<p id='t488' class='pln'><span class='str'> removed before making the real request.</span><span class='strut'> </span></p> -<p id='t489' class='pln'><span class='strut'> </span></p> -<p id='t490' class='pln'><span class='str'> Part of this code was copied from:</span><span class='strut'> </span></p> -<p id='t491' class='pln'><span class='strut'> </span></p> -<p id='t492' class='pln'><span class='str'> http://techknack.net/python-urllib2-handlers/</span><span class='strut'> </span></p> -<p id='t493' class='pln'><span class='strut'> </span></p> -<p id='t494' class='pln'><span class='str'> Andrew Rowls, the author of that code, agreed to release it to the</span><span class='strut'> </span></p> -<p id='t495' class='pln'><span class='str'> public domain.</span><span class='strut'> </span></p> -<p id='t496' class='pln'><span class='str'> """</span><span class='strut'> </span></p> -<p id='t497' class='pln'><span class='strut'> </span></p> -<p id='t498' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t499' class='pln'> <span class='key'>def</span> <span class='nam'>deflate</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t500' class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t501' class='stm mis'> <span class='key'>return</span> <span class='nam'>zlib</span><span class='op'>.</span><span class='nam'>decompress</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>,</span> <span class='op'>-</span><span class='nam'>zlib</span><span class='op'>.</span><span class='nam'>MAX_WBITS</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t502' class='stm mis'> <span class='key'>except</span> <span class='nam'>zlib</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t503' class='stm mis'> <span class='key'>return</span> <span class='nam'>zlib</span><span class='op'>.</span><span class='nam'>decompress</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t504' class='pln'><span class='strut'> </span></p> -<p id='t505' class='stm run hide_run'> <span class='op'>@</span><span class='nam'>staticmethod</span><span class='strut'> </span></p> -<p id='t506' class='pln'> <span class='key'>def</span> <span class='nam'>addinfourl_wrapper</span><span class='op'>(</span><span class='nam'>stream</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t507' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>addinfourl</span><span class='op'>,</span> <span class='str'>'getcode'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t508' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>addinfourl</span><span class='op'>(</span><span class='nam'>stream</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t509' class='stm mis'> <span class='nam'>ret</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>addinfourl</span><span class='op'>(</span><span class='nam'>stream</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t510' class='stm mis'> <span class='nam'>ret</span><span class='op'>.</span><span class='nam'>code</span> <span class='op'>=</span> <span class='nam'>code</span><span class='strut'> </span></p> -<p id='t511' class='stm mis'> <span class='key'>return</span> <span class='nam'>ret</span><span class='strut'> </span></p> -<p id='t512' class='pln'><span class='strut'> </span></p> -<p id='t513' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>http_request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>req</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t514' class='stm run hide_run'> <span class='key'>for</span> <span class='nam'>h</span> <span class='key'>in</span> <span class='nam'>std_headers</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t515' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>h</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t516' class='stm run hide_run'> <span class='key'>del</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='nam'>h</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t517' class='stm run hide_run'> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>add_header</span><span class='op'>(</span><span class='nam'>h</span><span class='op'>,</span> <span class='nam'>std_headers</span><span class='op'>[</span><span class='nam'>h</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t518' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'Youtubedl-no-compression'</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t519' class='stm run hide_run'> <span class='key'>if</span> <span class='str'>'Accept-encoding'</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t520' class='stm run hide_run'> <span class='key'>del</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='str'>'Accept-encoding'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t521' class='stm run hide_run'> <span class='key'>del</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='str'>'Youtubedl-no-compression'</span><span class='op'>]</span><span class='strut'> </span></p> -<p id='t522' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>req</span><span class='strut'> </span></p> -<p id='t523' class='pln'><span class='strut'> </span></p> -<p id='t524' class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>http_response</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>req</span><span class='op'>,</span> <span class='nam'>resp</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t525' class='stm run hide_run'> <span class='nam'>old_resp</span> <span class='op'>=</span> <span class='nam'>resp</span><span class='strut'> </span></p> -<p id='t526' class='pln'> <span class='com'># gzip</span><span class='strut'> </span></p> -<p id='t527' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>resp</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'Content-encoding'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>'gzip'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t528' class='stm run hide_run'> <span class='nam'>gz</span> <span class='op'>=</span> <span class='nam'>gzip</span><span class='op'>.</span><span class='nam'>GzipFile</span><span class='op'>(</span><span class='nam'>fileobj</span><span class='op'>=</span><span class='nam'>io</span><span class='op'>.</span><span class='nam'>BytesIO</span><span class='op'>(</span><span class='nam'>resp</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='str'>'r'</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t529' class='stm run hide_run'> <span class='nam'>resp</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addinfourl_wrapper</span><span class='op'>(</span><span class='nam'>gz</span><span class='op'>,</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>code</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t530' class='stm run hide_run'> <span class='nam'>resp</span><span class='op'>.</span><span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>msg</span><span class='strut'> </span></p> -<p id='t531' class='pln'> <span class='com'># deflate</span><span class='strut'> </span></p> -<p id='t532' class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>resp</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>'Content-encoding'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>'deflate'</span><span class='op'>:</span><span class='strut'> </span></p> -<p id='t533' class='stm mis'> <span class='nam'>gz</span> <span class='op'>=</span> <span class='nam'>io</span><span class='op'>.</span><span class='nam'>BytesIO</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>deflate</span><span class='op'>(</span><span class='nam'>resp</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t534' class='stm mis'> <span class='nam'>resp</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addinfourl_wrapper</span><span class='op'>(</span><span class='nam'>gz</span><span class='op'>,</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>code</span><span class='op'>)</span><span class='strut'> </span></p> -<p id='t535' class='stm mis'> <span class='nam'>resp</span><span class='op'>.</span><span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>old_resp</span><span class='op'>.</span><span class='nam'>msg</span><span class='strut'> </span></p> -<p id='t536' class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>resp</span><span class='strut'> </span></p> -<p id='t537' class='pln'><span class='strut'> </span></p> -<p id='t538' class='stm run hide_run'> <span class='nam'>https_request</span> <span class='op'>=</span> <span class='nam'>http_request</span><span class='strut'> </span></p> -<p id='t539' class='stm run hide_run'> <span class='nam'>https_response</span> <span class='op'>=</span> <span class='nam'>http_response</span><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html> diff --git a/test_coverage/youtube_dl_version.html b/test_coverage/youtube_dl_version.html deleted file mode 100644 index d7bdade6e..000000000 --- a/test_coverage/youtube_dl_version.html +++ /dev/null @@ -1,86 +0,0 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> -<head> - <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> - - - <meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' /> - <title>Coverage for youtube_dl.version: 100%</title> - <link rel='stylesheet' href='style.css' type='text/css'> - - <script type='text/javascript' src='jquery-1.4.3.min.js'></script> - <script type='text/javascript' src='jquery.hotkeys.js'></script> - <script type='text/javascript' src='jquery.isonscreen.js'></script> - <script type='text/javascript' src='coverage_html.js'></script> - <script type='text/javascript' charset='utf-8'> - jQuery(document).ready(coverage.pyfile_ready); - </script> -</head> -<body id='pyfile'> - -<div id='header'> - <div class='content'> - <h1>Coverage for <b>youtube_dl.version</b> : - <span class='pc_cov'>100%</span> - </h1> - <img id='keyboard_icon' src='keybd_closed.png'> - <h2 class='stats'> - 1 statements - <span class='run hide_run shortkey_r button_toggle_run'>1 run</span> - <span class='mis shortkey_m button_toggle_mis'>0 missing</span> - <span class='exc shortkey_x button_toggle_exc'>0 excluded</span> - - </h2> - </div> -</div> - -<div class='help_panel'> - <img id='panel_icon' src='keybd_open.png'> -<p class='legend'>Hot-keys on this page</p> - <div> -<p class='keyhelp'> - <span class='key'>r</span> - <span class='key'>m</span> - <span class='key'>x</span> - <span class='key'>p</span> toggle line displays - </p> -<p class='keyhelp'> - <span class='key'>j</span> - <span class='key'>k</span> next/prev highlighted chunk - </p> -<p class='keyhelp'> - <span class='key'>0</span> (zero) top of page - </p> -<p class='keyhelp'> - <span class='key'>1</span> (one) first highlighted chunk - </p> - </div> -</div> - -<div id='source'> - <table cellspacing='0' cellpadding='0'> - <tr> - <td class='linenos' valign='top'> -<p id='n1' class='pln'><a href='#n1'>1</a></p> -<p id='n2' class='stm run hide_run'><a href='#n2'>2</a></p> - - </td> - <td class='text' valign='top'> -<p id='t1' class='pln'><span class='strut'> </span></p> -<p id='t2' class='stm run hide_run'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>'2012.12.11'</span><span class='strut'> </span></p> - - </td> - </tr> - </table> -</div> - -<div id='footer'> - <div class='content'> - <p> - <a class='nav' href='index.html'>« index</a> <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a> - </p> - </div> -</div> - -</body> -</html>